如何评估经模型搜索的饱和心理网络模型的稳定性?
背景与问题
bootnet包提供了多种评估心理网络模型参数稳定性与准确性的工具,比如用于边缘权重置信区间的bootstrap、中心性指标的案例删除bootstrap,以及边缘权重的bootstrap差异检验。但这些功能仅支持estimateNetwork()生成的网络对象,而用psychonetrics包估计的模型(包括经过剪枝、逐步提升等模型搜索算法得到的非饱和网络)无法直接适配bootnet函数。请问这类模型该如何评估稳定性?或者这类模型是否适合常规的稳定性指标评估?
具体案例
我基于约3000样本的二分类横断面数据估计网络模型,遵循Isvoranu & Epskamp (2021)的建议使用无正则化估计器,为优先保证特异性做了剪枝操作,模型代码如下:
model <- Ising(binaryDF) %>% runmodel() %>% prune(alpha = 0.01, adjust = "bonferroni") %>% stepup(alpha = 0.01, criterion = "bic")
在评估完模型拟合度后,我想进一步评估它的稳定性与准确性,但无法使用bootnet包。《Network Psychometrics with R》提到,psychonetrics的CIplot()函数可以绘制饱和模型的边缘置信区间,但仅在未使用模型搜索算法时有效。另外,通过psychonetrics::parameters(model)查看参数的p值和标准误,据此计算置信区间是否有效?
解决方案与分析
标准误与置信区间的有效性
直接用parameters(model)给出的标准误计算置信区间是无效的。因为剪枝、逐步提升这类模型搜索算法会引入「选择性推断」问题:你基于样本数据筛选出了显著边缘,此时模型参数的标准误和p值已不符合常规统计推断假设,会被严重低估,导致置信区间的实际覆盖概率远低于预期水平。适配bootnet的可行方法
若要使用bootnet功能,需手动处理模型兼容性:- 提取模型的边缘权重矩阵:针对Ising模型,可通过
as.matrix(parameters(model)$est[parameters(model)$par == "beta", ])获取。 - 关键注意点:bootnet默认基于原始数据重新估计模型做bootstrap,但你的模型经过了搜索流程,因此必须在每个bootstrap循环中重复完整的模型估计+搜索步骤,而非直接使用固定权重矩阵。可以自定义bootstrap函数实现这一逻辑,再将结果传入bootnet的分析函数。
- 提取模型的边缘权重矩阵:针对Ising模型,可通过
psychonetrics内置替代方案
- 参数bootstrap:使用
bootstrap()函数对模型进行重抽样,在每个样本上重复模型估计和搜索步骤,再基于参数分布计算置信区间或稳定性指标。示例代码:boot_res <- bootstrap(model, R = 1000, fun = function(m) { m <- runmodel(m) %>% prune(alpha = 0.01, adjust = "bonferroni") %>% stepup(alpha = 0.01, criterion = "bic") parameters(m)$est }) # 计算参数的bootstrap置信区间 boot_ci <- apply(boot_res$t, 2, quantile, c(0.025, 0.975)) - 案例删除稳定性:手动实现案例删除逻辑,每次删除一定比例样本(如5%),重新估计模型并计算中心性指标,再通过指标间的相关性(如CS系数)评估稳定性。
- 参数bootstrap:使用
模型与常规稳定性指标的适配性
经过模型搜索的网络模型仍可评估稳定性,但需注意:- 稳定性指标(如边缘权重置信区间、中心性CS系数)必须基于包含模型搜索步骤的重抽样计算,不能使用原始模型的标准误。
- 由于模型搜索引入了额外变异,稳定性指标的解读需更谨慎——比如CS系数可能低于饱和模型,这是正常现象,因为每次重抽样可能筛选出略有不同的边缘集合。
内容的提问来源于stack exchange,提问作者André

