2016-06-29 37 views
2

因此,我使用mice软件包来推算缺失的数据。我是新来的填补,所以我有一个点,但已经遇到了一个陡峭的学习曲线。为了让玩具例子:使用集群数据的鼠标进行填充

library(mice) 
# Using nhanes dataset as example 
df1 <- mice(nhanes, m=10) 

因此,大家可以看到我估算大多采用默认设置DF1 10倍 - 我习惯使用的回归模型这个结果,汇集结果等。但是在我的现实生活中的数据,我有来自不同国家的调查数据。因此,各国的失误程度各不相同,特定变量的值也就是年龄,教育程度等。因此,我想归咎于错误,允许国家进行集群。因此,我将创建没有missings分组变量(在这个玩具例如与其他变量的相关性缺失的课程,但在我的实际数据存在)

# Create a grouping variable 
nhanes$country <- sample(c("A", "B"), size=nrow(nhanes), replace=TRUE) 

那么如何我告诉mice()这个变量与其他人不同 - 即它是多级数据集中的一个级别?

+1

在每个因素水平上运行'鼠标'是一个很好的解决方法?例如,'老鼠(nhanes [nhanes $ country =='A'),],m = 10)',然后循环这些因子或使用您最喜欢的R的groupby操作?这当然假设为国家“A”的数据进行归算,不需要其他国家,即它们是独立的。 –

+0

嗯,是的,我确实尝试过 - 有一个函数可以将数据集的rbind.mids(' - 但我发现这个函数给了我很多警告和错误,我无法弄清楚,最终我认为是用对数据结构的认识会更好,谢谢您的建议 – user2498193

回答

2

如果您在“混合效果”模型中思考群集,那么您应该使用mice提供的用于群集数据的方法。这些方法可以在manual中找到,通常以2l.something为前缀。

的各种用于群集数据的方法在mice会受到一定限制,但我可以推荐使用2l.pan用于在集群级别缺少下级单元和数据2l.only.norm

作为混合效果模型的替代方法,您可以考虑使用虚拟指标来表示聚类结构(即每个聚类的一个虚拟变量)。从混合效应模型的角度来看,这种方法并不理想。因此,如果您想进行混合效果分析,请尽可能使用混合效果模型。

下面,我给出了两种策略的例子。

准备:

library(mice) 
data(nhanes) 

set.seed(123) 
nhanes <- within(nhanes,{ 
    country <- factor(sample(LETTERS[1:10], size=nrow(nhanes), replace=TRUE)) 
    countryID <- as.numeric(country) 
}) 

案例1:使用归责混合效应模型

本节使用2l.pan缺失数据归咎于三个变量。请注意,我使用clusterID作为群集变量,方法是在预测矩阵中指定-2。对于所有其他变量,我只分配固定效果(1)。

# "empty" imputation as a template 
imp0 <- mice(nhanes, maxit=0) 
pred1 <- imp0$predictorMatrix 
meth1 <- imp0$method 

# set imputation procedures 
meth1[c("bmi","hyp","chl")] <- "2l.pan" 

# set predictor Matrix (mixed-effects models with random intercept 
# for countryID and fixed effects otherwise) 
pred1[,"country"] <- 0  # don't use country factor 
pred1[,"countryID"] <- -2 # use countryID as cluster variable 
pred1["bmi", c("age","hyp","chl")] <- c(1,1,1) # fixed effects (bmi) 
pred1["hyp", c("age","bmi","chl")] <- c(1,1,1) # fixed effects (hyp) 
pred1["chl", c("age","bmi","hyp")] <- c(1,1,1) # fixed effects (chl) 

# impute 
imp1 <- mice(nhanes, maxit=20, m=10, predictorMatrix=pred1, method=meth1) 

情况2:使用用于集群

本节使用pmm用于插补,和群集结构虚设指标(DIS)插补是在“特别”的方式表示。也就是说,聚集不是由随机效应代替,而是由固定效应代替。这可能会夸大由于缺失数据而导致的变量的群集级别变化,因此请确保您知道您在使用它时做了什么。

# create dummy indicator variables 
DIs <- with(nhanes, contrasts(country)[country,]) 
colnames(DIs) <- paste0("country",colnames(DIs)) 
nhanes <- cbind(nhanes,DIs) 


# "empty" imputation as a template 
imp0 <- mice(nhanes, maxit=0) 
pred2 <- imp0$predictorMatrix 
meth2 <- imp0$method 

# set imputation procedures 
meth2[c("bmi","hyp","chl")] <- "pmm" 

# for countryID and fixed effects otherwise) 
pred2[,"country"] <- 0  # don't use country factor 
pred2[,"countryID"] <- 0 # don't use countryID 
pred2[,colnames(DIs)] <- 1 # use dummy indicators 
pred2["bmi", c("age","hyp","chl")] <- c(1,1,1) # fixed effects (bmi) 
pred2["hyp", c("age","bmi","chl")] <- c(1,1,1) # fixed effects (hyp) 
pred2["chl", c("age","bmi","hyp")] <- c(1,1,1) # fixed effects (chl) 

# impute 
imp2 <- mice(nhanes, maxit=20, m=10, predictorMatrix=pred2, method=meth2) 

如果你想什么想这些方法读了,看看onethese论文two

+0

嗨SimonG。很好的答案,谢谢它帮助很多!这有助于我更好地理解包装参考。然而,我留下了一个问题。在情况1中,为什么使用-2来表示群集变量而不是+2。 -2和+2有什么区别 - 我没有在帮助文件中解释,我可以看到。 – user2498193

+1

它在[manual](https://cran.r-project.org/web/packages/mice/mice.pdf)(第47页)中解释,它们在那里解释'2l.pan'的'type'参数。 'type'参数描述了'鼠标'如何理解预测矩阵('pred1')中的行。在所有的两级函数中,由'-2'表示的变量被解释为群集变量。具有'1'的人被理解为具有固定效应的预测因子,具有随机效应的预测因子'2'。代码“3”和“4”与“1”和“2”类似,不同之处在于计算聚类的均值并将其作为附加预测因子。 – SimonG

+0

啊,辉煌的谢谢,我错过了。非常感谢您的帮助! – user2498193

1

您必须设置一个predictorMatrix来告诉鼠标使用哪个变量来推测另一个变量。这样做的一个快速方法是使用predictorM<-quickpred(nhanes)

然后,如果它是一个正常变量,则将矩阵中的1更改为2,如果它是不同国家的二级变量,则将其更改为-2,并将其提交给mice命令作为predictorMatrix =predictorM。在method命令中,如果它是一个度量变量,则现在必须将方法设置为2l.norm;如果是二进制变量,则将方法设置为2l.binom。对于后者,你需要Sabine Zinn写的功能(https://www.neps-data.de/Portals/0/Working%20Papers/WP_XXXI.pdf)。不幸的是,我不知道世界上是否有用于计算两级计数数据的方法。

意识到输入多级数据集会使过程变慢。根据我的经验,PMM或狒狒包中的重采样方法在保持数据的层次结构方面效果良好,使用速度更快。

+0

感谢您的回答,我不太了解如何更改为2和-2 - 哪些单元格可以更改(也不能从函数帮助文件中清除)。方法'2l.norm'和'2l.binom' - 是我需要为data.frame中的每个变量设置的东西吗?re:'PMM' - 不是它的一部分'命令? – user2498193

+1

请不要使用'2l.norm'这个函数仍然有问题,目前还没有人修复它。对于聚集数据中的连续变量,'2l.pan'方法应该是使用。 – SimonG

+2

OP提供了一个示例数据集,这个答案会有很大的改进通过提供特定于示例数据的答案的编码表示,而不是仅仅通过“伪代码说话”来遍历解决方案。 –