简介:SPSS中Logistic回归分析的系统讲解文档,面向需要开展分类因变量建模的统计学习者与科研人员,内容以2005年中国各地区城市化水平影响因素为实例,完整演示二值Logistic回归的数据准备、变量设置、参数选取与结果解读全流程,并延伸介绍多值Logistic回归的基本思路。文中包含城镇人口比重逻辑值转换、中部地带等分类变量编码、强迫回归法(Enter)操作、迭代次数调整、保存选项配置等关键细节,图文笔记形式便于对照学习。资源包为单个doc文档,压缩包约6.3MB,按操作步骤层层推进,适合SPSS初学者系统上手,也可作为课程作业或论文分析方法的参考。目前已有431人学习下载,对理解Logistic回归在城市化研究等实际场景中的应用具有较高参考价值。
1. 二元分类也能回归:这本 SPSS 文档解决什么问题
很多人第一次碰 Logistic 回归,都是拿着一个 0/1 的因变量去问能不能做回归。线性回归当然也能跑,但预测值会跑到 0 和 1 之外,解释起来全是尴尬。这份《利用 SPSS 进行 Logistic 回归分析.doc》解决的就是这个问题:把「城镇人口比重」这种连续变量按均值切成 Yes/No 两类,再用 SPSS 的 Binary Logistic 模块找出人均 GDP、地理地带等自变量与这个二元结果的关系,最后把回归方程落到 Excel 里做预测复现。换句话说,它是一套从数据准备、参数设置、结果解读到预测验证的完整流程。适合正在写量化分析报告的学生、需要做风险概率预测的从业者,以及想把 SPSS 结果搬到 Excel 里批量算概率的人。
2. 数据准备与变量筛选:二值化、编码方向与自变量取舍
2.1 连续变量转二值:以平均值 45.41% 为临界值的转换逻辑
Logistic 回归的因变量必须是分类变量,所以拿到连续变量后的第一件事就是做二值化。文档里用的临界值是 2005 年全国各地区城镇人口比重的平均值 45.41%,凡是大于等于这个值的地区记为 Yes,否则记为 No。以均值做切点是最省事也最容易被审稿人接受的做法,因为它保留了样本自身的分布信息——高于平均和低于平均各代表一类状态,模型的预测结果天然就带「相对水平」的含义。
实际操作时,这个转换可以在 Excel 里先做完再导入 SPSS。我一般会在原始数据右侧加一列,用 IF 函数生成逻辑值:
=IF(G2>=45.41,"Yes","No")G2 是城镇人口比重的数值单元格,这行公式判断比重是否达到临界值,返回 Yes 或 No 文本,向下填充到全部 31 个地区。注意临界值 45.41 不是四舍五入出来的,而是 31 个比重的真实平均值,建议先用 AVERAGE 函数算出来再填进公式,不要手敲数字。
数据导入 SPSS 时有一点容易忽略:SPSS 的变量视图里要确认「城市化」这一列的测量类型被识别为名义变量。如果导入后 SPSS 自动把它判成标度变量,需要在 Variable View 里手动改成 Nominal,否则后面打开 Binary Logistic 对话框时,这个变量可能根本进不了 Dependent 列表框。
2.2 自变量筛选:为什么二产、三产比重被剔除,中部地带被保留
原本考虑的自变量有四个:人均 GDP、第二产业产值比重、第三产业产值比重、地理位置(东中西三大地带)。文档里明确提到,反复拟合后发现二产比重、三产比重对城市化水平影响不显著,最后只保留了人均 GDP 和中部地带两个变量。
这个筛选过程值得多说两句。二产、三产比重不显著,不代表它们和城市化没关系,而是可能和人均 GDP 高度相关——产业结构会反映在经济产出里,多个强相关变量同时进模型,系数会被分摊,单看每个都不显著。所以文档的取舍并不是「变量没用」,而是「在这个模型设定下,信息已经被人均 GDP 吸收掉了」。做变量筛选时不要只看一趟结果,多试几次拟合,观察哪个变量进去了之后 Sig. 值始终稳定,再决定去留。
分类变量「地理位置」的处理更有代表性。三大地带的分类信息如果用两个虚拟变量表示,其实会占用两个自由度;文档里尝试过之后发现「至多引入两个,比方说东部和中部」,最终只引入中部地带这一个变量。这意味着模型的参照组是东部加西部,中部单独作为一类对比。这种做法的好处是参数少、模型稳,坏处是东部和西部之间的差异被合并掉了——如果你的研究问题里这个差异很重要,就得换一套虚拟变量编码。
2.3 名义变量编码:录入 0/1 与 SPSS 重新编码的差别
名义变量进 Logistic 回归之前必须变成数值。文档用的规则是:属于中部地带的地区记为 1,否则记 0。但这里埋了一个贯穿全文的坑——SPSS 会在分析时自动重新编码,而且方向和你的原始录入相反。
录入时中部=1、非中部=0,SPSS 内部会改成中部=0、非中部=1。因变量也一样:你录入 Yes=高于平均水平、No=低于平均水平,SPSS 输出里却显示 Yes=0、No=1。这两条编码反转规则,文档在第八章开头专门用两张表(Dependent Variable Encoding 和 Categorical Variables Codings)提示读者。我第一次看这份文档的时候没有特别留意,等到按自己的编码去复算预测概率,结果和 SPSS 的分类表完全对不上,才回头找到这个原因。
我的习惯是把这两张编码表复制到 Excel 或者笔记里,和最终的系数表放在一起。因为后面搭建预测公式时,公式里的每个变量取值方向都必须和 SPSS 的编码保持一致,而不是和你录入时的编码保持一致。这一点在第五章的避坑部分还会展开。
3. SPSS 对话框参数设置:Method、Categorical、Save、Options 逐项说明
3.1 打开 Binary Logistic 对话框:变量调入与 Method 选择
数据准备完成后,沿着主菜单的 Analyze→Regression→Binary Logistic 路径打开对话框。这个路径在 SPSS 里比较隐蔽,因为它藏在 Regression 子菜单里,旁边还有 Linear、Multinomial 等选项,第一次找的人容易点错。
对话框中需要做的事很简单:把「城市化」调入 Dependent 列表框,把「人均GDP」和「中部」调入 Covariates 列表框。接下来要选 Method,默认是 Enter,也就是强迫回归——所有选定的自变量一次性全部进入模型,不做逐步筛选。文档选了 Enter,和它前面手动筛选变量的做法是一致的:先把自变量在外面试明白,再让它们一起进模型。
如果这一步你把 Method 换成 Forward 或 Backward,输出会多出「步骤、模块、模型」三套检验表,结果解读复杂很多。数据探索阶段可以用逐步法辅助筛选,但最终报告模型时,业内更认 Enter 的结果,因为逐步法有数据挖掘嫌疑。文档在这里直接选 Enter,我认为是对的。
3.2 Categorical 分类变量设置:中部地带为什么要单独指定
自变量「中部」虽然是 0/1 数值,但它在业务上是名义变量——地带分类没有大小顺序。SPSS 里必须通过 Categorical 对话框把它声明为分类变量,否则模型会把它当连续变量处理,系数含义会变成「中部每增加一个单位」,这在逻辑上说不通。
操作路径是点击对话框右上角的 Categorical 按钮,把「中部」从左侧调入 Categorical Covariates 列表框。这里还有一个隐藏细节:SPSS 默认的分类对比方式是 Indicator,参考类别是最后一个水平。因为两边各只有 0 和 1 两个水平,所以最后呈现出来的效果就是文档里说的——SPSS 把 1 和 0 互换了一下。如果你有遇到三分类以上的名义变量,建议在 Categorical 对话框里看一眼 Reference Category,确认参考组是自己的预期。
3.3 Save 与 Options:保存项、统计量、迭代次数与分类临界值
Save 选项卡控制保存到 Data View 的计算结果。文档选中了四项:Leverage values、DfBeta(s)、Standardized、Deviance。这四项都是回归诊断值,用来检查有没有异常样本或强影响点。实际应用时,Leverage 值大于样本量 3 倍以上通常值得警惕;DfBeta 反映的是「删掉某个样本后系数变化多大」,绝对值超过一定阈值就说明那个点影响力过大。
Options 选项卡里的设置更关键,直接决定输出内容的多少:
| 选项区 | 选项 | 本文取值 | 说明 |
|---|---|---|---|
| Statistics and Plots | Classification plots | 勾选 | 输出分类图,直观展示预测效果 |
| Statistics and Plots | Hosmer-Lemeshow goodness-of-fit | 勾选 | 输出 HL 拟合优度检验,评估整体拟合 |
| Statistics and Plots | CI for exp(B) | 勾选 | 输出优势比的置信区间 |
| Display | At last step | 选择 | 只显示最终迭代结果,省略中间步骤 |
| Classification cutoff | 0.5 | 默认 | 概率大于等于 0.5 判为 1 |
| Maximum Iterations | 50 | 改为 50 | 限制最大迭代次数,默认 20 有时不收敛 |
这里重点说最后两个。Classification cutoff 默认 0.5,意思是模型输出的概率值经过四舍五入变成 0 或 1。如果你觉得某一类预测错误代价更高,可以把临界值往那类的对立方向调,比如改成 0.6,那么小于 0.6 的概率都判为 0。文档里专门提了这个机制,第六章我会展开讲怎么用。
Maximum Iterations 默认只有 20 次,文档明确建议把迭代次数增加到 50,原因是迭代次数太少时计算结果可能没有真正收敛。这个提醒在样本小或自变量有相关性的场景下尤其管用,只要有一次「参数估计不稳定」的经历,你就会记住不能省这一步。
4. 输出结果逐步解读:从样本摘要到最终方程的数表阅读顺序
4.1 前置信息:样本摘要、因变量编码与分类变量编码
SPSS 输出结果一共十二张表,按顺序看不会乱。第一张 Case Processing Summary 是样品处理摘要,报告选择了多少样本、缺失多少样本。本案例 31 个地区全部有效,所以这表看着简单;但如果你的数据有缺失值或做了样本筛选,一定要先看一眼这张表,后面的分析全建立在「入选样本」的基础上。
第二张 Dependent Variable Encoding 和第三张 Categorical Variables Codings 是全文最容易忽略但最重要的两张表。Dependent Variable Encoding 显示 Yes=0、No=1,也就是说 SPSS 把「城市化水平高于平均值」编码为 0,「低于平均值」编码为 1。Categorical Variables Codings 显示中部地带的编码被翻转:录入时的 1(是中部)变成了 0,录入时的 0(非中部)变成了 1。这两张表决定了你后面手算预测值时公式里的符号方向。
建模的人往往急着往下看检验表,忽略这两张编码表。但等到需要用模型做预测时,没有这两张表等于没有说明书,公式写出来也不知道每个系数该乘什么。建议拿到任何 Logistic 回归输出,第一步先把这两张编码表标记出来。
4.2 模型整体检验:Omnibus、模型摘要与 Hosmer-Lemeshow
Omnibus Tests of Model Coefficients 给出步骤、模块、模型的卡方检验值。本案例的卡方值是 31.187,自由度为 2。显著性水平 0.05 下,在 Excel 里用=CHIINV(0.05,2)可以查出卡方临界值 5.991,31.187 远超临界值,Sig. 值也小于 0.05,说明模型整体显著。
Model Summary 里最核心的是最大似然平方的对数值 -2LL=9.137,这个值用于检验整体拟合。文档里还做了一个对比实验:只引入常数项跑一遍模型,得到 -2LL=40.324。两个值之差 40.324-9.137=31.187,恰好就是 Omnibus 检验的卡方值——这不是巧合,而是似然比检验的数学原理。理解这个关系之后,你就不需要死记公式,自然知道 -2LL 的差值就是模型解释力大小的度量。
Cox-Snell 拟合优度为 0.634,Nagelkerke 拟合优度为 0.872。Nagelkerke 是对 Cox-Snell 的校正,取值范围滚到 0 到 1 之间,所以一般报告以 Nagelkerke 为主。0.872 这个值在社会科学研究里算是相当高的拟合水平了,通常见到的研究能到 0.4 就不错。如果你跑出来的伪 R 方很低,优先怀疑自变量选取而不是模型设定。
Hosmer-Lemeshow 检验要注意方向。它对卡方值的解读和 Omnibus 正好相反:卡方值要低于临界值才算通过。本案例自由度 8,临界值用=CHIINV(0.05,8)查得 15.507,HL 卡方 4.730 小于临界值,Sig. 值 0.786 大于 0.05,拟合优度通过。后面紧接着的列联表展示了观测值与期望值的逼近过程,如果这张表里差异过大,说明模型在某些概率区间里预测很差,需要检查是否有遗漏的交互项。
4.3 分类表与最终方程:初始猜测到 30/31 预测正确
Classification Table 会给两组结果。初始分类表对应只有常数项的模型,此时所有样本都预测为数量较多的那一类,本案例是 No 有 20 个,所以初始正确率是 20/31≈64.5%,这是模型效果的下限参照。
最终分类表对应迭代收敛后的完整模型:观测值 Yes 的 11 个全部预测正确,正确率 100%;观测值 No 的 20 个里预测正确 19 个,错误 1 个,正确率 95%。总正确率 30/31≈96.8%,相比初始的 64.5% 提升明显,说明人均 GDP 和中部地带这两个变量真的有判别能力。
Variables in the Equation 表给出了最终模型参数:常数项 16.365,中部地带回归系数 6.917,人均 GDP 回归系数 -0.001。人均 GDP 的系数是负的,这个方向在业务上有点反直觉——经济越发达的城市化水平越高才对。但注意这个负号是在控制了「是否中部」之后出现的,说明中部地带的地区虽然人均 GDP 不高,城市化水平却不低,两个变量之间本来就相关,同时进入模型后系数方向会发生调整。解读系数时不要单看自家符号,要看变量之间的结构关系。
5. 常见问题与避坑:编码反转、迭代不收敛、HL 检验方向与变量引入
5.1 编码反转导致预测全反:SPSS 把 0/1 换了个方向
现象:按自己录入编码(中部=1,非中部=0)直接代入系数公式,算出来的预测概率和 SPSS 输出完全对不上,分类结果甚至整体反了。
原因:SPSS 会把名义变量重新编码,录入时的 1 改成 0,录入时的 0 改成 1;因变量同样被反转,Yes(高于均值)编码为 0,No(低于均值)编码为 1。这两条规则分别藏在 Dependent Variable Encoding 和 Categorical Variables Codings 表里,不看这两张表就会踩坑。
解决:Excel 复算时把中部变量的取值做一次翻转再乘系数。文档里写的(1-C2)就是这个翻转操作:当录入的 C2=1(是中部),SPSS 实际编码是 0;当 C2=0(非中部),SPSS 实际编码是 1。所以用1-C2代替 C2 才能和 SPSS 的系数对齐。我现在的习惯是:把 SPSS 的两张编码表复制到 Excel 的预测模型区域旁边,每次复算前先核对一次公式里的变量方向。
5.2 迭代 20 次不收敛:把 Maximum Iterations 调到 50
现象:输出结果不稳定,或者日志提示达到最大迭代次数,参数还没收敛;换一个极小样本量重新跑,系数变化很大。
原因:SPSS 默认最大迭代次数只有 20 次。样本量小、自变量之间存在相关性时,似然函数的收敛速度很慢,20 次不够用。本案例里人均 GDP 和中部地带存在相关性,如果保持默认值,最终系数可能停在某个未收敛的位置。
解决:Options 的 Maximum Iterations 里把 20 改成 50。文档专门做了这一步,并且强调是「为安全起见」。我一般会同时打开输出结果的迭代历史日志,如果看到「iteration 50」仍没给出收敛标记,就得怀疑是自变量之间有严重共线性,需要回头处理变量关系。
5.3 Hosmer-Lemeshow 检验方向相反:为什么 Sig 越大越好
现象:看到 Omnibus 检验的 Sig. 小于 0.05 觉得模型通过,接着看到 HL 检验的 Sig. 是 0.786 远大于 0.05,开始怀疑是不是检验做错了。
原因:Hosmer-Lemeshow 检验比较的是观测值与期望值的一致性,卡方值越小说明预测越贴合观测,所以它希望 Sig. 大于 0.05、卡方低于临界值。这和 Omnibus 检验恰好方向相反——Omnibus 检验的是模型系数是否整体显著,卡方越大越好;HL 检验的是模型拟合是否有偏差,卡方越小越好。
解决:记住两条判据分开用。本案例 HL 卡方 4.730 小于临界值 15.507,Sig. 0.786 大于 0.05,属于拟合良好。如果你看到 HL 检验的 Sig. 小于 0.05,说明模型在某个概率区间里预测偏差很大,这时优先检查是否有重要交互项或非线性关系遗漏。
5.4 分类变量一次全引入:三个地带同时进模型的教训
现象:把东部、中部、西部三个地带的虚拟变量全部放进协变量,结果模型系数波动很大,有的地带变量 Sig. 值很高,整个模型读起来很别扭。
原因:三大地带的信息存在冗余结构。三个虚拟变量两两相关,而且地带本身和人均 GDP 高度关联——东部地带人均 GDP 高,西部地带低。全部引入后自由度浪费,系数估计被稀释,显著性自然被拉低。
解决:先做试探性拟合,把 Sig. 值稳定高于 0.1 的变量逐个剔除。地带变量至多引入两个,本案例最终只保留「中部」一个,以东部+西部为参照,对比效果干净利落。从那以后我处理名义变量时都会问自己:这个变量的每个水平都真的需要单独进模型吗?还是合并一部分水平之后信息损失也不大?
6. 从二值到多值:扩展方向与临界概率调整技巧
6.1 多值 Logistic 回归:处理三类及以上的因变量
二元 Logistic 只能处理两类结果的因变量,但业务里经常出现三分类甚至更多的场景。比如城市化水平不按均值切两半,而是分成高、中、低三档;或者风险评级分成「低风险、中风险、高风险」三种无序类别。这种情况需要走多值 Logistic 回归。
SPSS 里对应 Analyze→Regression→Multinomial Logistic。操作逻辑和二元版本相通:因变量调入 Dependent,自变量调入 Factor 或 Covariate,区别在于必须指定一个参考类别,SPSS 会输出每个非参考类别相对于参考类别的回归结果。参考类别默认是最后一个水平,建议在上一步就对数据做好排序,让参考组是你最想拿来对比的那一类。输出结果里重点看似然比检验和参数估计表,系数解读方式变成「相对于参考类别,某自变量每增加一个单位,落在这一类的概率是落在参考类的多少倍」。
6.2 调整 Classification cutoff:临界概率对预测分类的影响
Classification cutoff 默认 0.5,但这不一定是业务上的最优解。本案例里 Yes 只有 11 个、No 有 20 个,样本分布并不均衡。如果业务上「漏判 Yes」比「误判 No」代价更大,可以把 cutoff 调高到 0.6,让模型更保守地预测 Yes——代价是总正确率会下降,换来的是更少的假阳性。
我的习惯是先把预测概率存下来,在 Excel 里做一张概率分布直方图,观察两类样本的概率区间是否重叠;如果两类样本在 0.5 附近大量重叠,说明 cutoff 怎么调都有人被分错,根本改善手段是加自变量或换模型。如果概率分布分离度好,再根据业务代价选定 cutoff 值,用模型的结果倒推最优切点。
最后补一句:我从那以后每次拿到 Logistic 回归的输出,都强制自己先找 Dependent Variable Encoding 和 Categorical Variables Codings 两张编码表,核对变量方向之后再开始读系数、搭预测公式。这一步省掉的返工时间,比任何参数调优都值。希望帮到你。
本文还有配套的精品资源,点击获取