广义线性模型与逻辑回归 - SpiralKernel/bioinfo-wiki-migrated GitHub Wiki

广义线性模型与逻辑回归

更新:2026-10-26;状态:可用;验证范围:2026-10-26核对原始与官方资料;本页Python微型计算已执行;人工数据不代表专业软件或真实研究性能。

广义线性模型(generalized linear model,GLM)把响应分布、线性预测子和链接函数组合起来,处理二分类、计数等不同结果。它不能只理解成“回归时换一个函数”。读完应能把逻辑系数换成概率与OR,并解释计数模型的offset在调整什么。

前置为似然最大似然与MAP估计、相关回归与混杂与常见概率分布与生信场景。GAPIT等语境中的GLM也可能指general linear model,需先确认全称。

三个组成部分决定了模型

设$\eta_i=x_i^T\beta$,条件均值μi=E(Yi|xi),链接函数$g(\mu_i)=\eta_i$。响应条件分布、线性预测子和链接都必须指定。线性指参数组合,不要求响应本身与x直线变化。

响应 常见分布/链接 均值解释
连续近似高斯 Gaussian/identity μ=Xβ
二元0/1 Bernoulli/logit log[p/(1−p)]=Xβ
非负整数计数 Poisson/log log μ=Xβ+offset
过度离散计数 负二项/log 方差可超过均值,需离散参数

statsmodels GLM官方说明列出family、link与offset接口;本页不实际运行该专业拟合器,只核对预测算术。

逻辑系数怎样变成概率

$p=1/(1+e^{-\eta})$,logit将(0,1)概率映到实数。若β0=−2、β1=ln(2)≈0.6931(自然对数),二元暴露x从0变1时,优势乘2,但概率从约0.1192增至0.2130,风险比约1.787,而不是2。OR、风险比和风险差不能混用;有协变量时OR是在指定条件模型内的比较。

本页例子在项目根目录的Python中运行;标准库例子无需安装包,含NumPy/SciPy的例子先按R包Python包与可复现环境建立项目环境。Windows命令使用python,macOS/Linux可使用python3;代码块可复制进该环境的Python交互会话,或保存为项目根目录下的临时脚本再用该环境解释器运行;不要保存到examples目录或任意外部目录后假定项目导入路径仍相同。除特别说明外,只向屏幕输出,不写文件。

from math import exp, log
beta0, beta1 = -2., log(2)
def probability(x):
    return 1/(1+exp(-(beta0+beta1*x)))
p0, p1 = probability(0), probability(1)
OR = (p1/(1-p1))/(p0/(1-p0))
print('probabilities',round(p0,6),round(p1,6))
print('OR_RR_RD',round(OR,6),round(p1/p0,6),round(p1-p0,6))
rate = .1
print('Poisson_means_at_exposure_10_20', [round(exp(log(e)+log(rate)),6) for e in (10,20)])
assert abs(OR-2)<1e-12 and p1/p0 < 2

检查点OR=2但RR<2;计数后半例暴露10与20、相同率0.1,预期计数1与2。参数为人为给定,没有从数据估计SE/P,也没有检验模型拟合好坏。

offset为什么系数固定为1

若预期事件数=暴露量×单位暴露事件率,取log得$\log\mu_i=\log e_i+x_i^T\beta$。log ei是offset,其系数固定1;把它作为普通协变量则是在估计暴露效应,目标不同。e必须为正,单位应一致。RNA的文库归一化涉及组成与size factor估计,不能把任何总量都机械作为正确offset,见RNA计数模型差异表达与效应收缩。

Poisson基本模型Var(Y|x)=μ;负二项常用μ+αμ²表示额外变异,α定义依软件参数化而异。过度离散若忽略会使标准误失真;零值很多也不自动证明零膨胀模型必要,可能来自低均值、异质性或错误设计。

从拟合到解释的步骤

明确响应编码、参考组和对比;构建设计矩阵并查秩与共线;以合适似然拟合,记录优化/收敛;检查离散、残差、影响点与相关层级;报告β或expβ的尺度、CI和校正P。预测任务还需独立验证与校准,见分类指标ROC与PR曲线。

完全分离时某特征可完美区分0/1,普通逻辑MLE系数可能趋于无穷;增大迭代数不一定解决。可考虑适当偏倚校正/惩罚或专门方法,但需说明所用估计目标。罕见病例、亲缘和不平衡GWAS也需要专业校准,不能只换个link就完成。

排错与自测

症状 检查与处理
响应出现负计数或TPM小数 是否用错输入类型,回到原始计数来源
β很大、SE很大、不收敛 分离、共线、事件太少;查交叉表与设计秩
offset产生无穷 e为0、单位或对数错误
OR方向与图相反 响应阳性、参考组、contrast顺序
样本重复仍用普通GLM 独立性不成立,需相关结构/混合模型

问:log链接意味着先把所有计数取log后用普通线性回归吗? 答:不是,GLM是对条件均值取链接并保留响应分布。问:OR=2意味着概率增加100个百分点吗? 答:不意味着,概率变化依基线与协变量而定。问:GLM能自动控制所有混杂吗? 答:只能在已指定、可识别的模型与设计条件下调整给定变量。

接着读什么

二分类性状OR与病例对照不平衡 → RNA-seq从计数矩阵到差异表达 → 分类指标ROC与PR曲线。学习顺序与练习入口见方法与算法系统学习指南。

运行本页的完整小例

先下载项目并进入含README与examples的根目录,环境准备见方法与算法系统学习指南。用项目环境的Python运行以下命令(macOS/Linux路径示例;Windows用.venv\Scripts\python.exe):

.venv/bin/python examples/methods_foundations_demo.py --case glm --output examples/output/methods-glm

输出summary.json保存本页计算与检查结果。目录非空时拒绝覆盖,再练习请更换--output目录;页面内短代码只打印结果。标准库case也可用系统Python直接运行。

公式里的矩阵、下标或对数不熟时,可回查读懂方法公式的最小数学基础。