news 2026/5/6 13:00:43

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

作者头像

张小明

前端开发工程师

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

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


(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)


如有问题,可以直接沟通

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 12:56:07

Ollama本地安装基础教程

前言 在安装ollama的时候&#xff0c;大家有没有下载了几个AI大模型后&#xff0c;惊讶地发现系统盘空间所剩无几&#xff1f;或者想要将模型文件集中管理&#xff0c;却不知道如何改变默认存储路径&#xff1f;本文&#xff0c;我将手把手教你如何完全掌控Ollama的安装和模型…

作者头像 李华
网站建设 2026/5/6 12:54:28

Windows系统优化革命:Chris Titus Tech WinUtil一站式解决方案

Windows系统优化革命&#xff1a;Chris Titus Tech WinUtil一站式解决方案 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 你是否曾经花费数小…

作者头像 李华
网站建设 2026/5/6 12:54:27

快速上手yt-dlp-gui:免费高效的Windows视频下载工具终极指南

快速上手yt-dlp-gui&#xff1a;免费高效的Windows视频下载工具终极指南 【免费下载链接】yt-dlp-gui Windows GUI for yt-dlp 项目地址: https://gitcode.com/gh_mirrors/yt/yt-dlp-gui yt-dlp-gui是一款基于强大yt-dlp命令行工具开发的Windows图形界面应用程序&#x…

作者头像 李华
网站建设 2026/5/6 12:50:28

D2DX:三步解决暗黑破坏神2在现代PC上的终极宽屏高帧率方案

D2DX&#xff1a;三步解决暗黑破坏神2在现代PC上的终极宽屏高帧率方案 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 还在为…

作者头像 李华