跳到正文
百沐一下百沐一下
本节目录

回归结果怎么读:线性与逻辑回归

跟完这篇,您能看懂 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|))。下面逐块拆。

系数怎么读

系数(Estimate)是回归的主角,它回答「这个自变量对 y 的作用有多大、朝哪个方向」。读法分三种情况:

  • 连续自变量:系数是「该自变量每增加 1 个单位、其他变量保持不变时,y 平均变化多少」。上例 age 的系数 0.031,意思是年龄每大 1 岁、基因表达不变时,y 平均高 0.031。正号表示同向,负号表示反向。
  • 分类自变量:R 会自动把因子设一个参照水平(reference),系数是「相对参照组」的差。比如把 group 设为因子、以 control 为参照,grouptreat 的系数就是「处理组比对照组平均高/低多少」。
  • 截距(Intercept):所有自变量都取 0(分类变量都在参照水平)时 y 的预测值。它常常没有实际意义(谁的年龄会是 0),一般不单独解读。

两个特别容易读错的点,务必记住:

  1. 系数大小受单位影响,不能直接比谁「更重要」。 age 以「岁」为单位、gene 以某个表达量单位,两者系数没有可比性。想比较自变量的相对贡献,得先把变量标准化(scale())再看标准化系数,或看各自的显著性与效应,而不是直接比 Estimate 的绝对值。
  2. 「其他变量保持不变」这句限定词不能省。 多元回归里每个系数都是在控制了模型中其他变量之后的效应。同一个变量单独建模和放进多元模型里,系数可能差很多——这正是回归能校正混杂的价值所在。

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%)

配套三条要点:

  1. 看 OR,先看它的置信区间。 OR 的 95% 置信区间跨过 1,就等于 p≥0.05、关联不显著。只报一个 OR 点估计、不报区间,是常见的漏报。
  2. OR 是「几率比」,不是「概率比」,也不直接等于「风险高几倍」。 结局较罕见时,OR 和相对风险(RR)接近;结局常见时,OR 会把关联放大,不能当成 RR 来口播。
  3. 逻辑回归没有真正的 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

相关