1

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

1 回答 1

1

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

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 进行插补后将结果与插补相结合以获得适当的标准错误与鲁宾规则。这从标题或原始描述中不清楚。“池化”可能意味着不同的东西,尤其是差异。

mi.meld 函数正在从每个插补中寻找估计的 aq 矩阵、相应 se 估计的 se 矩阵和逻辑 byrow 参数。有关示例,请参见 ?mi.meld。在您的情况下,您希望 q 和 se 矩阵中的每个插补数据集的样本均值和 se_hat(sample mean) 分别传递给 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。

于 2015-03-28T02:22:19.480 回答