使用具有聚类数据的小鼠进行插补

时间:2016-06-29 13:22:28

标签: r multi-level r-mice imputation

所以我使用mice包来估算丢失的数据。我是一个新的归责因此我已经达到了一个点,但已经遇到了陡峭的学习曲线。举一个玩具的例子:

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

因此,你可以看到我使用大多数默认设置将df1估算10次 - 我很乐意在回归模型,汇总结果等中使用此结果。但是在我的现实生活数据中,我有来自不同国家的调查数据。因此,各国的失误程度因国家而异,特定变量的价值也是如此 - 即年龄,教育程度等。因此,我想将这些错误归咎于国家的聚集。所以我将创建一个没有缺失的分组变量(当然在这个玩具示例中,缺少与其他变量的相关性,但在我的实际数据中它们存在)

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

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

2 个答案:

答案 0 :(得分:3)

如果您将群集视为&#34;混合效果&#34;那么你应该使用mice提供的用于聚类数据的方法。这些方法可以在manual中找到,并且通常以2l.something为前缀。

群集数据的各种方法在mice中有所限制,但我建议使用2l.pan在较低级别单元中丢失数据,在群集级别使用2l.only.norm。< / p>

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

下面,我展示了两种策略的示例。

<强>制备

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:使用群集的虚拟指标(DI)进行估算

本节使用pmm进行插补,聚类结构用&#34; ad hoc&#34;表示。时尚。也就是说,聚类不是由随机效应表示,而是由固定效应代表。这可能夸大了缺少数据的变量的群集级别的可变性,因此请确保您知道在使用它时所执行的操作。

# 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)

如果您想了解对这些方法的看法,请查看one篇文章的twothese

答案 1 :(得分:1)

你必须设置一个predictorMatrix来告诉老鼠用哪个变量来判断另一个变量。这样做的一种快速方法是使用predictorM<-quickpred(nhanes)

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

请注意,输入多级数据集会大大减慢过程。根据我的经验,重新采样方法(如PMM或Baboon包)可以很好地保持数据的层次结构,并且使用起来更快。