【发布时间】:2017-03-05 04:49:40
【问题描述】:
我在 R 中将以下插补任务作为 for 循环运行:
myData <- essuk[c(2,3,4,5,6,12)]
myDataImp <- matrix(0,dim(myData)[1],dim(myData)[2])
lower <- c(0)
upper <- c(Inf)
for (k in c(1:5))
{
gmm.fit1 <- gmm.tmvnorm(matrix(myData[,k],length(myData[,k]),1), lower=lower, upper=upper)
useMu <- matrix(gmm.fit1$coefficients[1],1,1)
useSigma <- matrix(gmm.fit1$coefficients[2],1,1)
replaceThese <- myData[,k]<=0
myDataImp[,k] <- myData[,k]
myDataImp[replaceThese,k] <- rtmvnorm(n=sum(replaceThese), c(useMu), c(useSigma), c(-Inf), c(0))
}
步骤非常简单
- 定义数据集和空的插补数据集。
- 对于第 1-5 列,拟合模型。
- 提取模型估计值以用于插补。
- 使用模型估计运行模型并将值
但是,我想为多个组单独执行此操作,而不是针对完整样本。数据集中的第 12 列包含有关组成员的信息(整数范围为 1-72)。
我尝试了几个选项,包括使用data_list <- split(myData, myData$V12) 拆分数据框并使用lapply() 函数。但是,由于模型估计的格式,这不起作用:
Error in as.data.frame.default(data) :
cannot coerce class ""gmm"" to a data.frame
我也考虑过执行嵌套 for 循环的可能性,尽管我不确定如何实现。任何建议都非常感谢。
【问题讨论】:
-
请提供 essuk 或 myData 的可重现示例。