You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何基于Rubin法则手动计算多重插补数据集的合并p值?

我太懂这种“搞定了大部分就差个p值交差”的处境了!既然已经掌握了Rubin法则合并系数和标准误的方法,那合并p值其实也有明确的套路,给你理清楚两种常用方式:

用Rubin法则合并p值的实用方法

方法一:基于合并统计量的近似计算(快速上手)

如果你已经算出了合并系数$\bar{\beta}$和合并标准误$SE_{pooled}$,可以先算出合并t统计量:

t_pooled = |$\bar{\beta}$| / $SE_{pooled}$

但这里的自由度不能用单个模型的自由度,得用Rubin调整后的有效自由度

df_pooled = (M - 1) / (1 + 1/γ)

其中:

  • M是插补数据集的数量
  • $\gamma$是相对方差增量,公式为$\gamma = (1 + 1/M)λ$,而$λ$是你算合并标准误时已经得到的「组间方差/组内平均方差」的比值

有了t值和调整后的自由度,就可以通过t分布计算双侧p值。这个方法适合插补数据集数量M较大的场景,计算起来快,但属于近似结果。

方法二:Li-Raghunathan-Rubin精确p值计算(更推荐)

如果M比较小(比如少于10个),上面的近似方法误差会比较大,这时候用这个精确方法更靠谱:

  1. 对每个插补数据集,先算出单个模型的t统计量$t_k$和对应的残差自由度$df_k$
  2. 计算每个$t_k$对应的单侧p值$p_k$(如果是双侧检验,后续记得乘2)
  3. 算出所有单个p值的平均值:$\bar{p} = \frac{1}{M}\sum_{k=1}^M p_k$
  4. 用上一步的$λ$(组间/组内方差比),计算调整后的F分布分母自由度:
df_denominator = 2*(M-1)/(1 + 1/(M*λ))
  1. 最后将$\bar{p}$代入分子自由度为2、分母自由度为$df_denominator$的F分布,得到合并后的精确p值

偷懒小技巧

其实完全不用手动算这么麻烦!大部分统计软件都内置了Rubin法则的合并功能:

  • R里用mice包做完插补后,用pool()函数合并模型,再summary()就能直接得到合并后的系数、标准误和p值
  • Stata里用mi estimate前缀运行模型,输出结果里就包含了正确的合并p值

这样既准确又省时间,完全能满足上司的要求~

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

火山引擎 最新活动