我正在尝试使用交叉分类嵌套(即,数据嵌套在两个不同的分组变量中,这两个变量彼此不嵌套;下面代码中的group1和group2 )对数据集执行多个补偿。为了说明多级结构,我在miceadds包中使用了method="2l.pmm“。但是,当我运行代码时,我得到一条错误消息:
“错误在z0* uindex_clus,1:NR,drop = FALSE :不一致的数组
我想知道为什么我会收到这条消息。
我试图推算的完整数据集有279行和188列。因为我在研究中采用了计划中的缺失,所以这些列中大约有120列需要推算。为了缩小错误代码的原因范围,我尝试将数据集极大地减少为两个分组变量和几个其他变量。当我添加第二个分组变量(group2)作为预测变量时,似乎出现了问题。
library(mice)
library(miceadds)
#Partial dataset
dat <- data.frame(
group1 = #Grouping variable 1
c(44,17,12,3,19,28,28,16,47,33,28,42,50,38,22,33,15,44,33,28,7,47,38,16,49,23,11,17,28,50,49,17,38,31,28,49,17,22,26,11,45,10,26,7,60,7,17,37,44,16),
group2 = #Grouping variable 2
c(34,26,40,6,40,9,11,40,36,36,9,39,36,36,36,36,36,36,36,7,3,40,4,40,7,36,36,26,11,36,7,40,36,11,9,7,26,40,36,36,36,31,36,19,31,19,36,7,36,11),
VarA = #Response to a survey item
c(3,2,3,NA,NA,5,4,4,NA,2,3,NA,NA,4,4,3,NA,3,3,NA,2,NA,NA,2,NA,4,NA,NA,5,NA,NA,4,4,NA,4,5,2,4,1,NA,2,3,NA,NA,4,3,NA,2,2,NA),
VarB = #Response to another survey item
c(4,NA,NA,3,2,3,1,NA,3,2,NA,5,2,NA,2,NA,1,2,NA,2,NA,NA,NA,3,4,NA,2,NA,NA,NA,2,3,4,4,4,4,2,NA,NA,2,1,3,2,2,3,3,NA,NA,1,4))
#Imputation method
medat <- make.method(dat)
medat[c("group1","group2","VarA","VarB")] <- c("","","2l.pmm","2l.pmm")
#Predictor matrix
mepred <- make.predictorMatrix(dat)
mepred[c("VarA","VarB"),c("group1","group2")] <- -2
mepred[c("group1","group2")] <- 0
#Imputation
impdat <- mice(dat,method=medat,predictorMatrix=mepred,m=5,maxit=5,seed=5000)我怀疑错误可能是由于某些组的样本大小仅为1;但是,当包含的变量只有group1、VarA和VarB时,代码才会运行。有一些级别的group1只有样本大小为1,所以这似乎不是问题所在。
代码或数据集有哪些可能导致错误的潜在问题?任何意见都将不胜感激!
发布于 2020-01-08 17:08:35
在解决了同样的问题之后,我找到了一个可能对您(和其他人)也有帮助的解决方案。在我的例子中,问题出在预测矩阵中。我按如下方式定义了集群变量:
mepred [,"group1"] <- -2 但是,我忘记了将对角线设置为0:
mepred ["group1", "group1"] <- 0在您的例子中,似乎没有正确定义集群变量。示例中的以下代码:
mepred[c("VarA","VarB"),c("group1","group2")] <- -2
mepred[c("group1","group2")] <- 0强制mepred从矩阵转换为数值变量。除非我误解了数据的集群方式,否则您应该将group1和group2设置为-2,然后将对角线设置为0。所以:
mepred <- make.predictorMatrix(dat)
mepred[c("VarA","VarB"),c("group1","group2")] <- -2
mepred[c("group1","group2")] <- 0但是,当我使用您的数据执行此操作时,也会给出一个错误。你有没有检查过是否有可能应用2l.pmm来识别两个不同的集群变量?如果我只标识了1(即group1),脚本就会运行并正常工作。也许您可以将group1和group2中的信息合并到一个变量中?
https://stackoverflow.com/questions/57482365
复制相似问题