多变量逻辑回归同时纳入多个预测变量,估计每个变量在其他模型变量保持不变时与二分类结局的关联。它可以调整已测量的混杂,但不会自动消除偏倚或建立因果关系。
模型
每个 是条件优势比:其他模型变量保持不变时, 每变化一个单位对应的 odds 倍数。
模拟数据
set.seed(123)
n <- 500
df <- data.frame(
age = rnorm(n, 50, 10),
sex = factor(sample(c("Female", "Male"), n, replace = TRUE)),
smoking = factor(
sample(c("No", "Yes"), n, replace = TRUE, prob = c(0.7, 0.3))
),
bmi = rnorm(n, 25, 4)
)
eta <- -6 +
0.05 * df$age +
0.8 * (df$sex == "Male") +
1.2 * (df$smoking == "Yes") +
0.1 * df$bmi
df$hypertension <- rbinom(n, 1, plogis(eta))
拟合与 OR
fit <- glm(
hypertension ~ age + sex + smoking + bmi,
data = df,
family = binomial(link = "logit")
)
summary(fit)
exp(cbind(
OR = coef(fit),
confint(fit)
))
连续变量 OR 对应一个单位变化。若一岁或 1 kg/m² 不是最有意义的尺度,可以在建模前按 5 岁或其他临床单位缩放,并在报告中写清楚。
分类变量 OR 相对于参照水平解释:
levels(df$smoking)
contrasts(df$smoking)
变量选择与混杂
协变量应根据研究问题、因果结构和预先计划选择。只把单变量 p 值小于某阈值的变量纳入模型,可能遗漏重要混杂因素并产生不稳定选择。
还需考虑:
- 每个参数对应的事件数量是否足够;
- 分类变量是否有稀疏水平;
- 连续变量是否需要非线性项;
- 是否存在科学上合理的交互作用;
- 缺失数据处理是否改变分析总体;
- 高相关预测变量是否让估计不稳定。
比较模型偏差
null_fit <- glm(
hypertension ~ 1,
data = df,
family = binomial()
)
anova(null_fit, fit, test = "Chisq")
似然比检验比较嵌套模型的整体拟合。AIC 可辅助相对比较,但不能代替校准、外部验证或科学解释。
区分度
ROC 与 AUC 衡量模型区分事件和非事件的能力:
library(pROC)
roc_object <- roc(df$hypertension, fitted(fit))
auc(roc_object)
plot(roc_object)
AUC 高不表示预测概率准确,也不证明变量具有因果效应。
校准
校准比较预测概率与实际事件比例。一个简单检查是按预测值分组:
library(dplyr)
calibration <- df |>
mutate(predicted = fitted(fit)) |>
mutate(bin = ntile(predicted, 10)) |>
group_by(bin) |>
summarise(
predicted = mean(predicted),
observed = mean(hypertension),
.groups = "drop"
)
plot(calibration$predicted, calibration$observed)
abline(0, 1, lty = 2)
Hosmer–Lemeshow 检验也常见,但结果受样本量和分组方式影响,不应作为唯一拟合标准。
内部验证
在建模数据上计算的 AUC 和校准通常过于乐观。预测目的下,应使用 bootstrap 或交叉验证估计乐观程度,并尽可能进行外部验证。
推断目的与预测目的也不同:前者强调预先定义的效应、混杂控制与区间;后者强调泛化、校准、区分和临床效用。模型建立与报告应明确主要目标。
报告
报告内容至少包括:
- 结局、主要暴露、协变量及选择依据;
- 样本量、事件数和缺失处理;
- 连续变量单位、函数形式和参照水平;
- 调整后 OR、95% CI 和 p 值;
- 交互作用或非线性项;
- 拟合、区分、校准与验证结果;
- 敏感性分析和模型局限。
多变量模型的“调整后”只针对进入模型且被正确表达的变量,不能理解为已经控制所有混杂。