问题描述
|
我在R中使用Amelia和Zelig对未清理的变量对我的数据集进行多次插补。可重现的数据集位于Zelig软件包中。
require(Zelig)
require(Amelia)
data(freeTrade)
a.out <- amelia(freeTrade,m = 5,ts = \"year\",cs = \"country\")
我想在5个合并的数据集中重新编码变量,例如:
> polity <- polity-1
是否有任何函数可以自动对5个MI数据集重复5次,而不是分别调用a.out$imputations[[1]]
,a.out$imputations[[2]]
.....,然后进行以下分析。
> z.out <- zelig(tariff ~ polity + pop + gdp.pc + year +
+ country,data = freeTrade,model = \"ls\")
> summary(z.out)
让我知道是否有意义。根据Chase的要求,以上是Zelig的示例。但是我使用了自己的数据集,如下所示:
require(Amelia)
a.out <- amelia(MIV5,m=5,idvars = c(\"STU_ID\",\"SCH_ID\",\"BYSTUWT\",\"BYRACE\",\"F1SES2\",\"F1TxmsTD\",\"F2HsstAT\",\"BYTxmsTD\",\"BYURBAN\",\"BYTXRSTD\",\"BYTXCSTD\",\"BYNELS2M\",\"BYNELS2R\",\"BYNELS0M\",\"BYPISAME\",\"BYPISARE\",\"BYTXMIRR\",\"BYTXMQU\"),noms = c(\"BYSEX\",\"BYSTLANG\",\"F2B07\",\"F2EVRAPP\"),ords= c (\"BYSTEXP\",\"F1SES2QU\"),p2c=0)
现在,我必须重新编码和清除变量,例如将\“ BYRACE \”因子转换为数字\“ race \”,并获得数学得分:
race <- as.numeric(BYRACE)
mthgn <- F1TxmsTD-BYTxmsTD
谢谢!
解决方法
a.out$imputations <- lapply(a.out$imputations,transform,polity=polity-1)
a.out$imputations <- lapply(a.out$imputations,function(i) i[,\'polity\'] <- log(i[,\'polity\'])-1)
估算的数据集仅作为列表包含在Amelia对象中。所以lapply()应该可以工作。