You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在插补数据集的回归模型中提取sigma值?

提取mice插补模型的残差标准差(sigma)

问题说明

常规线性模型(lm)可以直接用sigma()函数提取残差标准差:

library(mice)
nhanes$group <- as.factor(c(rep("A", 12), rep("B", 13)))
m_1 <- lm(bmi ~ group + age, nhanes)
sigma(m_1)

但通过mice包插补数据集后,用with()构建的mira类模型对象无法直接调用sigma(),会返回空值并报错;尝试with(m_2, sigma())或sigma(pool(m_2))也无法得到正确结果。

解决方法

1. 获取单个插补模型的sigma值

mira对象本质是包含多个插补模型的列表,可通过遍历每个模型提取对应sigma:

# 遍历所有插补模型,提取每个模型的sigma
sapply(m_2$analyses, sigma)

执行后会返回一个向量,每个元素对应一个插补数据集的残差标准差。

2. 计算合并后的加权平均sigma

若需要得到整体的合并估计值,可基于每个模型的sigma和自由度进行加权平均(采用方差加权后开平方的方式,因为方差具有可加性):

# 提取每个模型的sigma和自由度
sigma_list <- sapply(m_2$analyses, sigma)
df_list <- sapply(m_2$analyses, function(x) nobs(x) - length(coef(x)))

# 计算加权平均的sigma
pooled_sigma <- sqrt(weighted.mean(sigma_list^2, df_list))
pooled_sigma

内容的提问来源于stack exchange,提问作者jRafi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 06:05:03