1.8.1 线性回归
连续结局常受不止一个因素影响。研究者可能会问:
- 考虑基线收缩压后,两种治疗的随访收缩压平均相差多少?
- 考虑年龄后,体重指数每升高一个单位,空腹血糖平均相差多少?
- 同时考虑年龄和身高时,吸烟史与肺功能的平均差有多大?
- 考虑基线疼痛后,不同康复方案的随访疼痛评分平均相差多少?
线性回归用几个变量同时描述连续结局的平均水平。本节重点是读懂一个回归系数:其他入模变量相同,当前变量改变时,平均结局差多少? 学完后,你应能明确系数的单位、参考组与区间,并区分调整后关联和因果效应。
1.8.1.1 从一个均值差走到调整后均值差
1.5.1 t检验展示了两个独立组的均值比较。加入另一个需要考虑的变量后,问题变为:在该变量相同时,两组的平均结局相差多少?在线性回归中,可以同时纳入分组和连续变量。
设 是连续结局, 是连续解释变量, 取 0 或 1,其中 0 是参考组。一个不含交互项的模型是:
是给定 和 时的平均结局。固定组别, 每增加 1 个单位,平均 相差 ;固定 ,比较组相对参考组的平均差为 。这里假设两组随 变化的斜率相同。如果研究问题关注两组的斜率是否不同,需要另行指定交互项。
模型用最小二乘法估计这些系数:让观测值与拟合值之差的平方和尽量小。这个差叫残差。解读常规标准误与区间时,还应检查观测是否独立、平均关系是否合理、残差散布是否大致稳定。小样本下,误差明显偏离正态也会影响常规 t 推断。若有重复测量、明显的异方差或极端影响点,应根据研究设计和诊断调整方法。
1.8.1.2 先固定比较方向,再拟合
用 MASS::birthwt 的 189 条母婴记录。结局为出生体重 bwt(克),解释变量为末次月经时母亲体重 lwt(磅)及孕期吸烟 smoke(0=否、1=是),所用三列均完整。
在 bwt ~ lwt + smoke 中,左边是要解释的结局,右边是同时纳入的变量。将不吸烟设为参考水平,使 smokeyes 对应“吸烟减不吸烟”。
if (!requireNamespace("MASS", quietly = TRUE)) {
utils::install.packages("MASS", repos = "https://cloud.r-project.org")
}
utils::data("birthwt", package = "MASS")
# 只按当前模型所用列保留完整记录;no 是分类对比的参考水平。
analysis_data <- birthwt[c("bwt", "lwt", "smoke")]
analysis_data <- analysis_data[stats::complete.cases(analysis_data), , drop = FALSE]
analysis_data$smoke <- factor(
analysis_data$smoke, levels = c(0, 1), labels = c("no", "yes")
)
smoke_contrasts <- stats::contr.treatment(levels(analysis_data$smoke), base = 1L)
conf_level <- 0.95 # 系数的 t 区间;改为 0.99 一般会变宽,估计值不变。
# + 表示同时纳入两个变量、不加交互;对比矩阵固定使用第一个水平。
model_fit <- stats::lm(
bwt ~ lwt + smoke, data = analysis_data,
contrasts = list(smoke = smoke_contrasts),
na.action = stats::na.fail, singular.ok = FALSE
)
coefficient_summary <- summary(model_fit)$coefficients
coefficient_ci <- stats::confint(model_fit, level = conf_level)
print(stats::nobs(model_fit))
print(coefficient_summary)
print(coefficient_ci)1.8.1.3 看清系数的单位和区间
[1] 189
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2501.125357 230.835889 10.835080 1.609094e-21
lwt 4.236736 1.689876 2.507128 1.302827e-02
smokeyes -272.081152 105.591403 -2.576736 1.074901e-02
2.5 % 97.5 %
(Intercept) 2045.7322894 2956.518425
lwt 0.9029483 7.570523
smokeyes -480.3918837 -63.770420| R 输出 | 统计含义 | 本例怎样读 |
|---|---|---|
[1] 189 |
模型实际使用的观测数 | 189 条记录均纳入 |
Estimate:lwt |
连续变量每增加 1 个原单位的平均差 | 固定吸烟状态,母亲体重每高 1 磅,平均出生体重约高 4.24 克 |
Estimate:smokeyes |
比较水平相对于参考水平的调整后平均差 | 固定母亲体重,吸烟组平均出生体重约低 272 克 |
Std. Error、t value 和末列 P 值 |
系数估计的不确定性,以及系数为 0 的检验 | 吸烟系数的标准误约 105.59 克,,双侧 P 约 0.0107 |
2.5 %、97.5 % |
系数的 95% 置信区间两端 | 吸烟减不吸烟约为 −480.39~−63.77 克;区间对应平均差,不是个体的预测范围 |
截距对应母亲体重为 0 磅且不吸烟时的拟合均值,超出本例有意义的解释范围。报告可写为:“在模型中调整母亲体重后,吸烟组新生儿的平均出生体重比不吸烟组低约 272 克(吸烟减不吸烟:95% CI −480~−64 克)。”这里只调整了一个测量变量,观察性关联不能直接解释为吸烟导致的差值。
同编号代码碎片可复用到其他连续结局,并可指定多个分类变量的参考水平。若结局换成“是否低出生体重”,效应尺度也会改变,见2.3.1 Logistic回归。