You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:50:26