我试图对具有交叉分类嵌套的数据集执行多次插补(即,数据嵌套在两个彼此不嵌套的不同分组变量中;以下代码中的group1和group2)。 为了说明多层结构,我在miceadds包中使用method =“ 2l.pmm”。 但是,当我运行代码时,出现错误消息:
“ z0 * u [index_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,因此这似乎不是问题。
代码或数据集可能引起错误的哪些潜在问题?任何输入将不胜感激!
答案 0 :(得分:0)
在解决同一问题后,我找到了可能对您(和其他人)有帮助的解决方案。就我而言,问题出在预测矩阵中。我定义了clustervariable如下:
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识别2个不同的群集变量?如果我只标识1(即group1),则脚本可以运行并起作用。也许您可以将group1和group2中的信息合并到一个变量中?