我有一个缺少值的数据集“base_data”。因此,我使用包“Amelia”将缺失值归入对象“a.output”。
我已经能够使用以下代码在估算结果中找到一些变量的平均值:
q.out<-NULL
se.out<-NULL
for(i in 1:m) {
dclus <- svydesign(id=~site, data=a.output$base_data[[i]])
q.out <- rbind(q.out, coef(svymean(~hh_expenditure, dclus)))
se.out <- rbind(se.out, SE(svymean(~hh_expenditure, dclus)))}
我使用以下方法组合了结果:
svymean.combine <- mi.meld(q = q.out, se = se.out)
这给了我整个人口的家庭支出 (hh_expenditure) 的平均误差和标准误差。
但是,我有一个变量将人口分成财富五分位数(wealth_quin)。
因此,我现在想要找到每个财富 quin 的家庭支出的平均值和标准误差(变量为 1、2、3、4 或 5)。
我最初尝试对插补数据进行子集化,但这出现了很多错误。
有没有办法做到这一点,而不必在输入数据之前将数据分成 5 个财富五分位数?
干杯,
提摩太
编辑:这是一个可行的例子
require(Amelia)
require(survey)
a<-as.data.frame(c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16))
b<-as.data.frame(c(1,2,2,1,2,1,1,2,1,2,2,1,1,2,1,2))
c<-as.data.frame(c(2,7,8,5,4,4,3,8,7,9,10,1,3,3,2,8))
d<-as.data.frame(c(3,9,7,4,5,5,2,10,8,10,12,2,4,4,3,7))
e<-as.data.frame(c(2500,8000,NA,4500,4500,NA,2500,NA,7400,9648,1112,1532,3487,3544,NA,7000)
impute<-cbind(a,b,c,d,e)
names(impute) <- c("X","site","var2","var3", "hh_inc")
所以不,我们有一个数据框可以使用,我想估算的 hh_inc 缺少值。第一步,设置插补数
m<-5
现在运行插补:
a.output <- amelia(x = impute, m=m, autopri=0.5,cs="X",
idvars=c("site","var2"),
logs=c("hh_inc","var3"))
a.output 现在保存来自 5 个插补的数据。
我现在要做的是使用来自 amelia 的估算值分别找到站点 1 和站点 2 的平均(和标准误差)hh_inc。
那怎么可能呢?我知道如果我忽略 NA 是可以做到的。但这可能会引入偏见,因此我首先估算了这些值。
干杯,
提摩太
编辑:我对此给予了赏金。如果没有人知道确切的方法,那么可以使用鲁宾斯公式(http://sites.stat.psu.edu/~jls/mifaq.html#minf)将各个估算数据集的结果组合起来。 ,我将奖励能够将 5 个独立的估算数据集从 Amelia 对象转换为 5 个独立的、完整的数据帧的人。