核心问题:你的因变量(结局变量)是什么类型? 这是选择线性回归还是逻辑回归的唯一判断标准。 本文从实际应用角度,帮你快速掌握两种回归方法的区别和使用场景。
快速决策:用哪个?
📈 线性回归
因变量是连续数值
典型场景:
- • 收缩压变化值
- • BMI 指数
- • 血糖浓度
- • 生存时间
- • 问卷得分
📊 逻辑回归
因变量是二分类
典型场景:
- • 发病/未发病
- • 死亡/存活
- • 有效/无效
- • 复发/未复发
- · 是/否
详细对比表
| 特征 | 线性回归 | 逻辑回归 |
|---|---|---|
| 因变量类型 | 连续数值 | 二分类 (0/1) |
| 输出范围 | (-∞, +∞) | [0, 1] 概率 |
| 模型函数 | Y = β₀ + β₁X | logit(P) = β₀ + β₁X |
| 解释方式 | X每增加1单位,Y增加β单位 | X每增加1单位,几率增加exp(β)倍 |
| R函数 | lm() | glm(..., family="binomial") |
| Python库 | statsmodels.OLS | statsmodels.Logit |
| 常见检验 | t检验, F检验 | Wald检验, 似然比检验 |
R语言代码实现
# ==================== 线性回归 ==================== # 场景:分析年龄对收缩压的影响 # 建立模型 model_linear <- lm(sbp ~ age + bmi + sex, data = mydata) # 查看结果 summary(model_linear) # 关注:Coefficients (回归系数), Pr(>|t|) (P值), Multiple R-squared (R²) # 检查假设 par(mfrow = c(2, 2)) plot(model_linear) # 残差正态性、同方差性、独立性等假设检验 # ==================== 逻辑回归 ==================== # 场景:分析某因素对疾病发生风险的影响 # 建立模型 model_logistic <- glm(disease ~ age + bmi + smoking, data = mydata, family = "binomial") # 查看结果 summary(model_logistic) # 关注:Coefficients (log OR), Pr(>|z|) (P值), AIC # 计算OR值和置信区间 exp(coef(model_logistic)) # OR值 exp(confint(model_logistic)) # 95% CI # 预测概率 predicted_prob <- predict(model_logistic, type = "response")
💡 关键区别: 线性回归的系数可以直接解释为"每增加1单位,Y增加多少"; 逻辑回归的系数是log(OR),需要取指数后才能解释为OR值(几率比)。
结果解读示例
📈 线性回归解读
# 示例结果
age: β = 0.5, p < 0.001
R² = 0.35
解读:
年龄每增加1岁,收缩压平均增加0.5 mmHg。该关系具有统计学显著性(p<0.001)。模型解释了收缩压变异的35%。
📊 逻辑回归解读
# 示例结果
smoking: β = 0.8, p < 0.001
OR = exp(0.8) = 2.23
解读:
吸烟者发生疾病的风险是不吸烟者的2.23倍。该关联具有统计学显著性(p<0.001)。
常见错误
❌ 错误1:二分类结局用线性回归
问题:预测值可能超出[0,1]范围,不符合概率定义
✅ 正确做法:使用逻辑回归
❌ 错误2:忽略模型假设检验
问题:线性回归需要满足正态性、同方差等假设
✅ 正确做法:用plot(model)检查残差图
❌ 错误3:过度解读P值
问题:P<0.05不等于临床意义
✅ 正确做法:结合效应量(OR值/回归系数)和置信区间综合判断
❌ 错误4:样本量不足
问题:每个自变量至少需要10-20个事件
✅ 正确做法:计算样本量:事件数/参数数 ≥ 10
📝 选择流程总结
连续数值 → 线性回归
二分类 → 逻辑回归
线性回归:正态性、同方差
逻辑回归:线性假设、多重共线性
关注:P值 + 效应量 + 置信区间
结合临床意义判断