首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用2l.pmm方法运行鼠标时出现"Error in z0 * u[index_clus,1:NR,drop = FALSE]:non-conformable array“错误

使用2l.pmm方法运行鼠标时出现"Error in z0 * u[index_clus,1:NR,drop = FALSE]:non-conformable array“错误
EN

Stack Overflow用户
提问于 2019-08-14 01:06:28
回答 1查看 57关注 0票数 0

我正在尝试使用交叉分类嵌套(即,数据嵌套在两个不同的分组变量中,这两个变量彼此不嵌套;下面代码中的group1和group2 )对数据集执行多个补偿。为了说明多级结构,我在miceadds包中使用了method="2l.pmm“。但是,当我运行代码时,我得到一条错误消息:

“错误在z0* uindex_clus,1:NR,drop = FALSE :不一致的数组

我想知道为什么我会收到这条消息。

我试图推算的完整数据集有279行和188列。因为我在研究中采用了计划中的缺失,所以这些列中大约有120列需要推算。为了缩小错误代码的原因范围,我尝试将数据集极大地减少为两个分组变量和几个其他变量。当我添加第二个分组变量(group2)作为预测变量时,似乎出现了问题。

代码语言:javascript
复制
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,所以这似乎不是问题所在。

代码或数据集有哪些可能导致错误的潜在问题?任何意见都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2020-01-08 17:08:35

在解决了同样的问题之后,我找到了一个可能对您(和其他人)也有帮助的解决方案。在我的例子中,问题出在预测矩阵中。我按如下方式定义了集群变量:

代码语言:javascript
复制
mepred [,"group1"] <- -2 

但是,我忘记了将对角线设置为0:

代码语言:javascript
复制
mepred ["group1", "group1"] <- 0

在您的例子中,似乎没有正确定义集群变量。示例中的以下代码:

代码语言:javascript
复制
mepred[c("VarA","VarB"),c("group1","group2")] <- -2
mepred[c("group1","group2")] <- 0

强制mepred从矩阵转换为数值变量。除非我误解了数据的集群方式,否则您应该将group1和group2设置为-2,然后将对角线设置为0。所以:

代码语言:javascript
复制
mepred <- make.predictorMatrix(dat)
mepred[c("VarA","VarB"),c("group1","group2")] <- -2
mepred[c("group1","group2")] <- 0

但是,当我使用您的数据执行此操作时,也会给出一个错误。你有没有检查过是否有可能应用2l.pmm来识别两个不同的集群变量?如果我只标识了1(即group1),脚本就会运行并正常工作。也许您可以将group1和group2中的信息合并到一个变量中?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57482365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档