在函数中调用amelia插补以在多次插补后计算y-hat

时间:2017-05-15 20:40:18

标签: r imputation

我最终想做的是在多次插补后得到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"相同的内容?< / p>

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

如何为单个插补和变量?

创建通用调用

1 个答案:

答案 0 :(得分:0)

来自Amelia docs的示例

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]