来自 Zelig & Amelia 的估算数据的汇总统计

Summary statistics for imputed data from Zelig & Amelia

我正在使用 Amelia 来估算缺失值。

虽然我可以使用 Zelig 和 Amelia 进行一些计算...

如何使用这些包来查找新估算数据的合并均值和标准差?

library(Amelia)
library(Zelig)

n= 100
x1= rnorm(n,0,1) #random normal distribution
x2= .4*x1+rnorm(n,0,sqrt(1-.4)^2) #x2 is correlated with x1, r=.4
x1= ifelse(rbinom(n,1,.2)==1,NA,x1) #randomly creating missing values
d= data.frame(cbind(x1,x2))

m=5 #set 5 imputed data frames
d.imp=amelia(d,m=m) #imputed data

summary(d.imp) #provides summary of imputation process

我不知道如何在评论中格式化代码,所以在这里。

foo <- function(x, fcn) apply(x, 2, fcn)
lapply(d.imp$imputations, foo, fcn = mean)
lapply(d.imp$imputations, foo, fcn = sd)

d.imp$imputations 给出了所有估算数据集的列表。您可以使用该列表,但您愿意按列找出方法和 sds,然后按您认为合适的方式合并。与相关性相同。

lapply(d.imp$imputations, cor)

编辑:在评论中进行一些讨论后,我发现您正在寻找的是如何使用鲁宾规则组合结果,例如,Amelia 生成的估算数据集的平均值。我认为您应该在 post 的标题和 body 中澄清,您正在寻找的是如何将结果与插补相结合,以便在使用 Amelia 包进行插补后根据鲁宾规则获得适当的标准误差。这从标题或原始描述中并不清楚。 "Pooling" 可以表示不同的意思,尤其是 w.r.t。差异。

mi.meld 函数正在从每个插补中寻找估计值的 q 矩阵、相应 se 估计值的 se 矩阵以及逻辑 byrow 参数。有关示例,请参见 ?mi.meld。在您的情况下,您希望 q 和 se 矩阵中每个估算数据集的样本均值和 se_hat(样本均值) 分别传递给 mi_meld。

q <- t(sapply(d.imp$imputations, foo, fcn = mean))
se <- t(sapply(d.imp$imputations, foo, fcn = sd)) / sqrt(100)
output <- mi.meld(q = q, se = se, byrow = TRUE)

应该能找到您要找的东西。对于平均值之外的其他统计数据,您将需要通过分析(如果可用)或通过引导(如果没有)获得 SE。