Skip to content

第七章 回归分析 ​

回到第六章末尾那句判断:单因素方差分析把分类因素编码为虚拟变量之后,与线性回归在数学上并无二致。那一章处理的是"不同组的均值是否相等",本章则把问题往前推一步——不再满足于比较是否不同,而是试着用一个或几个变量去预测另一个变量,并量化预测能有多准。这一族方法(相关与回归)和方差分析共享同一个理论底座,即一般线性模型(general linear model);差别只在自变量是连续还是分类、目标是有方向地预测还是对称地度量关联。

本章先以 CORRELATIONS 探查变量间的线性联动,再用 REGRESSION 建立可预测的线性模型,最后直面 PSPP 在回归诊断上的能力边界。所用示例数据均为虚构,思路参考 PSPP 随附的 physiology.sav,仅用于教学,不可用作研究结论。

7.1 相关分析与回归分析的关系定位 ​

相关分析与回归分析常被放在同一章讲述,却承担不同的分工。相关分析回答"两个变量是否同步变动、联动有多紧密",它本身不区分谁预测谁;回归分析回答"已知若干变量,能否预测另一个变量、预测误差有多大",它明确区分因变量与自变量。一句话,相关描述关系,回归把关系变成可操作的预测方程。

两者之所以能同框,根子在于它们都是一般线性模型的特例。第六章已提到,把分类因素编码为虚拟变量后,方差分析的 F 检验与回归的 F 检验在数学上完全等价;事实上,相关、回归、方差分析都建立在同一条线性代数主线上:用一组自变量的线性组合去逼近因变量,再把总变异拆成"被模型解释"和"未被解释(残差)"两部分。第六章借 GLM 统一承载多因素设计,正是因为一般线性模型把这些都收编进了同一框架。

具体而言,Pearson 相关与简单回归之间的纽带非常直接。当只有一个自变量时,回归得到的标准化系数 Beta 的绝对值恰好等于相关系数 r;非标准化系数 B 与 r、各自的标准差之间也存在确定换算。不过两者的取向并不相同:相关是对称的,r(height, weight) 与 r(weight, height) 完全相同,没有方向;回归是不对称的,必须事先指定哪个是自变量、哪个是因变量,得到的是"由 X 预测 Y"的一条方程。相关只告诉你"有没有关系、有多强",回归进一步告诉你"若 X 变动一单位,Y 平均变动多少"。

回归把"预测一个连续变量"这件事形式化,靠的是一条直线方程与一种估计准则。模型写作:

y = β₀ + β₁x₁ + … + βₖxₖ + ε

其中 β₀ 是截距,β₁…βₖ 是各自变量的系数,ε 是残差。估计系数的准则通常是普通最小二乘法(ordinary least squares,OLS),即让所有个案残差的平方和达到最小。这样一来,"预测"就从直觉变成了可估计、可检验、可横向比较的对象——这正是回归相对于单纯相关多出的一块能力。

实践里到底该先跑相关还是直接上回归,取决于研究问题有没有预设方向。若只想确认两个变量是否联动、并不打算由一方去预测另一方,相关足以胜任;若研究本就带着"用 X 估计 Y"的目的,应当直接建立回归,相关至多作为前置的直观体检。二者并不互斥:先以相关窥探变量间的线性强度,再以回归给出可操作的预测方程,是常见且稳妥的工作流。

阅读本章时,有两条跨章线索值得记住。其一,相关分析呼应第四章描述统计:在盯着相关系数之前,应当先看各变量的均值与标准差(第四章的 DESCRIPTIVES),确认变量的尺度与分布是否支撑后续的线性度量。其二,回归与第六章方差分析血脉相连:两者都用 F 检验判断"模型是否显著优于仅凭均值预测",都倚赖残差概念衡量未能解释的变异;回归里的 R² 与 ANOVA 里的"组间变异占总变异之比"在精神上一脉相承。

7.2 相关分析 CORRELATIONS ​

CORRELATIONS 计算变量两两之间的 Pearson 积矩相关系数。图形界面下它位于菜单 Analyze → Correlate → Bivariate(界面推断,手册未逐项文档化)。最常用、也最清晰的做法仍是直接书写语法:

text
CORRELATIONS /VARIABLES=height weight
            /PRINT=TWOTAIL SIG
            /STATISTICS=DESCRIPTIVES.

/VARIABLES 之后罗列参与分析的变量,命令会输出它们之间的对称相关矩阵。若改用 /VARIABLES=v1 WITH v2 v3 的形式,则只计算 v1 与后两者之间的相关,得到的是非方阵而非完整交叉表。这一写法在只想看某个核心变量与其余变量关联时尤其省心。

/PRINT 控制检验方向与显著性呈现:可取的选项是 {TWOTAIL, ONETAIL} 与 {SIG, NOSIG}。TWOTAIL 表示双尾检验,SIG 会在 p 值低于 0.05 时把该相关高亮提示;命令默认即为 TWOTAIL 与 NOSIG(即不显示显著性,只给系数)。/STATISTICS=DESCRIPTIVES 会在相关矩阵之前附上各变量的均值、标准差与有效个案数,便于读者先确认样本规模与量纲。/MISSING 默认为 PAIRWISE(成对删除,即每一对相关只用同时有效的个案计算),也可改为 LISTWISE(整例删除,凡含任意缺失值的个案一律剔除)。成对删除能尽量保住样本,但不同相关所用的有效个案数可能不同,比较矩阵时须留意样本量一行;整例删除则保证所有系数基于同一批个案,代价是可能浪费数据。两者取舍没有绝对优劣,关键是报告时如实说明采用了哪一种。

CORRELATIONS 计算的始终是 Pearson 相关,它衡量的是两个变量的线性关系强度。系数 r 落在 -1 到 1 之间:符号指示方向,正值为同向变动、负值为反向变动;绝对值指示强度,越接近 1 线性关联越紧,接近 0 则几乎呈水平散乱。与 r 一并给出的 p 值回答"样本中观测到的关联是否可能纯粹出于偶然"——当 p 小于所选 α(通常 0.05),才可认为该相关在统计上区别于 0。

解读相关时有两个易踩的坑。第一,r 的平方(决定系数)才刻画两个变量共享的方差比例,是一个可用的效应量:r 仅为 0.5 时共享方差约 25%,中等强度的相关远非"解释了一半"。第二,也是最根本的一条——相关不等于因果。r 显著只说明两变量同步变化,它既不区分方向,也不能断言"是 X 导致 Y"。若要论证因果,还需实验设计或理论支撑,这已超出 CORRELATIONS 的本领。

在敲下相关命令之前,先用散点图直观确认关系形态是稳妥的习惯。GRAPH 一次只绘制一种图形,散点图这样写(菜单路径推断为 Graphs → Legacy Dialogs → Scatter/Dot,界面推断,手册未逐项文档化):

text
GRAPH /SCATTERPLOT = height WITH weight.

若散点明显沿一条斜带分布,说明线性假设大致成立,Pearson r 才有意义;若呈曲线、团块或离散点阵,则 r 会低估甚至掩盖真实关系,此时应考虑变换变量或改用非线性方法。

下面构造一份虚构数据集,记录 12 名个体的身高(厘米)与体重(千克),演示相关分析:

text
DATA LIST LIST /id (A4) height (F4.0) weight (F4.0).
BEGIN DATA.
P001 172 65
P002 168 60
P003 180 75
P004 160 52
P005 175 70
P006 165 58
P007 178 72
P008 158 50
P009 170 63
P010 182 78
P011 166 57
P012 174 68
END DATA.
VARIABLE LABELS height '身高(厘米)' weight '体重(千克)'.

GRAPH /SCATTERPLOT = height WITH weight.
CORRELATIONS /VARIABLES=height weight
            /PRINT=TWOTAIL SIG
            /STATISTICS=DESCRIPTIVES.

结果解读要点:散点图应呈现从左下到右上的斜带;相关矩阵中 height 与 weight 的 r 通常落在 0.9 附近,且 SIG 远小于 0.05,表明身高与体重的线性关联在本样本里既强又显著。/STATISTICS=DESCRIPTIVES 输出的均值与标准差则给出变量的集中与离散概况。务必补一句:相关显著不等于因果,它只说明两变量同步变化,不能断言"长高导致变重"。

7.3 简单线性回归 REGRESSION ​

把"由身高预测体重"从相关推进到一条具体方程,用的就是 REGRESSION。图形界面下它位于菜单 Analyze → Regression → Linear(界面推断,手册未逐项文档化)。一元(简单)线性回归的语法结构如下:

text
REGRESSION /VARIABLES=height weight /DEPENDENT=weight
           /STATISTICS=DEFAULTS
           /SAVE=PRED RESID /METHOD=ENTER.

这条语法的几个要点需要逐一交代。/VARIABLES 与 /DEPENDENT 都是必填项:前者列出全部变量,后者指定因变量;凡列在 /VARIABLES 中却没有出现在 /DEPENDENT 里的变量,一律被当作自变量——本例里 height 因此成为唯一的预测变量。/STATISTICS 决定输出哪些结果块,可取值为 {ALL, DEFAULTS, R, COEFF, ANOVA, BCOV, CI[conf, TOL]};其中 DEFAULTS 等价于同时请求 R、COEFF、ANOVA,恰好覆盖模型解读所需的三块核心输出。/ORIGIN 与 /NOORIGIN 控制是否强制回归线经过原点,默认是 /NOORIGIN,即保留截距项;除非有充分的理论依据要求方程过零点,否则保留默认,切勿随手改为 /ORIGIN 而误删截距。若需要未标准化系数的方差—协方差矩阵,可在 /STATISTICS 追加 BCOV,它给出各系数估计之间的协方差结构,对理解系数估计的相互联系也有帮助。最后,/SAVE=PRED RESID 把预测值(新变量 PRED1)与残差(新变量 RES1)写回活动数据集,为 7.5 节的诊断做准备;多个变量时按先后次序编号。/METHOD=ENTER 表示将所有自变量一次性强制纳入,不做逐步筛选。

沿用 7.2 的数据集,直接运行上面这段语法即可。结果由三张表承载,解读时各有侧重:

  • 模型汇总(Model Summary):给出 R(复相关系数,一元情形下等于 |r|)与 R²(决定系数),R² 衡量因变量的变异中有多少比例被模型解释,是回归里最常用的效应量;该表还给出估计标准误(Std. Error of the Estimate),即残差标准差的估计,刻画预测值偏离真实值的典型幅度,该值越小预测越紧凑。
  • ANOVA 表:报告整体 F 检验,其 SIG 回答"模型整体上是否显著优于仅凭均值预测"。当 SIG 远小于 0.05,可认为回归方程确有解释力。
  • 系数表(Coefficients):核心所在,给出常数(截距)与自变量的非标准化系数 B、标准化系数 Beta、标准误、t 值与 SIG。以 体重 = B₀ + B₁×身高 为例,B₀ 为截距、B₁ 为斜率,含义是身高每变动一单位、体重平均变动多少千克;SIG 判断该自变量的回归系数是否显著区别于 0。一元情形下 Beta 的绝对值恰好等于相关系数 r。

解读要点:若 R² 接近 0.8,意味着身高独自解释了体重约八成的变异,决定系数这一效应量相当可观;ANOVA 表的 F 检验 SIG 应远小于 0.05,确认模型整体有效;系数表中 height 的 B 通常在 0.7~0.9 区间,可表述为"身高每增加 1 厘米,体重平均增加约 B 千克",其 SIG 小于 0.05 说明该斜率在统计上显著。此时 PRED1 与 RES1 已写入数据集,可在数据视图查看每个个案的预测值与残差。

7.4 多元回归与模型解读 ​

现实问题很少只受单一因素支配。多元回归把两个及以上自变量同时放进模型,估计在控制其他变量之后,每个自变量的独立贡献。语法与一元模型几乎一致,只需在 /VARIABLES 增加变量;若要顺带做共线性诊断,可在 /STATISTICS 追加 TOL:

text
REGRESSION /VARIABLES=height weight age /DEPENDENT=weight
           /STATISTICS=DEFAULTS TOL
           /SAVE=PRED RESID /METHOD=ENTER.

这里 age 作为新增自变量进入模型。需要留意,TOL 仅在同时请求 COEFF 时才有效;由于 DEFAULTS 已经包含 COEFF,故 TOL 能正常产出。PSPP 不直接输出方差膨胀因子(VIF),但 VIF = 1 / TOL,拿到容忍度后手算即可。

多元回归的输出沿用 7.3 的三张表,但解读角度要补三件事。

系数表在多元场景里尤为重要。非标准化系数 B 表示在控制其他自变量后,该自变量每变动一单位、因变量平均变动多少;它的实际单位仍是因变量的量纲,便于直接解释。标准化系数 Beta 则把所有变量先标准化到同一量纲后再估计,因而可在不同自变量之间比较"谁的影响相对更大"——比如比较身高(厘米)与年龄(岁)对体重的相对贡献时,Beta 比 B 更有可比性。每行仍附标准误、t 值与 SIG,分别用于判断单个系数是否显著区别于 0。

模型汇总在多元场景里出现两个决定系数:R² 与调整 R²(Adjusted R Square)。R² 随自变量增多只会升不降,哪怕新增的变量毫无解释力,R² 也会被它"虚抬";调整 R² 则对自变量的个数施加了惩罚,每多引入一个变量都要付出自由度代价,因此更适合在模型之间做比较,也更诚实地反映模型的简约性。把调整 R² 的公式拆开看,它的惩罚项来自样本量 n 与自变量个数 p 的比值——当 n 相对 p 很大时,两种 R² 相差无几;当模型趋于饱和(p 逼近 n)时,调整 R² 会明显低于 R²,甚至变为负,提示模型在"过拟合"边缘。当某个自变量的 SIG 大于 0.05,意味着在已纳入其他变量的模型中,它的独立线性贡献不足以与随机波动区分开,此时不宜引用其斜率作结论,应考虑剔除或重新审视变量定义。

ANOVA 表汇报的是整个回归(所有自变量合在一起)的显著性,其 F 检验回答"模型整体是否优于仅凭均值预测"。它不针对单个自变量,单个自变量的显著性要看系数表的 SIG。

共线性是多元回归特有的隐患。当自变量之间彼此高度相关,各自的系数估计会变得不稳定、标准误膨胀、符号难以解释。容忍度(TOL)反映某个自变量不能被其余自变量线性解释的比例,数值等于 1 减去该变量对其余自变量回归的决定系数;容忍度越低,共线性越严重。经验上容忍度低于 0.1(保守些也会看 0.2)往往提示问题,其倒数 VIF 超过 10(宽松些看 5)通常视为共线性信号。两者一体两面,报告时择一即可,但初学者同时列出更便于核对。值得注意的是,共线性损害的是"解释",却不必然损害"预测"——即便系数摇摆不定,模型对样本内 Y 的整体拟合仍可能不错,因此不能仅凭 R² 高就推断每个自变量都可靠。

7.5 回归诊断与限制 ​

线性回归的有效性依赖若干前提:残差近似正态、方差齐性(残差的散布不随预测值变化)、自变量与因变量之间确为线性关系,以及各案观测相互独立。按理说,这些前提该由回归过程一并报告,让使用者一次看清模型是否可靠。

然而必须如实说明一个关键事实:PSPP 的 REGRESSION 并未提供 /SCATTERPLOT、/RESIDUALS、/CASEWISE、/OUTLIERS 等专用诊断子命令,也没有 Durbin-Watson 统计量、Cook 距离的直接输出。 这部分在 PSPP 手册中并未逐项覆盖,属于通用统计知识,而非 PSPP 特有的可操作步骤。因此,任何把残差诊断写成"在 PSPP 里点几下即可完成"的描述都是不准确的;在 PSPP 当前版本中,这类诊断必须手工处理。

PSPP 留给我们的唯一内置出口是 /SAVE=RESID(常配合 PRED),把残差 RES1 与预测值 PRED1 落回活动数据集,之后再用通用过程自行检视。下面给出一条完整、可在 PSPP 中直接运行的示例,仍以 7.2 的身高—体重数据演示:先拟合简单回归并写出残差,再用 EXAMINE 检查残差的正态性。

text
DATA LIST LIST /id (A4) height (F4.0) weight (F4.0).
BEGIN DATA.
P001 172 65
P002 168 60
P003 180 75
P004 160 52
P005 175 70
P006 165 58
P007 178 72
P008 158 50
P009 170 63
P010 182 78
P011 166 57
P012 174 68
END DATA.
VARIABLE LABELS height '身高(厘米)' weight '体重(千克)'.

* 拟合简单回归,并将残差与预测值写回数据集
REGRESSION /VARIABLES=height weight /DEPENDENT=weight
           /STATISTICS=DEFAULTS
           /SAVE=PRED RESID /METHOD=ENTER.

* 检视残差正态性:直方图 + 正态概率图(自动附带 Shapiro-Wilk 检验)
EXAMINE RES1 /PLOT=HISTOGRAM NPPLOT /STATISTICS=DESCRIPTIVES.

* 检视方差齐性与线性:残差对预测值散点,应呈围绕 0 线的无规律横向带
GRAPH /SCATTERPLOT = PRED1 WITH RES1.

按上面的语法跑完后,可作如下解读:

  • 残差正态性:EXAMINE 的 /PLOT=HISTOGRAM 给出残差直方图,NPPLOT 给出正态概率图;只要请求了图形,PSPP 会自动执行 Shapiro-Wilk 正态性检验。若 Shapiro-Wilk 的 p 值大于 α(如 0.05),通常不拒绝残差正态的假定,可认为正态性前提基本满足。直方图若明显偏斜或出现厚尾,则提示正态性可能受损。
  • 方差齐性与线性:落在 GRAPH /SCATTERPLOT = PRED1 WITH RES1 这张残差对预测值的散点图上。若点是围绕 0 线的随机云团、上下宽度基本恒定,则方差齐性、线性两项假设皆可接受;若出现喇叭口(一侧散开)、弧形弯曲或明显斜带,则分别暗示异方差、非线性或遗漏变量。

下面三条概念属于通用统计知识([手册未覆盖,说明为通用统计知识]),PSPP 不提供直接输出,列在此处供读者判断模型健康度:

  • 残差独立性:理想情况下,一个个案的残差不应预示着另一个个案的残差,尤其对时间序列数据要警惕相邻残差正相关。侦测它的 Durbin-Watson 统计量在 PSPP 中没有现成输出,需借 /SAVE=RESID 取出残差后用其他工具手算。
  • 异方差:残差的方差应不随预测值水平变化;若散点呈喇叭口,小预测值处紧凑、大预测值处发散,则违背方差齐性。可考虑对因变量取对数等变换,或改用对异方差稳健的估计。
  • 多重共线性:已在 7.4 节讨论,用 TOL/VIF 窥探;它只影响系数估计的稳定性,不直接影响模型整体的预测能力。

一旦图形发出警示,应回到数据层面处置,而这部分在 PSPP 里同样要手工完成:异方差可考虑对因变量取对数等变换(COMPUTE 生成新变量后重新拟合),或改用对异方差稳健的估计思路;非线性可尝试加入自变量的平方项、交互项(COMPUTE 生成后纳入 /VARIABLES);怀疑遗漏变量则补充测量或换用 GLM 纳入更多预测变量。PSPP 的 REGRESSION 仅提供建模与 /SAVE 出口,变换、稳健处理与更复杂的设定都需在回归前后用 COMPUTE、GLM 等另行完成,不能指望一条 REGRESSION 命令把诊断与补救打包做完。

需要特别强调两个子命令的生效条件,以免误用:CI(置信区间)仅在同时选定 COEFF 时才有效,单独写 CI 而不带 COEFF 不会产出区间;TOL 同样仅在 COEFF 被选中的前提下有效。也就是说,若想得到系数的 95% 置信区间,应写作:

text
REGRESSION /VARIABLES=height weight age /DEPENDENT=weight
           /STATISTICS=COEFF CI(0.95) TOL
           /SAVE=PRED RESID /METHOD=ENTER.

把回归结果讲给非专业读者,关键是把系数翻译成人话,并交代清楚"能说什么、不能说什么"。一份清晰的报告通常先说关联是否存在,再说预测关系("身高每增高 1 厘米,体重平均增加约 B 千克"),最后说解释力(R² 回答了百分之几的变异被解释)。决定系数 R² 是直接讲"百分之几的变动能被解释"最直观的效应量,比抛出一个相关系数更易被记住;系数的可靠性则由各自的 SIG 与(如已请求)95% 置信区间支撑。

无论相关还是回归,输出的都只是统计关联,不能自动升级为因果断言。若要论证因果,还需实验设计或理论支撑,这超出 CORRELATIONS 与 REGRESSION 本身的本领。最后,诚实地写明诊断结论——残差是否近似正态、方差是否齐性,以及 PSPP 未能直接给出的 Durbin-Watson 与 Cook 距离如何以 /SAVE=RESID 配合其他工具补做——能让一份回归报告经得起推敲。

基于 GNU PSPP 2.0.1 手册与入门教程整理