Lazy loaded image单因素逻辑回归

type
Post
status
Published
date
Aug 7, 2025
slug
univariate-logistic-regression
summary
本文系统介绍单因素逻辑回归的原理、R 语言实现、结果解释与常见问题处理,包括非线性关系建模、完美分离及边际效应的计算。
tags
Logistic Regression
R
Statistics
category
📊 Statistics
icon
password
comment
Show

1. 从回归模型出发

目标
通过建立数学模型,刻画自变量 X(解释变量、预测变量、特征)与因变量 Y(响应变量、结果变量)之间的关系,用于描述、解释或预测

1.1 回归模型的核心思想

  • 形式
    • g(⋅) 为连接函数(link function)
    • E[Y∣X] 为条件均值
    • β 系数用于衡量 X 对 Y 的影响方向和大小
  • 任务:找到一组 β 使模型对数据拟合最好,并对参数进行统计推断(置信区间、假设检验)。

1.2 常见类型

模型类型
因变量类型
分布假设(误差项或响应分布)
常用链接函数
典型场景
线性回归(OLS)
连续型
正态分布,方差齐性
恒等(identity)
血压、体重、实验数据
Logistic 回归
二分类
二项分布
logit
疾病有/无,实验成功/失败
Probit 回归
二分类
二项分布
probit
信用违约预测
Poisson 回归
计数
泊松分布
log
事件次数(如住院次数)
负二项回归
计数(过度离散)
负二项分布
log
事故次数(方差>均值)
Gamma 回归
正且偏态
Gamma 分布
log/inverse
花费、反应时间
Cox 回归(比例风险模型)
生存时间
无需指定分布
对数风险
生存分析

1.3 单因素回归(Univariate Regression)

  • 定义:一次只放入一个自变量 X,考察其与 Y 的关系。
  • 优点
    • 简单直观
    • 适合初筛变量
  • 缺点
    • 忽略混杂因素,可能高估或低估效应
    • 不能直接用于因果推断(仅描述关联)
    • 在分类变量水平较多时,可能产生稀疏问题
      • 分类变量的某些水平(类别)在数据中样本量非常少,导致模型在估计该水平的系数时不稳定,标准误很大,导致回归系数估计值极端、置信区间很宽、P 值不可靠;在逻辑回归中还可能导致模型不收敛。常见例子比如我们研究“是否患某疾病(Y)”与“职业类型(X)”的关系,职业变量有 10 个水平,其中“宇航员”这一类只有 2 个样本且都未患病,这会让模型在这一水平上无法估计出稳定的效应值。

1.4 单因素与多因素对比

特点
单因素回归
多因素回归
模型复杂度
混杂控制
可控制已测量的混杂
可解释性
较低(系数受其他变量调整影响)
应用场景
初步探索、描述性分析
确认性分析、预测建模

2. 线性回归:模型、假设与诊断

2.1 模型形式

单因素线性回归的基本形式为:
在单因素回归中,β1 就是我们关心的主要参数。

2.2 关键假设(OLS 经典条件)

  1. 线性可加性(Linearity & Additivity)
      • 含义:在条件均值 E(Y∣X)中,X 与 Y 之间的关系是线性的(可以有截距与斜率),各解释变量效应可加。
      • 检查方法:绘制残差-拟合值图、残差-自变量图,看是否存在系统性模式。
      • 违反时的处理:加入多项式项(X^2, X^3)、样条函数(splines 包)、或对变量进行变换(对数、平方根等)。
  1. 独立性(Independence)
      • 含义:各观测值相互独立,误差项之间不相关。
      • 违反时的典型场景:时间序列数据(自相关)、分组/聚类数据(同组内相关)。
      • 修正:
        • 时间序列 → 加入滞后项、使用自回归模型
        • 聚类数据 → 使用混合效应模型(lme4::lmer())、聚类稳健标准误(cluster-robust SE)
  1. 同方差(Homoscedasticity)
      • 含义:误差项的方差不随 X 的取值而改变
      • 违反时(异方差):会导致系数估计仍然无偏,但标准误估计错误,显著性检验可能失真
      • 检查方法:残差-拟合值图(漏斗状暗示异方差)、Breusch-Pagan 检验(lmtest::bptest
      • 修正:使用稳健标准误(sandwich::vcovHC)、变量变换(如 log Y)
  1. 误差正态性(Normality of Errors)
      • 含义:误差项 ε 服从正态分布
      • 主要作用:保证在小样本下 t 检验、F 检验的有效性;大样本下可依赖中心极限定理(CLT)
      • 检查方法:QQ 图、Shapiro-Wilk 检验
      • 修正:
        • 对 Y 做变换
        • 使用非参数方法(如分位数回归)
        • 依赖大样本近似

💡 注意
  • 单因素回归中不存在多重共线性(因为只有一个自变量),但依然可能受异常点或高杠杆点影响。
  • 高杠杆点(Leverage Points):X 值远离均值的观测,对回归线斜率有较大影响
  • 影响点(Influential Points):既远离均值,又影响回归结果(可通过 Cook’s distance 检查)

2.3 诊断与修正

问题
检查方法
修正建议
非线性关系
残差图、加局部回归曲线
多项式项、样条函数
异方差
残差-拟合值图、BP 检验
稳健 SE、变量变换
异常值
Cook’s distance、杠杆值
敏感性分析(剔除后重跑)
误差非正态
QQ 图、Shapiro 检验
变量变换、非参数方法

3. 广义线性模型(GLM):逻辑回归

在第 2 节我们讨论的普通线性回归(OLS),有几个关键前提:
  1. 因变量 Y 是连续型,且可以取任意实数;
  1. Y 与自变量 X 的关系是线性的(在均值层面);
  1. 误差项服从正态分布,方差恒定。
这些假设在很多情形下是合理的,比如预测血压、体重、收入等连续数值
但是——如果我们的因变量不是连续的,而是离散的、二元的、计数的,线性回归会出现问题

3.1 为什么需要“广义线性模型”?

例子 1:二分类结局
我们想预测患者是否患病(0 = 未患病,1 = 患病)。用线性回归直接拟合会有两个麻烦:
  • 预测值可能 < 0 或 > 1,违背概率含义;
  • 残差的方差不再恒定,显著性检验和区间估计会失真。
例子 2:计数型结局
比如预测一个月的住院次数(只能是 0,1,2,... 的整数),线性回归会给出负数预测,完全不符合常识。
这时候我们需要一种更通用的回归框架,能处理不同类型的因变量,同时保留“线性预测”的思想——这就是广义线性模型(Generalized Linear Model, GLM)

3.2 GLM 的三个核心组成部分

GLM 在普通线性回归的基础上做了两点推广,形成了三要素结构
  1. 随机部分(Random Component)
    1. 系统部分(Systematic Component)
      1. 链接函数(Link Function)

        3.3 从 GLM 到逻辑回归

        如果 Y 是二分类(0/1),我们选:
        • 分布:二项分布(Binomial)
        • 链接函数:logit(对数几率)
        • 结果:GLM 就变成了逻辑回归(Logistic Regression)
        逻辑回归公式:
        优点:
        • 预测值 p 永远在 0–1 范围内;
        • 系数指数化(exp⁡(β1))就是优势比 OR,直观易解释。

        3.4 小结

        • 线性回归 → GLM 的一个特例(正态分布 + 恒等链接)。
        • 逻辑回归 → GLM 的一个特例(二项分布 + logit 链接)。
        • GLM 框架让我们能用统一的思路处理不同类型的结局变量,只要选对分布和链接函数,就能保证预测值合理、推断可靠。

        4. 逻辑回归如何解释?

        逻辑回归的拟合结果往往让初学者一头雾水,因为它的系数不是直接告诉你“概率变化了多少”,而是告诉你**对数几率(log odds)**的变化。我们一步步拆开来看。

        4.1 系数 β₁、对数几率(log odds)和 OR

        1. 对数几率的含义
          1. 逻辑回归系数 β₁ 表示什么
            1. 从 β₁ 到 OR(优势比)
              1. 分类变量的情况

                4.2 从概率角度怎么解释?

                直接用 β₁ 或 OR 来解释概率变化不直观,因为概率变化的大小取决于原本的概率水平。
                两种更直观的做法是:
                1. 边际效应(Marginal Effects)
                  1. 预测概率曲线

                    4.3 置信区间(CI)与 P 值

                    1. 报告方式
                      1. 小样本或稀有事件的注意事项
                        1. 多重比较

                          5. R 实现与模拟数据(覆盖常见场景)

                          在前面几节,我们已经分别讨论了单因素线性回归逻辑回归的原理、假设、诊断与解释。
                          接下来,我们用 R 来动手实现这些分析,并且故意构造一些常见的数据场景,让你在同一个数据框里就能练习处理:
                          • 连续自变量:既有线性关系,也可能有弯曲(非线性)关系。
                          • 类别自变量:包含多个水平,且分布不均衡(模拟现实数据的不平衡情况)。
                          • 缺失值:模拟实际分析中常见的数据缺口。
                          • 连续型因变量(Y_lin):带异方差和几个极端异常值,方便演示线性回归的稳健 SE、异常值诊断。
                          • 二分类因变量(Y_bin):带非线性效应和类不平衡,方便演示逻辑回归的非线性处理与分离问题。

                          5.1 准备与模拟数据

                          在实际研究中,我们经常会遇到这样的数据特点:
                          • 有连续变量(如年龄、体重),也有分类变量(如性别、吸烟状态);
                          • 类别比例不均衡(比如男性样本比女性多);
                          • 有些数据会缺失;
                          • 结局变量可能是连续的(如血压值)或二分类的(如是否患病);
                          • 关系可能不是严格直线,数据中还可能有异方差、异常值等问题。
                          为了演示后续分析方法,我们用 R 构造一个小型模拟数据集 df
                          模拟一个“生活方式与健康状况”研究的场景:
                          设计变量:
                          1. age – 连续自变量,模拟年龄(岁),有少量缺失。
                          1. sex – 分类自变量,模拟性别(Male/Female),比例不均衡。
                          1. bp_sys – 连续因变量,模拟收缩压(mmHg),受年龄、性别影响,并包含异方差和几个极端值。
                          1. hypertension – 二分类因变量,模拟是否高血压(1=是,0=否),与年龄、性别相关,且关系带有非线性。
                          生成步骤:
                          • 年龄服从正态分布,并引入部分缺失;
                          • 性别按设定比例生成;
                          • 收缩压 bp_sys 随年龄和性别变化,方差随年龄增加而增大,并加入极端值;
                          • 高血压 hypertension 根据一个 logit 模型生成,确保概率在 0–1 之间。
                          这样我们就得到了一个贴近临床/流行病学场景的数据集 df

                          5.2 单因素线性回归(含稳健 SE 与诊断)

                          分析目的
                          我们先研究年龄(age)与收缩压(bp_sys)之间的关系
                          • 因变量:收缩压 bp_sys(连续型)
                          • 自变量:年龄 age(连续型)
                          • 这是一个典型的单因素线性回归场景,用来看看血压是否随年龄变化而变化。

                          为什么要做稳健 SE 和诊断?

                          • 稳健 SE(HC3):如果残差存在异方差(方差不恒定),传统的标准误可能会低估或高估,从而影响 p 值判断;稳健 SE 在这种情况下能提供更可靠的显著性检验。
                          • 残差诊断:检查线性假设、同方差性、正态性,以及是否存在异常值/高杠杆点,确保模型结论可靠。

                          代码实现


                          怎么看结果?

                          1. 系数解释
                            1. 稳健 SE 的作用
                              1. 残差诊断图

                                5.3 单因素逻辑回归(含分离与边际效应)

                                分析目的
                                现在我们想研究年龄(age)与高血压(hypertension)之间的关系
                                • 因变量:hypertension(二分类:0 = 无高血压,1 = 有高血压)
                                • 自变量:age(连续型)
                                • 这是单因素逻辑回归的典型场景,用来探讨年龄与患高血压风险之间的关联。

                                为什么用逻辑回归?

                                • 结局变量是二分类,不能直接用线性回归,否则会出现预测概率 <0 或 >1 的问题,还会有异方差。
                                • 逻辑回归通过logit 变换建模:
                                  • 系数指数化,也即优势比 OR,方便解释。

                                  代码实现


                                  怎么看结果?

                                  • 系数(log odds):年龄每增加 1 岁,对数几率增加多少。
                                  • OR:年龄每增加 1 岁,高血压发生的几率相对于无高血压的几率会乘上多少倍。
                                    • 95% CI:如果区间不包含 1,则说明该变量与结局显著相关(在所设显著性水平下)。

                                    连续变量非线性处理

                                    如果 age 与 logit 的关系不是直线,可以用自然样条或多项式让模型更灵活:

                                    完美分离(Perfect Separation)示例

                                    如果某个变量能完全区分有无高血压(比如 sex 恰好只有男性患病),逻辑回归的极大似然估计可能不收敛:
                                    应对方法:使用 Firth 校正(logistf 包)或正则化方法(glmnet 包)。

                                    边际效应(Marginal Effects)

                                    边际效应能把 log odds 的结果转换成更直观的“概率变化”:
                                    解释:AME 表示在其他条件相同的情况下,自变量每变化一个单位,平均概率变化多少个百分点。
                                    • 平均边际效应(AME) = 0.007769
                                    • 解释:在其他变量保持不变的情况下,年龄每增加 1 岁,高血压的预测概率平均增加约 0.78 个百分点(0.0078 ≈ 0.78%)

                                    💡 小结
                                    • 逻辑回归更适合二分类结局,系数解释建议用 OR。
                                    • 检查连续自变量与 logit 的关系,必要时用样条处理。
                                    • 遇到完美分离,用 Firth 校正或正则化方法。
                                    • 边际效应可以让结果更直观,尤其是在向非统计背景的读者解释时。

                                    5.4 单因素逻辑回归:诊断与稳健性(只讨论单因素)

                                    5.4.0 最小检查清单(跑完模型后按这个顺序看)

                                    1. 连续自变量是否与logit近似线性?
                                    1. 有无高影响点/高杠杆
                                    1. 有无**(近乎)完全分离稀疏单元格**?
                                    1. 拟合优度区分度(AUC)校准是否可接受?
                                    1. 缺失机制是否合理、事件数是否够
                                    下面用 m2 <- glm(hypertension ~ age, family=binomial(), data=df) 做示范(与 5.3 同一模型)。

                                    5.4.1 连续自变量与 logit 的线性关系

                                    是什么
                                    逻辑回归假设:连续自变量(如 age)与对数几率 log(p/(1-p)) 的关系是“直”的。
                                    为什么要管
                                    若不线性,β 和 OR 会偏,显著性与效应大小都可能被误读。
                                    怎么“看”(至少任选其一)
                                    • 分箱法(binned):把 age 分成若干箱,算每箱阳性率 p,取 log(p/(1-p)) 对箱均 age 作图,看是否近似直线。
                                    • Box–Tidwell 思路:在模型里加一项 age*log(age)(只要 age>0),检验这项是否显著;显著=非线性。
                                    • 样条对比age 的线性模型 vs ns(age, df=k) 的样条模型,比 AIC/Deviance;样条显著更好=非线性存在。
                                    怎么“修”
                                    • 轻度弯:加多项式项(I(age^2))。
                                    • 形状复杂:用自然样条 splines::ns(age, df=3~4) 或用 GAM(mgcv::s(age))。
                                    • 变量变换(log/√)也可,但优先考虑样条(更灵活、边界更稳)。

                                    5.4.2 影响点、杠杆与离群

                                    是什么
                                    • 标准化残差(Pearson/Deviance):看 Y 方向“离群”。
                                    • 杠杆值(hat):X 很偏的点,天然“有能力”拉动拟合。
                                    • Cook’s 距离 / DFBETA:点对系数的实际影响。
                                    为什么要管
                                    少数点可能把 OR“拽歪”,导致结论不稳。
                                    怎么“看”(经验阈值)
                                    • |标准化残差| > 3 → 可疑离群。
                                    • 杠杆 > 2*(p+1)/n(单因素 p=1)→ 高杠杆。
                                    • Cook’s D > 4/n → 高影响。
                                    • |DFBETA| > 2/√n → 对该系数影响大。
                                    怎么“修”
                                    • 先核对数据真伪(录入/测量)。
                                    • 敏感性分析:剔除可疑点重跑,看 OR/CI 是否稳。
                                    • 必要时考虑稳健方法或把非线性建模(有时“异常”其实是模型错配的信号)。

                                    5.4.3 (近乎)完全分离与稀疏单元格

                                    是什么
                                    某个取值/分组几乎或完全把 0/1 分开(例如 age>70 几乎都是高血压)。MLE 会不稳或不收敛,SE 巨大,甚至报“算法没有聚合”。
                                    为什么要管
                                    系数会向 ±∞ 漂移,普通 OR 和 P 值都不可靠。
                                    怎么“看”
                                    • 拟合时出现“fitted probabilities 0 or 1”“算法没有聚合”等警告;
                                    • 交叉表里某些格子接近 0(稀疏)。
                                    怎么“修”
                                    • Firth 校正logistf::logistf)→ 小样本/分离场景的常用兜底;
                                    • 正则化glmnet,加 L2/L1 惩罚);
                                    • 合并稀疏水平、放宽切点、或收集更多数据。

                                    5.4.4 拟合优度、区分度与校准

                                    拟合优度(overall fit)
                                    • Residual deviance vs Null deviance
                                    • Hosmer–Lemeshow 检验ResourceSelection::hoslem.test(y, p, g=10)):p>0.05 常被解读为拟合尚可(仅参考,不要唯它论)。
                                    区分度(discrimination)
                                    • ROC/AUCpROC::roc(y, p)):越接近 1 越能区分阳性/阴性。
                                    校准(calibration)
                                    • 预测概率与实际发生率一致吗?做分位数校准图(按预测值分 10 组,画“预测均值 vs 实际比例”)。
                                    • 可报告Brier 分数(均方误差,越小越好):mean((p - y)^2)
                                    读法:区分度强但校准差 → 能排序谁风险高,但概率本身偏;

                                    5.4.5 缺失与样本量

                                    • 缺失:单因素默认“只要有 NA 就剔除”。若缺失非随机,会有偏;正式分析建议多重插补(mice),并在文中交代。
                                    • 事件数(EPV):单因素也别过于极端;阳性/阴性至少都要有一定量(经验上≥10 个事件更安心),否则 CI 极宽、检验不稳。

                                    5.4.6 一段模板代码(把诊断一次跑完)

                                    注:沿用 5.3 的 m2 <- glm(hypertension ~ age, family=binomial(), data=df)。如果没建,先建一个。
                                    Prev
                                    多因素逻辑回归
                                    Next
                                    R语言中的常见统计分布及其应用
                                    Loading...
                                    Article List
                                    Evan の Logbook
                                    ✨ Updates
                                    🎨 Style Guide
                                    🧠 Creative Resources
                                    🗒️ Mind Notes
                                    🧭 Knowbase
                                    📘 SOPs
                                    🩺 Medical Research
                                    🛠️ Tech Chronicles
                                    💰 Fortune Blueprint
                                    📈 R Visionary
                                    📊 Statistics
                                    🖼️ BioVis