5.1 本章介绍(回归分析基础)
从简单回归到多元回归:社会科学研究的核心方法
为什么回归分析如此重要?
社会科学研究的核心问题
几乎所有的社会科学研究都在回答类似的问题:
| 学科 | 核心问题 | 回归应用 |
|---|---|---|
| 经济学 | 教育对收入的影响? | log(wage) ~ education + experience |
| 社会学 | 社会资本对向上流动的作用? | mobility ~ social_capital + education + family_background |
| 政治学 | 民主制度对经济增长的影响? | gdp_growth ~ democracy + institutions + controls |
| 教育学 | 班级规模对学生成绩的影响? | test_score ~ class_size + teacher_quality + controls |
| 心理学 | 压力对心理健康的影响? | mental_health ~ stress + social_support + personality |
共同点:都需要回归分析来建立变量间的关系
回归分析的本质
从相关到因果
相关性(Correlation):
# 简单相关
corr = df['education'].corr(df['wage'])
# 问题:无法控制混淆因素,无法推断因果回归分析(Regression):
# 多元回归
model = sm.OLS(df['log_wage'],
sm.add_constant(df[['education', 'experience', 'ability']])).fit()
# 优势:控制其他因素,分离净效应回归的三大用途
描述关系(Descriptive)
- 量化变量间的关系强度
- 例:教育年限每增加1年,工资增长8%
预测(Prediction)
- 根据自变量预测因变量
- 例:根据个人特征预测未来收入
因果推断(Causal Inference)
- 在满足一定假设下推断因果关系
- 例:教育对收入的因果效应
️ 本章学习路线
第 1 节:简单线性回归
核心概念:
- 一元线性回归模型:
- OLS 估计原理:最小化残差平方和
- 拟合优度: 的含义
- 统计推断: 检验、置信区间
Python 实现:
import statsmodels.api as sm
import matplotlib.pyplot as plt
# 简单线性回归
X = sm.add_constant(df['education'])
y = df['wage']
model = sm.OLS(y, X).fit()
# 可视化
plt.scatter(df['education'], df['wage'], alpha=0.5)
plt.plot(df['education'], model.fittedvalues, 'r-', linewidth=2)
plt.xlabel('Education (years)')
plt.ylabel('Wage')
plt.title('Simple Linear Regression')
plt.show()经典案例:
- Galton 的身高回归("回归"一词的起源)
- Mincer 工资方程(教育经济学的基础)
第 2 节:多元线性回归
核心概念:
- 多元回归模型:
- 偏回归系数(Partial Regression Coefficient)
- 多重共线性(Multicollinearity)
- 遗漏变量偏误(Omitted Variable Bias)
数学直觉:
解释: 是在控制其他变量后, 对 的净效应
Python 实现:
# 多元回归
X = sm.add_constant(df[['education', 'experience', 'female', 'urban']])
model = sm.OLS(df['log_wage'], X).fit(cov_type='HC3')
print(model.summary())经典案例:
- 工资决定方程(Mincer Equation)
- Cobb-Douglas 生产函数
- Demand/Supply 模型
第 3 节:回归诊断
核心假设(Gauss-Markov 假设):
| 假设 | 含义 | 违反后果 | 检验方法 |
|---|---|---|---|
| 线性性 | $E[Y | X] = X\beta$ | 系数有偏 |
| 外生性 | $E[\varepsilon | X] = 0$ | 系数有偏 |
| 同方差 | $Var(\varepsilon | X) = \sigma^2$ | SE 有偏 |
| 无自相关 | SE 有偏 | DW 检验 | |
| 正态性 | 影响小样本推断 | Shapiro 检验 |
诊断工具:
# 1. 异方差检验
from statsmodels.stats.diagnostic import het_breuschpagan
bp_test = het_breuschpagan(model.resid, model.model.exog)
# 2. 多重共线性(VIF)
from statsmodels.stats.outliers_influence import variance_inflation_factor
vif = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
# 3. 残差分析
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
# 残差 vs 拟合值、Q-Q plot、残差直方图、杠杆值图问题解决:
- 异方差 → 稳健标准误(HC3)、WLS
- 多重共线性 → 删除变量、主成分回归
- 非线性 → 变换、多项式、样条
第 4 节:分类变量与交互项
虚拟变量陷阱:
# 错误:包含所有虚拟变量
dummies = pd.get_dummies(df['region']) # 4 个地区 → 4 个虚拟变量
# 导致完全共线性
# 正确:删除一个参照组
dummies = pd.get_dummies(df['region'], drop_first=True) # 3 个虚拟变量交互效应:
# 教育回报率是否因性别而异?
df['edu_x_female'] = df['education'] * df['female']
model = smf.ols('log_wage ~ education + female + education:female',
data=df).fit()
# 解释:
# 男性教育回报率 = β₁
# 女性教育回报率 = β₁ + β₃可视化交互效应:
# 绘制不同性别的教育-工资曲线第 5 节:回归结果的解释与报告
系数解释的艺术:
| 模型形式 | 解释 | 示例 |
|---|---|---|
| Level-Level | 增加 1 单位, 增加 单位 | |
| Log-Level | 增加 1 单位, 增长 % | |
| Level-Log | 增长 1%, 增加 单位 | |
| Log-Log | 增长 1%, 增长 %(弹性) |
论文级表格:
from statsmodels.iolib.summary2 import summary_col
# 多模型对比
results = summary_col([model1, model2, model3],
model_names=['(1)', '(2)', '(3)'],
stars=True)
print(results.as_latex())完整回归报告应包含:
- 系数估计与标准误
- 显著性标记(*** p<0.01, ** p<0.05, * p<0.1)
- 样本量、、调整
- F 统计量
- 标准误类型(稳健、聚类)
- 控制变量说明
学习目标
完成本章后,你将能够:
| 能力维度 | 具体目标 |
|---|---|
| 理论理解 | 理解 OLS 估计原理 |
| 掌握 Gauss-Markov 假设 | |
| 理解偏回归系数的含义 | |
| Python 实现 | 使用 statsmodels 进行 OLS 回归 |
| 进行完整的回归诊断 | |
| 处理分类变量和交互项 | |
| 结果解释 | 正确解释回归系数 |
| 区分统计显著性与实质显著性 | |
| 识别因果推断的陷阱 | |
| 学术写作 | 输出论文级回归表格 |
| 撰写规范的回归结果报告 |
回归分析的常见误区
误区 1:相关即因果
错误:
回归显示冰淇淋销量与溺水人数显著正相关
→ 结论:冰淇淋导致溺水正确:
- 混淆变量:夏季温度
- 相关性 ≠ 因果性
- 需要考虑内生性、遗漏变量等问题
误区 2: 越高越好
错误:盲目追求高
正确:
- 预测任务: 重要
- 因果推断:系数的无偏性更重要
- 高 可能意味着过拟合
误区 3:统计显著性 = 实质意义
错误:
p < 0.001,因此该效应非常重要正确:
- 统计显著性:效应不为 0
- 实质显著性:效应大小是否有意义
- 大样本下,微小效应也可能显著
误区 4:控制变量越多越好
错误:加入所有可能的变量
正确:
- 只控制混淆变量
- 过度控制可能导致对撞偏误(Collider Bias)
- Bad Control(中间变量、结果变量)
经典文献与案例
开创性研究
Mincer (1974): "Schooling, Experience, and Earnings"
- Mincer 工资方程
Card & Krueger (1994): "Minimum Wages and Employment"
- 最低工资对就业的影响
- 双重差分回归
Angrist & Krueger (1991): "Does Compulsory School Attendance Affect Schooling and Earnings?"
- 出生季度作为工具变量
- 教育的因果回报率
经典教材
Wooldridge (2020): Introductory Econometrics (7th Edition)
- 计量经济学圣经
- Python 示例代码
Angrist & Pischke (2009): Mostly Harmless Econometrics
- 因果推断视角
- 实践导向
Stock & Watson (2020): Introduction to Econometrics (4th Edition)
- 清晰易懂
- 大量案例
学习建议
DO(推荐做法)
- 先理解再操作:不要只会跑代码,理解背后的统计原理
- 可视化优先:回归前先画散点图,直观理解关系
- 诊断必不可少:每次回归都要检查假设
- 因果谨慎:区分相关性和因果性
- 报告规范:按照学术规范报告结果
DON'T(避免误区)
- 不要p-hacking:不要反复尝试模型直到显著
- 不要忽略假设:Gauss-Markov 假设很重要
- 不要过度解释:相关不等于因果
- 不要忘记稳健标准误:尤其在横截面数据中
- 不要盲目相信 :高 不等于好模型
本章数据集
| 数据集 | 描述 | 来源 | 变量 |
|---|---|---|---|
| wage_data.csv | 工资数据(横截面) | CPS | wage, education, experience, female |
| housing_prices.csv | 房价数据 | Boston Housing | price, rooms, crime, distance |
| student_achievement.csv | 学生成绩 | PISA | test_score, class_size, teacher_qual |
| country_growth.csv | 国家增长 | Penn World Table | gdp_growth, investment, education |
准备好了吗?
回归分析是社会科学研究的核心方法,也是:
- 描述统计的延伸
- 假设检验的应用
- 因果推断的基础
- 预测建模的起点
掌握回归分析,你将能够:
- 科学地研究变量间的关系
- 撰写规范的实证研究论文
- 进行数据驱动的决策分析
- 为高级计量方法打下基础
让我们开始回归分析之旅!
本章文件清单
module-5_Regression Analysis/
├── 00-本章介绍.md # 本文件
├── 01-simple-linear-regression.md # 简单线性回归
├── 02-multiple-regression.md # 多元线性回归
├── 03-regression-diagnostics.md # 回归诊断
├── 04-categorical-interaction.md # 分类变量与交互项
└── 05-interpretation-reporting.md # 结果解释与报告预计学习时间:20-24 小时 难度系数:⭐⭐⭐⭐(需要统计学基础) 实用性:⭐⭐⭐⭐⭐(社会科学研究必备)
下一节:01 - 简单线性回归
从最简单的模型开始!