求助:如何用R判断缺失数据关联性及与患者结局的关联
缺失数据重叠分析与结局关联检验的R实现方案
一、计算缺失数据的重叠比例
1. 成对变量的缺失交叉统计
先为目标变量生成缺失标记(1=缺失,0=非缺失),再通过交叉表直观查看重叠情况:
# 生成缺失标记列 df$HR_miss <- as.integer(is.na(df$HR)) df$SBP_miss <- as.integer(is.na(df$SBP)) # 基础交叉表(查看频数) table(df$HR_miss, df$SBP_miss, dnn = c("HR缺失", "SBP缺失")) # 百分比形式展示(更直观) library(janitor) tabyl(df, HR_miss, SBP_miss) %>% adorn_percentages("row") %>% adorn_pct_formatting(digits = 1) %>% adorn_ns()
通过结果可以直接看到:HR缺失的患者中,同时存在SBP缺失的比例;反之亦然。
2. 全局缺失模式可视化
用mice包的md.pattern函数,一次性展示所有变量的缺失组合及对应样本量:
library(mice) md.pattern(df, rotate.names = TRUE)
输出中,行代表一种缺失模式(1=数据存在,0=数据缺失),最右侧是该模式的样本数,最下方是每个变量的总缺失数。能快速识别哪些变量经常同步缺失。
3. 缺失标记的相关性分析
将所有变量的缺失标记转为矩阵,计算相关系数,相关性越高说明缺失重叠度越高:
# 生成所有变量的缺失标记矩阵 miss_matrix <- sapply(df, function(x) as.integer(is.na(x))) # 计算皮尔逊相关系数 cor_miss <- cor(miss_matrix) print(cor_miss) # 可视化相关矩阵 library(corrplot) corrplot(cor_miss, method = "circle", type = "upper", tl.col = "black")
二、检验特定结局与数据缺失的关联
1. 分类结局:卡方/Fisher精确检验
若结局是二分类或多分类变量,直接比较不同结局组的缺失比例差异:
# 构建结局与缺失标记的列联表 miss_outcome_tab <- table(df$outcome, df$HR_miss, dnn = c("结局", "HR缺失")) # 卡方检验(样本量充足时) chisq.test(miss_outcome_tab) # Fisher精确检验(样本量较小时) fisher.test(miss_outcome_tab)
若检验p值显著,说明不同结局组的缺失比例存在统计学差异。
2. 连续结局:t检验/方差分析
若结局是连续变量,比较缺失组与非缺失组的结局均值差异:
# 两独立样本t检验 t.test(df$outcome ~ df$HR_miss) # 多组缺失情况(如多个变量缺失组合)用方差分析 anova(lm(outcome ~ HR_miss + SBP_miss, data = df))
3. 调整混杂因素:逻辑回归
如果需要控制其他协变量,以缺失标记为因变量、结局及协变量为自变量构建逻辑回归模型:
# 以HR缺失为因变量,纳入结局、年龄、性别作为协变量 miss_model <- glm(HR_miss ~ outcome + age + gender, data = df, family = binomial(link = "logit")) summary(miss_model)
查看结局变量的OR值与p值:若OR>1且p<0.05,说明该结局对应的患者更易出现HR缺失。
补充说明
varclus包的核心功能是基于变量相关性进行聚类,并不针对缺失数据的重叠模式分析,因此不适用你的需求。上述方法均直接围绕你的核心目标设计,可根据数据集规模和变量类型灵活选择。
内容的提问来源于stack exchange,提问作者rchallenged
相关产品推荐
相关产品推荐

