首页 文章

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

提问于
浏览
2

所以我使用 mice 包来估算丢失的数据 . 我已经达到了一定程度,但已经遇到了陡峭的学习曲线 . 举一个玩具的例子:

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

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

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

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

2 回答

  • 3

    如果您在"mixed-effects"模型中考虑群集,那么您应该使用 mice 提供的用于群集数据的方法 . 这些方法可以在manual中找到,并且通常像 2l.something 一样加前缀 .

    集群数据的各种方法在 mice 中有所限制,但我建议使用 2l.pan 表示较低级别单元中的缺失数据,而使用集群级别的 2l.only.norm .

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

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

    Preparation:

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

    Case 1: Imputation using mixed-effects models

    本节使用 2l.pan 来计算缺少数据的三个变量 . 请注意,我通过在预测变量矩阵中指定 -2 来使用 clusterID 作为集群变量 . 对于所有其他变量,我仅指定固定效果( 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)
    

    Case 2: Imputation using dummy indicators (DIs) for clusters

    本节使用 pmm 进行插补,聚类结构以"ad hoc"方式表示 . 也就是说,聚类不是由随机效应表示,而是由固定效果表示 . 这可能会夸大具有缺失数据的变量的集群级可变性,因此请确保您知道在使用它时所执行的操作 .

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

    如果您想了解对这些方法的看法,请查看onetwothese论文 .

  • 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包中的重采样方法在保持数据的层次结构方面效果很好,使用起来要快得多 .

相关问题