首页 文章

来自Zelig&Amelia的推算数据的摘要统计数据

提问于
浏览
0

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

    我无法弄清楚如何在注释中格式化代码,所以在这里 .

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

相关问题