回归结果怎么读:线性与逻辑回归
跟完这篇,您能看懂 lm() 和 glm() 打印出来的那一屏结果——知道系数、R²、p 值各说明什么,会把逻辑回归的 OR 值翻译成一句人话,并在建模前先检查该检查的前提假设。
回归是科研里最常用的一类分析:想用一个或多个自变量去解释、预测一个结果,或者在控制其他因素之后,单看某个因素的独立作用,用的都是它。难的往往不是把模型跑出来(就一两行代码),而是读懂那一屏输出、并且没读错。这篇就带您把结果逐块拆开。
两种回归,先分清用哪个
选哪种回归,只看一件事:您的因变量(想解释、想预测的那个结果 y)是什么类型。
因变量 y 的类型 | 用哪种回归 | R 写法 |
|---|---|---|
| 连续(表达量、浓度、评分等) | 线性回归 | lm(y ~ x1 + x2, data = df) |
| 二分类(有效/无效、复发/未复发) | 逻辑回归 | glm(y ~ x1 + x2, family = binomial, data = df) |
| 计数(次数、reads 数等) | 泊松/负二项回归 | glm(y ~ x, family = poisson, data = df) |
本篇聚焦最常用的前两种:线性回归和逻辑回归。选不准因变量类型、或不确定该不该用回归,可先看 选对统计方法。
跑一个线性回归,读它的 summary
先看线性回归。假设您想用年龄 age 和某基因表达量 gene 去解释一个连续指标 y:
fit <- lm(y ~ age + gene, data = df)
summary(fit)
summary() 打印的结果大致长这样(数字为示例,只用来认版面):
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 2.140 0.512 4.18 4e-05 ***
#> age 0.031 0.009 3.44 0.0007 ***
#> gene 0.480 0.210 2.29 0.0231 *
#>
#> Residual standard error: 1.12 on 197 degrees of freedom
#> Multiple R-squared: 0.284, Adjusted R-squared: 0.277
#> F-statistic: 39.1 on 2 and 197 DF, p-value: < 2e-16
这一屏里,真正要读懂的是三块:系数(Estimate)、显著性(Pr(>|t|)) 和 R²。下面逐块拆。
系数怎么读
系数(Estimate)是回归的主角,它回答「这个自变量对 y 的作用有多大、朝哪个方向」。读法分三种情况:
- 连续自变量:系数是「该自变量每增加 1 个单位、其他变量保持不变时,
y平均变化多少」。上例age的系数0.031,意思是年龄每大 1 岁、基因表达不变时,y平均高 0.031。正号表示同向,负号表示反向。 - 分类自变量:R 会自动把因子设一个参照水平(reference),系数是「相对参照组」的差。比如把
group设为因子、以control为参照,grouptreat的系数就是「处理组比对照组平均高/低多少」。 - 截距(Intercept):所有自变量都取 0(分类变量都在参照水平)时
y的预测值。它常常没有实际意义(谁的年龄会是 0),一般不单独解读。
两个特别容易读错的点,务必记住:
- 系数大小受单位影响,不能直接比谁「更重要」。
age以「岁」为单位、gene以某个表达量单位,两者系数没有可比性。想比较自变量的相对贡献,得先把变量标准化(scale())再看标准化系数,或看各自的显著性与效应,而不是直接比Estimate的绝对值。 - 「其他变量保持不变」这句限定词不能省。 多元回归里每个系数都是在控制了模型中其他变量之后的效应。同一个变量单独建模和放进多元模型里,系数可能差很多——这正是回归能校正混杂的价值所在。
R² 与显著性各说明什么
R²(Multiple R-squared) 衡量「模型解释了 y 多大比例的变异」,取值 0 到 1。上例 0.284 表示模型解释了约 28% 的变异,其余 72% 由未纳入的因素和随机波动贡献。关于它有几点必须心里有数:
- 加变量,R² 只会升不会降,哪怕加进去的是无关变量。所以多元模型别看 R²,看 Adjusted R²(调整 R²)——它对变量个数做了惩罚,加了没用的变量反而会下降,更适合比较模型。
- R² 高不等于模型「对」或「有因果」。 它只说拟合得贴不贴,不保证假设成立、不代表因果、也不代表在新数据上还准。
- R² 多高算「好」没有统一标准,因领域和问题而异。生物、社会数据里 0.2~0.3 常见且未必差;别拿工程数据的高 R² 当标尺。
显著性 有两个层次,别混:
- 每个系数的 p 值(
Pr(>|t|)):检验「这个系数是不是 0」,即该自变量在控制其他变量后是否还有作用。p<0.05是常用的显著性惯例、不是铁律,且一次模型里检验了多个系数,严格时应考虑多重比较,见 多重检验校正。 - 整个模型的 F 检验(末行
F-statistic的 p-value):检验「所有自变量合起来是不是全都没用」。它显著,只说明模型整体比空模型强,不代表每个变量都显著。
一个反复被踩的坑:p 值小 ≠ 效应大。 样本量一大,很小的系数也能显著。判断「有没有用」看 p 值,判断「有多大用」要看系数本身和它的置信区间:
confint(fit) # 各系数的 95% 置信区间;区间不跨 0,对应 p<0.05
报告结果时,系数、置信区间、p 值一起给,比只甩一个 p 值站得住得多。
逻辑回归与 OR 值怎么解读
当因变量是二分类(如「复发=1/未复发=0」),改用逻辑回归。写法只差一个 family:
fit <- glm(recur ~ age + gene, family = binomial, data = df)
summary(fit)
关键区别:逻辑回归的系数不在原始尺度上,而在「对数几率(log-odds)」尺度上。 直接读 Estimate 很不直观,所以几乎所有人都把它取指数,换成 OR(Odds Ratio,比值比) 来读:
exp(cbind(OR = coef(fit), confint(fit))) # OR 及其 95% 置信区间
OR 的读法是这套分析里最容易讲错、也最该讲清的地方:
| OR 取值 | 含义 |
|---|---|
OR > 1 | 该因素每增加 1 个单位,结局发生的几率上升 |
OR < 1 | 该因素每增加 1 个单位,结局发生的几率下降(保护性) |
OR = 1 | 与结局无关联 |
具体到变量:连续变量的 OR 是「每增加 1 个单位」的几率倍数;分类变量的 OR 是「相对参照组」的几率倍数。比如 age 的 OR=1.05,读作年龄每大 1 岁、其他不变时,复发的几率约为原来的 1.05 倍(高约 5%)。
配套三条要点:
- 看 OR,先看它的置信区间。 OR 的 95% 置信区间跨过 1,就等于 p≥0.05、关联不显著。只报一个 OR 点估计、不报区间,是常见的漏报。
- OR 是「几率比」,不是「概率比」,也不直接等于「风险高几倍」。 结局较罕见时,OR 和相对风险(RR)接近;结局常见时,OR 会把关联放大,不能当成 RR 来口播。
- 逻辑回归没有真正的 R²。
summary()里也不会给。想要类似指标,可看伪 R²(如 McFadden)或模型的区分度 AUC,但它们和线性回归的 R² 含义不同,别混着解读。
建模前该检查哪些前提假设
回归能不能信,一半取决于前提假设成不成立。先检查、再解读,顺序别反。
线性回归要看这几条,最省事的办法是 plot(fit),它一次给出四张诊断图:
par(mfrow = c(2, 2))
plot(fit) # 残差-拟合、Q-Q、尺度-位置、残差-杠杆 四图
| 假设 | 怎么查 | 看什么 |
|---|---|---|
| 线性关系 | Residuals vs Fitted | 残差应随机散布在 0 附近,无明显曲线趋势 |
| 残差正态 | Normal Q-Q | 点大致落在对角线上(查的是残差,不是 y 本身) |
| 方差齐性 | Scale-Location | 散点带宽度大致均匀,不呈喇叭形 |
| 强影响点 | Residuals vs Leverage | 关注 Cook 距离大的点,个别点别主导整个拟合 |
再加一条多元回归特有的:多重共线性——自变量之间高度相关,会让系数和 p 值都不稳。用方差膨胀因子 VIF 查:
library(car)
vif(fit) # 经验上 VIF > 5(或 >10)提示共线性偏强,是常用参考、非硬阈值
逻辑回归的假设略有不同,重点看:
- 连续自变量与「对数几率」近似线性(不是与
y线性)。 - 观测相互独立、无多重共线性(同样可看 VIF)。
- 样本量/事件数要够:常用经验法则是每个自变量至少约 10 个事件(events per variable,EPV≈10)——这是广为引用的经验参考、非铁律,事件太少时系数很不稳。
- 没有完全分离(perfect separation):某个变量能把结局完全分开时,模型不收敛、系数会飞到很大,需要留意。
假设不满足不代表分析就废了,但要如实交代,并考虑对应对策(变量变换、稳健方法、去除或合并强影响点等)。把「哪些假设查过、结果如何」写进方法,比一个漂亮的 R² 更能让人信。
在平台上跑一遍
以上每一步在百沐一下都不用写代码:上传数据表,用一句话说清目的——「用年龄和这个基因的表达量做线性回归解释 y」或「以复发为结局做逻辑回归,给出各因素的 OR 和置信区间」——平台会替您选对模型、跑出系数表、R²/OR、显著性和诊断图,并给出可复现的 R 代码;参照组怎么设、要不要标准化,直接在对话里说明即可。上手见 智能统计使用指南,或直接开始:https://app.baimuyixia.com 。