尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

SPSS多元线性回归实战:从雇员薪酬数据到模型诊断与Bootstrap中介

SPSS多元线性回归实战:从雇员薪酬数据到模型诊断与Bootstrap中介 简介这份PDF面向备考统计类考试、需要掌握多元线性回归实操的读者以SPSS软件为工具通过完整操作截图演示从数据输入到结果解释的全流程。资源包内含1个PDF文件大小约7.91MB内容以图文截图为主直观呈现SPSS界面与关键参数设置。截图实例围绕雇员当前工资预测展开涵盖性别、受教育程度、职务分类、起始工资、受雇月数、过去经验等自变量逐步展示数据预处理、模型建立、回归系数与t值、p值等结果的读取方式并说明如何解释各自变量对因变量的影响。目前已有542人学习下载适合希望用一份可视化案例快速理解多元线性回归分析步骤、对照练习SPSS操作的学习者参考。1. 从一份雇员薪酬数据说起多元线性回归在 SPSS 里到底怎么跑手里这份《多元线性回归实例软件SPSS操作截图.pdf》其实是一份很典型的课堂数据集雇员编号、性别、生日、受教育程度、职务分类、当前工资、起始工资、受雇月数、过去经验、是否少数民族一共十来个字段样本量不大字段名还带着 id、gender、bdate、educ、jobcat、salary、salbegin、jobtime、prevexp、minority、age 这套 SPSS 经典命名。很多人第一次做多元线性回归卡的不是公式而是拿到这样一张表之后不知道从哪一列点起。这份资料的价值就在于它把 SPSS 的操作界面一步步截了下来从数据录入到模型输出都有痕迹可循。它适合两类人一类是统计课要交作业、需要照着截图复现结果的学生另一类是想用 SPSS 快速验证「受教育程度、起始工资、工作年限到底谁在影响当前工资」这类问题的从业者。下面不按截图顺序念而是按一个能真正跑通的流程拆开讲。2. 数据准备与变量角色划分SPSS 里的 salary 因变量怎么定2.1 先分清因变量和自变量多元线性回归的核心是找一个因变量dependent和一组自变量independent。在这份数据里最自然的因变量是salary当前工资自变量候选包括educ受教育程度单位年、salbegin起始工资、jobtime受雇月数、prevexp过去经验月数、age年龄、gender性别、jobcat职务分类、minority是否少数民族。这里有个容易踩的坑salary和salbegin高度相关因为起始工资本身就是当前工资的强预测项。如果两个都放进去回归系数虽然能算但解释时要小心多重共线性。常见做法是先跑一个包含全部候选变量的模型再看 VIF 和显著性决定删谁。变量名含义角色测量尺度salary当前工资因变量连续educ受教育程度年自变量连续salbegin起始工资自变量连续jobtime受雇月数自变量连续prevexp过去经验月自变量连续gender性别自变量分类0/1jobcat职务分类自变量分类多水平minority是否少数民族自变量分类0/12.2 把数据录进 SPSS 的两种方式第一种是直接在 SPSS 的「变量视图」里定义变量再切到「数据视图」逐行录入。变量视图里要设好 Name、Type、Width、Decimals、Label、Values、Measure。比如gender的 Values 设成 0f、1mminority设成 0no、1yesMeasure 里分类变量选 Nominal连续变量选 Scale。第二种是从 Excel 或 CSV 导入路径是文件 → 打开 → 数据文件类型选 Excel勾选「从第一行读取变量名」。导入后务必回变量视图检查 Measure 有没有被自动识别错SPSS 经常把 0/1 编码的性别识别成 Scale这会影响后面某些分析。# 如果数据在 CSV 里也可以先用 Python 快速看一眼字段和缺失情况 python -c import pandas as pd df pd.read_csv(employee.csv) print(df.dtypes) print(df.isnull().sum()) print(df[[salary,educ,salbegin,jobtime,prevexp]].describe()) 这段代码做三件事打印字段类型、统计每列缺失值、对连续变量做描述统计。dtypes能看出哪些列被读成了 object通常是分类变量isnull().sum()定位缺失describe()给出均值、标准差、最小最大值方便判断有没有离谱的异常值比如工资出现负数或年龄超过 100。2.3 缺失值和异常值处理SPSS 里查缺失用分析 → 描述统计 → 频率勾选「显示缺失值」。如果缺失比例低于 5%常见做法是整行删除成列删除如果某个变量缺失较多可以考虑均值替换或回归插补但要在报告里说明。异常值用箱线图看图形 → 旧对话框 → 箱图把 salary 拖进去超出 1.5 倍四分位距的点会被标出来。注意不要一看到异常值就删先判断是不是录入错误。3. 在 SPSS 里建立多元回归模型从线性回归对话框到系数表3.1 操作路径与变量摆放SPSS 的多元线性回归入口是分析 → 回归 → 线性。打开对话框后把salary放进「因变量」框把educ、salbegin、jobtime、prevexp、age放进「自变量」框。分类变量gender、jobcat、minority如果直接放进去SPSS 会当成连续变量处理这是新手最常犯的错。正确做法是点「分类」按钮把gender、jobcat、minority移进「分类协变量」列表然后选择「指示符」对比参考类别选「最后一个」。这样 SPSS 会自动生成哑变量比如 jobcat 有三个水平就会生成两个哑变量。3.2 方法选择进入、逐步、后退对话框里的「方法」下拉框决定变量怎么进模型进入Enter所有自变量一次性全部进入适合理论驱动、你已经确定要放哪些变量。逐步Stepwise按统计显著性逐步加入或剔除适合探索性分析但结果不稳定样本小的时候尤其容易过拟合。后退Backward先全放进去再逐步剔除不显著的。这份雇员数据样本不大我一般先用「进入」跑全模型看哪些变量显著再用「后退」验证一遍两次结果一致的变量才敢下结论。3.3 勾选统计量和图点「统计」按钮至少勾选估计值、模型拟合度、R 方变化、描述性统计、共线性诊断、Durbin-Watson。共线性诊断会输出 VIF 和容忍度Durbin-Watson 看残差自相关。点「图」按钮把ZPRED放 X 轴、ZRESID放 Y 轴生成残差散点图用来检查线性假设和方差齐性。# 用 statsmodels 对照 SPSS 的结果验证系数是否一致 import pandas as pd import statsmodels.api as sm df pd.read_csv(employee.csv) X df[[educ, salbegin, jobtime, prevexp, age]] X sm.add_constant(X) # 加截距项 y df[salary] model sm.OLS(y, X).fit() print(model.summary()) print(VIF:, [sm.stats.outliers_influence.variance_inflation_factor(X.values, i) for i in range(X.shape[1])])这段代码用 statsmodels 复现 SPSS 的 OLS 结果。add_constant补上截距model.summary()输出系数、标准误、t 值、p 值、R 方和 SPSS 的「系数」表一一对应。VIF 那行逐个计算方差膨胀因子一般 VIF 大于 10 就说明该变量和其他自变量共线性严重考虑剔除或合并。3.4 读懂输出表SPSS 输出里重点看三张表模型摘要看 R 方和调整 R 方。调整 R 方考虑了自变量个数比 R 方更保守样本小的时候优先看它。ANOVA看 F 值和显著性。如果 Sig. 小于 0.05说明模型整体显著至少有一个自变量对因变量有解释力。系数看每个自变量的 B非标准化系数、Beta标准化系数、t 值、Sig.、VIF。B 表示自变量每变化一个单位因变量平均变化多少Beta 去掉量纲方便比较哪个变量影响更大。提示如果某个分类变量的 Sig. 大于 0.05不要急着删先看它的各个哑变量是否有一个显著。分类变量整体检验和单个哑变量检验是两回事。4. 模型诊断与常见报错共线性、异方差和哑变量陷阱4.1 共线性诊断共线性最直接的信号是 VIF 偏高、容忍度接近 0同时模型整体 F 显著但单个系数都不显著。在这份数据里salary和salbegin的相关系数通常很高如果两个都放进去VIF 很容易超过 10。处理办法有三种删掉其中一个、用主成分回归、或者做岭回归。SPSS 本身没有内置岭回归菜单需要装 R 或 Python 扩展或者用「语法」调用。-- 如果数据在数据库里先算一下自变量之间的相关系数矩阵 SELECT CORR(educ, salbegin) AS r_educ_salbegin, CORR(educ, jobtime) AS r_educ_jobtime, CORR(salbegin, jobtime) AS r_salbegin_jobtime FROM employee;这段 SQL 用CORR函数算自变量两两相关系数。相关系数绝对值超过 0.8 就要警惕共线性。不同数据库函数名可能不同MySQL 没有内置 CORR需要用(AVG(x*y)-AVG(x)*AVG(y))/(STDDEV(x)*STDDEV(y))手动算。4.2 异方差与残差图残差散点图如果呈现喇叭形随着预测值增大残差散布变大说明存在异方差。SPSS 里可以在「图」对话框把ZRESID放 Y 轴、ZPRED放 X 轴看点的分布是否均匀。异方差的后果是标准误被低估t 值虚高容易把不显著的变量判成显著。补救办法包括对因变量取对数、用加权最小二乘或者用稳健标准误。4.3 哑变量陷阱分类变量进回归必须转成哑变量而且不能同时放入全部水平否则会和截距项完全共线SPSS 会直接报错或自动删掉一个。比如 jobcat 有三个水平只能放两个哑变量第三个作为参考类别。SPSS 的「分类」按钮会自动处理这件事但如果你手动在数据视图里生成哑变量就要自己保证不重复。4.4 常见报错对照报错/现象可能原因处理方式系数表出现缺失行某变量与截距完全共线检查哑变量是否放全VIF 显示为空白该变量是分类协变量正常SPSS 对分类变量不输出 VIFR 方很高但系数都不显著严重共线性删变量或做岭回归Durbin-Watson 远离 2残差自相关检查数据是否按时间排序样本量小于自变量个数自由度不足减少自变量或增加样本5. 从系数到结论把 SPSS 输出翻译成业务语言5.1 标准化系数比较影响力SPSS 系数表里的 Beta 列是标准化系数去掉了单位影响。如果salbegin的 Beta 是 0.8educ的 Beta 是 0.2说明起始工资对当前工资的影响远大于受教育程度。但要注意Beta 只在当前模型内可比换一批变量结果会变。5.2 写出回归方程非标准化系数 B 直接用来写方程。假设输出是常数项 5000educ 的 B 为 800salbegin 的 B 为 0.6jobtime 的 B 为 50那么方程是salary 5000 800*educ 0.6*salbegin 50*jobtime解释时要说「在其他变量不变的情况下受教育程度每增加一年当前工资平均增加 800」。这个「其他变量不变」是回归系数解释的关键漏掉就会变成因果断言。5.3 用 Python 做预测验证# 用训练好的模型对新员工做工资预测 import pandas as pd import statsmodels.api as sm df pd.read_csv(employee.csv) X sm.add_constant(df[[educ, salbegin, jobtime]]) y df[salary] model sm.OLS(y, X).fit() new_emp pd.DataFrame({const: [1], educ: [16], salbegin: [20000], jobtime: [24]}) pred model.predict(new_emp) print(f预测当前工资: {pred.values[0]:.2f}) print(f95% 预测区间: {model.get_prediction(new_emp).conf_int().values})这段代码先拟合模型再构造一条新员工记录做预测。get_prediction().conf_int()给出置信区间比单点预测更有参考价值。注意新数据的列顺序和列名必须和训练时一致否则predict会报错。5.4 结果汇报的写法一份合格的回归结果汇报至少包含样本量、因变量、自变量列表、R 方和调整 R 方、F 检验结果、每个自变量的 B 和 Sig.、共线性诊断结论。如果用了逐步回归还要说明进入和剔除的标准。SPSS 的「表」可以直接复制到 Word但建议重新排版把不显著的变量标注出来。注意SPSS 试用版pdfFactory Pro 创建的那份 PDF 就是试用版输出在导出时会带水印正式报告里最好用截图或重新制表避免水印影响可读性。6. 进阶技巧用 SPSS 语法批量跑回归和 Bootstrap 中介6.1 语法窗口比菜单更快SPSS 的菜单操作每次都要点一遍变量多了很累。用「文件 → 新建 → 语法」打开语法窗口可以直接写REGRESSION /DESCRIPTIVES MEAN STDDEV CORR SIG N /MISSING LISTWISE /STATISTICS COEFF OUTS R ANOVA COLLIN TOL /CRITERIAPIN(.05) POUT(.10) /NOORIGIN /DEPENDENT salary /METHODENTER educ salbegin jobtime prevexp /METHODSTEPWISE age gender minority.这段语法先跑「进入」法放四个连续变量再跑「逐步」法放三个分类变量。/STATISTICS里的COLLIN TOL打开共线性诊断/CRITERIA设进入和剔除的显著性水平。把这段存成.sps文件换数据时只改变量名就能复用。6.2 Bootstrap 中介分析热搜里常有人问「spss怎么做bootstrap中介分析」。SPSS 本身没有独立的中介菜单常见做法是装 PROCESS 宏由 Hayes 开发。安装后走分析 → 回归 → PROCESS模型编号选 4简单中介把自变量、中介变量、因变量分别放好勾选「Bootstrap confidence intervals」样本数设 5000置信水平 95%。输出里看间接效应的 Bootstrap 置信区间是否包含 0不包含就说明中介效应显著。6.3 用 Python 复现 Bootstrap 中介import numpy as np import pandas as pd import statsmodels.api as sm df pd.read_csv(employee.csv) n_boot 5000 indirect_effects [] for _ in range(n_boot): sample df.sample(nlen(df), replaceTrue) # 路径 a自变量 - 中介变量 a sm.OLS(sample[salbegin], sm.add_constant(sample[[educ]])).fit().params[educ] # 路径 b 和 c自变量 中介变量 - 因变量 m sm.OLS(sample[salary], sm.add_constant(sample[[educ, salbegin]])).fit() b m.params[salbegin] indirect_effects.append(a * b) ci_low, ci_high np.percentile(indirect_effects, [2.5, 97.5]) print(f间接效应均值: {np.mean(indirect_effects):.2f}) print(f95% Bootstrap 置信区间: [{ci_low:.2f}, {ci_high:.2f}])这段代码手动实现 Bootstrap 中介检验。每次有放回抽样先算 educ 对 salbegin 的系数 a再算控制 educ 后 salbegin 对 salary 的系数 b乘积 a*b 就是间接效应。重复 5000 次后取 2.5% 和 97.5% 分位数区间不含 0 即中介显著。和 PROCESS 宏的结果应该接近差异来自随机种子和抽样次数。6.4 批量跑多个因变量如果要对 salary、salbegin 分别建模型可以用 SPSS 的SPLIT FILE或者 Python 循环targets [salary, salbegin] for target in targets: X sm.add_constant(df[[educ, jobtime, prevexp]]) model sm.OLS(df[target], X).fit() print(f--- 因变量: {target} ---) print(f调整 R 方: {model.rsquared_adj:.3f}) print(model.params.round(2))循环里每次换因变量自变量保持不变输出调整 R 方和系数。这样能在几秒内比较不同因变量的模型表现比在 SPSS 里反复点菜单快得多。注意每次都要重新add_constant因为 X 会被 statsmodels 内部修改。本文还有配套的精品资源点击获取
返回列表