【问题标题】:Summary statistics for imputed data from Zelig & AmeliaZelig & Amelia 估算数据的汇总统计
【发布时间】:2015-03-27 20:16:57
【问题描述】:

我正在使用 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 更多的东西
  • 是的,我希望能够计算汇总均值和 sds
  • ...如果可能的话,抱歉和相关性

标签: r r-zelig


【解决方案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)

编辑:在 cmets 中进行一些讨论后,我发现您正在寻找的是如何使用 Rubin 的规则组合结果,例如,Amelia 生成的插补数据集的平均值。我认为您应该在帖子的标题和正文中澄清您正在寻找的是如何在使用包 Amelia 进行插补后将结果与插补相结合以获得适当的标准错误与鲁宾规则。这从标题或原始描述中不清楚。 “池化”可能意味着不同的东西,尤其是 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。

【讨论】:

  • 这是一个开始,但是这些值需要按照鲁宾规则在插补之间进行组合,以便捕获插补之间和内部的差异。 mi.meld 提供了一个起点,但不支持这些统计数据。
  • 您的问题是关于如何“找到新模拟数据的合并均值和标准差”。我回答了那个问题。您现在似乎有一个不同的问题,即如何对 amelia 生成的估算数据进行后处理,以便您可以应用 mi.meld 以根据 Rubin 的规则获得适当的 SE。如果是这种情况,我建议您使用可重现的示例提出一个新问题。
  • 抱歉,您的代码仅对参数估计值进行平均,而不计算汇总估计值,这是我的问题。
猜你喜欢
  • 2018-09-06
  • 2019-08-18
  • 2017-12-03
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
  • 2020-05-05
相关资源
最近更新 更多