【问题标题】:Call amelia imputations in a function to calculate y-hat after multiple imputation在函数中调用 amelia imputations 以计算多重插补后的 y-hat
【发布时间】:2017-05-16 05:31:54
【问题描述】:

我最终想要做的是在多重插补后获得 y-hat 分数,但 Amelia 不提供拟合值。我有使用特定数据集执行此操作的代码,但我正在尝试创建一个无论数据集如何都可以执行此操作的函数。比如:

yhat<-function(a.out,num.obs,num.imp,model.qe){}

其中num.impameliam 中使用的插补数。不过,这就是我卡住的地方:

如果a.outamelia 对象并且names(a.out$imputations)[1] 返回"imp1",为什么a.out$imputations$names(a.out$imputations)[1] 不返回与a.out$imputations$"imp1" 相同的东西?

对于a.out$imputations$names(a.out$imputations)[1],R 说:Error: attempt to apply non-function

如何为单个插补和其中的变量创建通用调用?

【问题讨论】:

  • 我很难理解你的问题。到目前为止,您为您的功能尝试了什么?此外,澄清问题本身也会有所帮助。
  • 对不起。所以,我有一个 amelia 对象,a.out。我想呼吁个人价值观。例如,我可以使用a.out$imputations$imp1[1,1] 从第一个插补中获得第一个变量的第一个观察值。但是,我希望最后一部分由函数定义,例如a.out$imputations[i,j,k],其中 i 是插补,j 是变量,k 是观察值。例如,如果 i=1、j=1、k=1,则 a.out$imputations[i,j,k] 将等效于 a.out$imputations$imp1[1,1]

标签: r imputation


【解决方案1】:

来自 Amelia 文档的示例

library(Amelia)

data(africa)
a.out <- amelia(x = africa, cs = "country", ts = "year", logs = "gdp_pc")

a.out$imputations 是一个列表

str(a.out$imputations)

列表中的元素可以通过名称或数字索引调用

head(a.out$imputations$imp1)
head(a.out$imputations[["imp1"]])
head(a.out$imputations[[1]])

每个插补都是一个数据框。数据框只是一种特定类型的列表,可以以这种方式调用元素。

head(a.out$imputations[[1]]$country)
head(a.out$imputations[[1]][["country"]])
head(a.out$imputations[[1]][[2]])
head(a.out$imputations[[1]][2])

这些方法中的最后一个方法与其他方法的不同之处在于它返回一个单列数据框,而其他方法返回一个向量。

要完全通过数字索引提取单个值,您可以执行 f.ex

a.out$imputations[[1]][3, 2]

a.out$imputations[[1]][[2]][3]

【讨论】:

  • 谢谢! [[]] 双括号对我来说是新的。我想我第一次跳的时候错过了它。
  • @JaySchylerRaadt:您可以通过调用?"[["?Extract 在文档中找到一些信息,但它看起来有点密集。信息也在这个网站上传播,但如果你不知道你在寻找什么,就很难找到,即使你知道,它也会出现在奇怪的地方。例如here,其中问题标题几乎没有表明它包含双方括号中的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 2020-08-15
相关资源
最近更新 更多