来自Zelig&amp ;;的估算数据的摘要统计阿梅利亚

时间:2015-03-27 20:16:58

标签: r r-zelig

我正在使用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

1 个答案:

答案 0 :(得分:0)

我无法弄清楚如何在评论中格式化代码,所以就是这样。

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生成的估算数据集的平均值。我认为你应该在你的帖子的标题和正文中澄清你正在寻找的是如何将结果与估算相结合,以便在使用包Amelia进行输入后,使用Rubin的规则获得适当的标准误差。从标题或原始描述中不清楚这一点。 “汇集”可能意味着不同的东西,特别是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,如果不是。