应用鲁宾规则来组合多重插补数据集

机器算法验证 spss 缺失数据 多重插补 汇集
2022-03-26 07:34:34

我希望汇集对多重估算数据(例如多重回归,ANOVA)执行的一组非常基本的分析的结果。多重插补和分析已在 SPSS 中完成,但 SPSS 不提供一些统计数据的汇总结果,包括 F 值、协方差矩阵、R 平方等。

我已经尝试通过冒险进入 R 或尝试可用但未成功解决问题的宏(例如,在将 Mice 中超过 5 个插补的统计数据池化时遇到问题)来解决这个问题。

在这一点上,我想尝试手动计算这些,应用鲁宾规则,使用 SPSS 生成的输出。但是,我不确定如何根据 SPSS 生成的输出 U¯=1mj=1mUj

我真的很感激对此的详细说明。

2个回答

鲁宾规则只能应用于服从正态分布的参数。对于具有 F 或卡方分布的参数,需要一组不同的公式:

  • 艾莉森,PD(2002 年)。缺失数据。加利福尼亚州纽伯里公园:圣人。

要在多个估算数据集上执行 ANOVA,您可以使用 R 包 mouseadds ( pdf ; miceadds::mi.anova)。

更新 1

这是一个完整的例子:

  1. 将数据从 SPSS 导出到 R。在 Spss 中,将数据集保存为 .csv

  2. 读入你的数据集:

    library(miceadds)   
    dat <– read.csv(file='your-dataset.csv')
    

    让我们假设,是你的因变量,你有两个因素reading

    • 性别,男性 = 0,女性 = 1
    • 治疗, 控制 = 0 和“接受治疗” = 1

    现在让我们将它们转换为因子:

    dat$gender    <- factor(dat$gender)
    dat$treatment <- factor(dat$treatment)
    
  3. 将您的数据集转换为 mids 对象,我们假设第一个变量包含插补数(SPSS 中的 Imputation_):

    dat.mids <- as.mids(dat)
    
  4. 现在您可以执行方差分析:

    fit <- mi.anova(mi.res=dat.mids, formula="reading~gender*treatment", type=3)
    summary(fit)
    

更新 2 这是对您的第二条评论的回复:

您在此处描述的是 SPSS 和 R 之间的数据导入/导出相关问题。您可以尝试将.sav文件直接导入 R,并且有一堆专用包:、、、、foreignrio我更喜欢 csv 方式,但这是一个品味问题和/或取决于您的问题的性质。也许您还应该查看 youtube 上的一些教程或互联网上的其他资源。gdataHmisc

library(foreign)
dat <- read.spss(file='path-to-sav', use.value.labels=F, to.data.frame=T)

更新 3 这是对您的第一条评论的回复:

是的,您可以在 SPSS 中进行分析并将 F 值汇集到其中miceadds(请注意,此示例取自miceadds::micombine.F帮助页面):

library(miceadds)
Fvalues <- c(6.76 , 4.54 , 4.23 , 5.45 , 4.78, 6.76 , 4.54 , 4.23 , 5.45 , 4.78, 
             6.76 , 4.54 , 4.23 , 5.45 , 4.78, 6.76 , 4.54 , 4.23 , 5.45 , 4.78 )
micombine(Fvalues, df1=4)

您正确地记下了汇总估计量:

U¯=1mi=1mUi

其中个估算数据集的分析结果。通常,分析结果具有一些正态近似分布,我们可以从中得出推断或创建置信区间。这主要是使用平均值 ( ) 及其标准误差来完成的。T 检验、线性回归、逻辑回归和基本上大多数分析都可以根据值及其标准误差进行充分总结。UiiUiUise(Ui)

鲁宾规则使用总方差定律将方差记为插补方差之间和内部的总和:

var(U¯)=E[var(U¯|Ui)]+var(E[U¯|Ui])

第一项是内方差,使得其中是方差来自第个完整或估算数据集的分析结果。后一项是插补间方差:我从来没有完全掌握这里的 DF 校正,但这基本上是公认的方法。E[var(U¯|Ui)=1mi=1mViViivar(E[U¯|Ui])=M+1M1i=1m(UiU¯)2

无论如何,由于推荐的插补数量很小(Rubin 建议少至 5 个),通常可以通过手动拟合每个分析来计算这个数字。下面列出了一个手动示例:

require(mice)
set.seed(123)
nhimp <- mice(nhanes)
sapply(1:5, function(i) {
  fit <- lm(chl ~ bmi, data=complete(nhimp, i))
  print(c('coef'=coef(fit)[2], 'var'=vcov(fit)[2, 2]))
})

给出以下输出:

coef.bmi      var 
2.123417 4.542842 
3.295818 3.801829 
2.866338 3.034773 
1.994418 4.124130 
3.153911 3.531536

因此,内部方差是插补特定点估计方差的平均值:3.8(第二列的平均值)。之间的方差是第一列的 0.35 方差)。使用 DF 校正,我们得到方差 4.23。pool这与包中给出的命令一致mice

> fit <- with(data=nhimp,exp=lm(chl~bmi))
> summary(pool(fit))
                  est        se        t       df   Pr(>|t|)     lo 95      hi 95 nmis       fmi     lambda
(Intercept) 119.03466 54.716451 2.175482 19.12944 0.04233303  4.564233 233.505080   NA 0.1580941 0.07444487
bmi           2.68678  2.057294 1.305978 18.21792 0.20781073 -1.631731   7.005291    9 0.1853028 0.10051760

其中显示模型系数的 SE = 2.057,(方差 = SE**2 = 4.23)。

我看不出增加估算数据集的数量是如何产生任何特定问题的。如果您无法提供错误示例,我不知道如何提供更多帮助。但手工组合一定能适应多种造型策略。

本文讨论了总方差定律可以推导出合并估计方差的其他估计的其他方法。特别是,作者指出(正确地)鲁宾规则的必要假设不是点估计的正态性,而是称为投机性的东西。WRT 正态性,来自回归模型的大多数点估计在中心极限定理下都具有快速收敛性,而 bootstrap 可以向您展示这一点。