如何在R语言中检验随机缺失(MAR)假设?
如何在R语言中检验随机缺失(Missing At Random,MAR)假设?
以下是用于检验完全随机缺失(Completely Missing At Random,MCAR)的示例数据与代码,以及基于MAR假设的缺失值插补代码。
# 示例问卷数据 set.seed(1) Q1 <- sample(c(1:10, NA), 100, replace = TRUE) Q2 <- sample(c(1:10, NA), 100, replace = TRUE) Q3 <- sample(c(1:10, NA), 100, replace = TRUE) Q4 <- sample(c(1:10, NA), 100, replace = TRUE) questionnaire <- tibble::tibble(Q1, Q2, Q3, Q4) # 检验完全随机缺失(MCAR) naniar::mcar_test(questionnaire) # 可视化各变量的缺失值数量 naniar::gg_miss_var(questionnaire)
如何检验随机缺失(MAR)?
与MCAR不同,MAR没有直接的统计检验方法——因为MAR假设缺失仅依赖于观测到的变量,无法直接验证未观测变量的影响。但可以通过以下间接方法推断:
1. 对比缺失组与非缺失组的变量分布
对每个存在缺失的变量,将数据分为「该变量缺失」和「该变量非缺失」两组,检验其他观测变量在两组间是否存在显著差异。如果差异显著,说明缺失可能与观测变量相关,支持MAR假设。
示例代码:
# 以Q1为例,检验Q2/Q3/Q4在Q1缺失组和非缺失组的差异 q1_missing <- is.na(questionnaire$Q1) # 连续变量用t检验 t.test(questionnaire$Q2 ~ q1_missing) t.test(questionnaire$Q3 ~ q1_missing) t.test(questionnaire$Q4 ~ q1_missing)
2. 用逻辑回归建模缺失指示变量
为每个有缺失的变量创建一个0-1型缺失指示变量(1=缺失,0=非缺失),用其他观测变量作为预测因子拟合逻辑回归模型。如果模型整体显著,说明缺失依赖于观测到的变量,符合MAR特征。
示例代码:
# 创建Q1的缺失指示变量 questionnaire$Q1_miss <- as.integer(is.na(questionnaire$Q1)) # 拟合逻辑回归模型 model <- glm(Q1_miss ~ Q2 + Q3 + Q4, data = questionnaire, family = binomial) summary(model) # 模型整体显著性检验(似然比检验) anova(model, test = "LRT")
3. 缺失模式可视化分析
通过可视化变量间的缺失组合模式,观察缺失是否集中在特定变量组合中,结合变量关联判断是否符合MAR。
示例代码:
# 可视化缺失模式的交集 naniar::gg_miss_upset(questionnaire)
基于MAR假设的缺失值插补
mice包是R中常用的基于MAR假设的多重插补工具,示例代码如下:
# 多重插补并提取插补后的数据(长格式) questionnaire_imp <- mice::complete(mice::mice(questionnaire), action = "long")
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

