我正在对一系列序数变量进行缺失估算。
我首先阅读数据框并进行一些清理:
dietgp1m<-read.csv(file='1 Month data-diet.csv',header=TRUE,na.strings=c(""," ","NA","."))
for (i in 1:ncol(dietgp1m)) {dietgp1m[,i]<-as.factor(dietgp1m[,i])}
dietgp1m<-dietgp1m[!is.na(dietgp1m$Patient.Trial.ID),]
dietgp1m["count"]<-0
for (i in 1:nrow(dietgp1m)) {dietgp1m$count[i]<-0; for (j in 9:298) {if (!is.na(dietgp1m[i,j])) {dietgp1m$count[i]<-dietgp1m$count[i]+1}}}
dietgp1m<-dietgp1m[dietgp1m$count!=0,]
然后我创建了一个缺失值插补函数,对数据集进行子集化并运行函数:
# Imputation
imputation<-function(A){
B<-mice(data = A, m = 5, method = "polr", maxit = 50, seed = 500)
C<-complete(B, 'long', include=TRUE) #include=TRUE if include the original dataset with missing values
print(colnames(C))
###pool imputed data
for (i in 4:ncol(C)) {C[,i]<-as.numeric(as.character(C[,i]))}
for (j in 4:ncol(C)) {for (i in 1:159) {if (is.na(C[i,j])) {C[i,j]<-round((C[i+159,j]+C[i+159*2,j]+C[i+159*3,j]+C[i+159*4,j]+C[i+159*5,j])/5)}}}
print(nrow(C)); print(ncol(C))
}
# Quality of life
# Diet group 1 month
seb<-subset(df3, select=c(Patient.Trial.ID, Q32a:Q32j))
missinganalysis(seb)
imputation(seb)
然后我收到一条错误消息:
iter imp variable
1 1 Q32a
Error in apply(draws, 2, sum) : dim(X) must have a positive length
Called from: apply(draws, 2, sum)
请帮忙!谢谢!
答案 0 :(得分:0)
我也收到过几次此错误消息。经过一些代码实验,我发现了为什么我得到这样一条消息:一个罕见/奇怪的组合(a)变量中的极少数缺失案例(仅在该变量中缺少一个案例)和(b)分配错误&#39;该变量的插补方法(例如,使用polr方法来估算二进制变量)。修好后,将插补方法设置为&#39; logreg&#39;对于那个二进制变量,我停止收到错误消息。
不确定这是你的情况。我建议进行一些数据筛选,以检查每个案例的缺失值的数量,并指定“正确的”#39;每个变量的插补方法(如果你没有使用pmm - pmm适用于许多不同类型的变量,请参见Van Buuren的评论:https://statisticalhorizons.com/predictive-mean-matching)。
例如,如果您有V1(二进制),V2(有序),V3(连续),V4(多用户)和V5(有序),您可以将方法设置为:
method=c('logreg', 'polr', 'pmm', 'polyreg', 'polr')
希望这有帮助。