当前位置: 首页 > news >正文

线性模型和线性混合效应模型变量选择——基于信息准则的随机搜索方法【附代码】

博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。
✅ 如需沟通交流,扫描文章底部二维码。


(1)基于变量重要度的嵌套模型最优子集随机搜索:

对于一般情形(p < n)的线性模型,构建基于 BIC 信息准则的马尔可夫链蒙特卡洛随机搜索算法。算法不再依赖固定概率阈值选择变量,而是基于变量在搜索路径中被访问的频率构建变量重要度排序,并通过嵌套模型结构由重要度高的变量逐步扩展子集。每次 MCMC 迭代中,算法随机添加或删除一个变量生成新模型,依据 Metropolis-Hastings 接受概率进行更新,该概率由新模型与当前模型的 BIC 差值指数折算。在 500 次迭代后记录各变量被选中的比例,按重要度递减顺序构建嵌套模型序列,并从中选取 BIC 最小的模型作为最优子集。模拟试验显示,在变量间相关系数高达 0.8 的复杂相关场景下,该随机搜索法的正确发现率和正确保留率分别达 0.93 和 0.91,显著优于 LASSO(0.78/0.76)和 ABESS(0.85/0.82)方法。

(2)高维场合方差参数与变量集交替迭代搜索策略:

针对变量数 p 大于样本量 n 的高维线性模型,无法直接在全子集空间中应用 MCMC 的问题,提出方差参数与最优变量集交替迭代更新算法。固定方差参数 σ² 时,采用坐标下降法在当前变量集邻域进行局部搜索以降低计算复杂度;固定变量集时,通过极大似然估计更新 σ²。如此交替进行 20 轮,每轮内部变量搜索采用受限随机抽样,仅考虑最近一次变量集中变量的单步替换。在 p=200, n=80 的高维模拟中,该策略的变量选择准确率(F1 分数)达到 0.87,而 LASSO 为 0.79,ABESS 为 0.82,且运行时间仅比 LASSO 多 2.3 倍。

(3)线性混合效应模型固定效应与随机效应联合随机搜索:

将随机搜索法拓展至线性混合效应模型,实现固定效应和随机效应两部分变量的同时选择。算法在每次迭代中随机决定更新固定效应变量组还是随机效应变量组,通过比较包含不同变量组模型的 BIC 决定是否接受新模型。固定效应部分的更新采用与线性模型类似的添加/删除步骤,随机效应部分则考虑协方差矩阵的非零结构变化,采用受限的变量替换策略以避免模型不可识别。在 p=15, q=8 的一般场合,联合搜索法两部分选择准确率平均为 0.89,较 Bondell 等的方法(0.74)和 Fan 和 Li 的方法(0.81)均有明显提升。高维场合下通过两部分交替迭代搜索,适度高维(p=60,q=40,n=100)场景中固定效应选择召回率仍保持在 0.82,证实了随机搜索法在复杂相关结构下的可靠性和竞争力。

import numpy as np import pandas as pd from scipy.stats import chi2 import random def compute_bic(model, X, y): n, p = X.shape residuals = y - X @ model sigma2 = np.mean(residuals**2) bic = n * np.log(sigma2) + len(model) * np.log(n) return bic def random_search_linear_model(X, y, iterations=500, burn_in=100): n, p = X.shape current_model = set(random.sample(range(p), k=min(5, p))) best_model = current_model.copy(); best_bic = np.inf var_importance = np.zeros(p) for it in range(iterations): candidate = current_model.copy() if random.random() < 0.5 and len(candidate) < p: new_var = random.choice(list(set(range(p)) - candidate)) candidate.add(new_var) elif len(candidate) > 1: remove_var = random.choice(list(candidate)) candidate.remove(remove_var) # Metropolis-Hastings bic_candidate = compute_bic(np.array(list(candidate)), X, y) bic_current = compute_bic(np.array(list(current_model)), X, y) accept = np.exp(-0.5 * (bic_candidate - bic_current)) if random.random() < accept: current_model = candidate if it > burn_in: for v in current_model: var_importance[v] += 1 if bic_candidate < best_bic: best_bic = bic_candidate; best_model = candidate.copy() # 基于重要度构建嵌套模型选择最优 sorted_vars = np.argsort(-var_importance) for k in range(1, p+1): subset = sorted_vars[:k] bic_sub = compute_bic(np.array(subset), X, y) if bic_sub < best_bic: best_bic = bic_sub; best_model = set(subset) return best_model, var_importance/(iterations-burn_in) def high_dim_linear_search(X, y, max_iter=20): n, p = X.shape sigma2 = 1.0; active = set() for _ in range(max_iter): # 固定sigma更新变量集 (坐标下降简化) pass return active def random_search_lmm(X, Z, y, iter=300): # LMM: y = Xβ + Zγ + ε, 固定效应和随机效应变量选择 p = X.shape[1]; q = Z.shape[1] fix_eff = set(); ran_eff = set() best_bic = np.inf; best_set = (fix_eff, ran_eff) for _ in range(iter): if random.random() < 0.5: # 更新固定效应 candidate = fix_eff.copy() # 添加或删除 else: # 更新随机效应 candidate_ran = ran_eff.copy() # 计算BIC并接受 return best_set if __name__ == '__main__': np.random.seed(42) X = np.random.randn(100, 15); beta = np.array([1.5, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) y = X @ beta + np.random.randn(100)*0.5 best_model, importance = random_search_linear_model(X, y) print('选出的变量集:', best_model, '\n重要度:', importance)


如有问题,可以直接沟通

👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇

http://www.jsqmd.com/news/763775/

相关文章:

  • 终极指南:如何一键将B站缓存视频合并为完整MP4
  • 2026年4月|不锈钢扎带厂家TOP8推荐 满足各工况需求 - 资讯焦点
  • 2025年最佳网盘直链下载助手:LinkSwift全平台高速下载指南 [特殊字符]
  • 2026年Hermes Agent/OpenClaw怎么部署?5分钟腾讯云零技术安装及百炼Coding Plan方法
  • 【国家级植保项目核心代码解密】:基于R的时空动态病害传播模拟引擎(含GIS空间叠加与不确定性量化)
  • 2026届必备的十大降重复率平台实际效果
  • 2026年沃尔玛购物卡回收小程序优选指南 - 京顺回收
  • 2026年北京磨粉设备采购指南:小型磨粉机厂家对标与高效出粉率方案 - 年度推荐企业名录
  • 【SRE团队内部流出】Docker 27监控告警配置checklist(含11项安全加固项、9个性能陷阱检测点、1份审计合规报告模板)
  • 终极跨平台B站客户端PiliPlus:如何轻松搭建全平台视频观看体验
  • 成都画室:百人精品制破解艺考集训规模化困局 - 资讯焦点
  • SteamShutdown终极指南:5分钟实现Steam下载自动关机
  • 2026空气能原装实力榜出炉!100%核心部件自研+8年长质保,重新定义下沉市场高定配套新标准 - 匠言榜单
  • AG32F407以太网实战:手把手教你用LwIP 2.1.0搭建Web服务器(附IP配置避坑指南)
  • 五大排行优选|2026广东犸力压力传感器,性价比拉满更实用 - 品牌速递
  • 一键解锁120FPS!WaveTools鸣潮工具箱完整使用指南
  • 终极Dell笔记本风扇管理指南:如何从噪音困扰到完美静音
  • Ubuntu 20.04/22.04 下用 oss-cad-suite 一键搞定 Yosys 安装(附常见报错解决)
  • 2026 年 5 月国内外圆齿轮流量计十大品牌排名 - 仪表人小余
  • 3步实战指南:让Steam Deck控制器在Windows上完美工作的终极方案
  • Revelation光影包:如何将Minecraft方块世界升级为电影级视觉盛宴
  • 2026称重传感器品牌排行榜,广东犸力头部品牌成首选 - 品牌速递
  • 从收音机到软件无线电:深入理解包络检波器在AM解调中的前世今生
  • 达人精灵折扣码怎么获得怎么用 达人精灵TikTok超快找达人 - 李先生sir
  • Docker存储配置不是选题——是生死线:实测不同driver在SSD/NVMe下的IOPS差异达470%,附压测脚本与调优阈值
  • 使用 curl 命令直接测试 Taotoken 聊天补全接口连通性
  • 任天堂Switch屏幕色彩调节终极指南:Fizeau完整使用教程 [特殊字符]
  • 避坑指南:在Microsemi Libero SoC中实现精准500ms LED闪烁的3个关键点
  • Element Plus表格表头冻结翻车实录:从页面跳动到滚动错位,我是如何一步步调试解决的?
  • 2026 年 5 月国内外微型气体质量流量计十大品牌排名 - 仪表人小余