Skip to content

1.1 本章介绍(回归分析与 Python 应用)

"Essentially, all models are wrong, but some are useful.""所有的模型本质上都是错的,但有些是有用的。"— George E. P. Box, Statistician (统计学家)

从零开始掌握 Python 回归分析的核心方法

难度学习时长实战性


本章目标

完成本章后,你将能够:

  • 使用 Python 进行 OLS 线性回归分析
  • 掌握 Logit/Probit 等二元因变量模型
  • 像顶级期刊一样展示回归结果表格
  • 理解并解读回归输出的每一个指标
  • 将 Python 回归结果与 Stata/R 进行对比

为什么从回归分析开始?

回归分析在社会科学中的地位

回归分析是社会科学实证研究的基石。无论是经济学、社会学、政治学还是管理学,绝大多数实证论文都使用回归方法:

领域典型研究问题回归类型
劳动经济学教育回报率、性别工资差异OLS、Mincer 方程
发展经济学贫困陷阱、经济增长因素面板回归、工具变量
公司金融资本结构、公司治理Logit、固定效应
社会学社会流动、不平等多层回归、Logit
政治学投票行为、政策效果Probit、DID

Python vs Stata vs R:为什么选择 Python?

特性PythonStataR
回归功能⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
学习曲线中等简单较陡
通用性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
数据处理⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
机器学习⭐⭐⭐⭐⭐⭐⭐⭐⭐
免费开源(昂贵)
社区支持最活跃中等活跃

Python 的独特优势

  • 一站式解决方案:从数据清洗 → 统计分析 → 机器学习 → Web 应用
  • 职业发展:Python 是数据科学、AI 领域的标准语言
  • 生态系统:pandas(数据处理)+ statsmodels(统计)+ scikit-learn(机器学习)+ PyTorch(深度学习)完美结合
  • 工业界认可:95% 的科技公司使用 Python,Stata 仅限学术界

本章内容概览

第 1 节:Python 回归分析快速入门

学习时长:30 分钟

  • 5 分钟运行第一个 OLS 回归
  • 核心工具:statsmodels 库介绍
  • Python vs Stata vs R 语法对比
  • 理解回归输出的关键指标

你将学会

python
import statsmodels.api as sm

# 3 行代码完成回归
X = sm.add_constant(data[['education', 'experience']])
model = sm.OLS(data['wage'], X).fit()
print(model.summary())

第 2 节:OLS 回归详解

学习时长:1.5 小时

  • 从简单回归到多元回归
  • �� 深入理解回归输出:R²、F 统计量、t 统计量、p 值
  • 案例:研究教育回报率(Mincer 方程)
  • ️ 提取回归结果:系数、标准误、置信区间
  • 模型诊断:残差分析、多重共线性

核心概念

  • Mincer 方程:经济学中最经典的工资方程
  • 教育回报率:每多受一年教育,工资平均增加 8-12%
  • 控制变量:如何加入性别、城市、行业等控制变量

实战技能

python
# 提取回归系数
coef = model.params['education']
se = model.bse['education']
pvalue = model.pvalues['education']

# 95% 置信区间
conf_int = model.conf_int(alpha=0.05)

# 预测
predictions = model.predict(new_data)

第 3 节:Logit 回归 - 二元因变量模型

学习时长:1.5 小时

  • 什么时候用 Logit/Probit?
  • Logit 模型的数学原理
  • 案例:影响大学录取的因素
  • 解读系数:对数几率比 vs 边际效应
  • 与 Stata/R 的 logit 命令对比

典型应用场景

研究问题因变量自变量示例
是否上大学上大学=1, 否=0家庭收入、父母教育、SAT 分数
是否找到工作就业=1, 失业=0教育、经验、性别、所在地
是否违约违约=1, 否=0信用分数、收入、负债率
是否投票投票=1, 否=0年龄、教育、收入、政治倾向

核心技能

python
from statsmodels.formula.api import logit

# Logit 回归
model = logit('admitted ~ gpa + sat + income', data=df).fit()

# 边际效应(最重要!)
marginal_effects = model.get_margeff()
print(marginal_effects.summary())

# 预测概率
prob = model.predict(new_data)

边际效应解读

  • 系数不能直接解释(因为是对数几率)
  • 边际效应:自变量变化 1 单位,因变量概率变化多少
  • 例如:GPA 每提高 0.1,录取概率提高 5.2 个百分点

第 4 节:summary_col - 优雅地对比多个模型

学习时长:1 小时

  • 学术论文标准:并列展示多个模型
  • 使用 summary_col() 生成回归表格
  • 与 Stata 的 esttab、R 的 stargazer 对比
  • 自定义输出:星号标注显著性、添加统计量

为什么需要对比模型?

在顶级期刊(AER、QJE、JPE)中,标准做法是展示 3-6 个渐进式模型

模型包含变量目的
Model 1只有核心解释变量展示基础关系
Model 2+ 基本控制变量控制混杂因素
Model 3+ 更多控制变量稳健性检验
Model 4+ 固定效应控制不可观测异质性

实战示例

python
from statsmodels.iolib.summary2 import summary_col

# 建立 4 个渐进式模型
model1 = sm.OLS(y, X1).fit()
model2 = sm.OLS(y, X2).fit()
model3 = sm.OLS(y, X3).fit()
model4 = sm.OLS(y, X4).fit()

# 一键生成对比表格
table = summary_col([model1, model2, model3, model4],
                    stars=True,  # 添加显著性星号
                    float_format='%.3f',
                    model_names=['(1)', '(2)', '(3)', '(4)'],
                    info_dict={'N': lambda x: f"{int(x.nobs):,}",
                              'R-squared': lambda x: f"{x.rsquared:.3f}"})
print(table)

输出效果

================================================================
                   (1)      (2)      (3)      (4)
----------------------------------------------------------------
education       450.000*** 380.000*** 320.000*** 310.000***
               (25.000)  (22.000)  (20.000)  (19.000)
experience                50.000***  45.000***  42.000***
                         (5.000)   (4.800)   (4.500)
female                             -800.000***-750.000***
                                   (100.000) (95.000)
urban                                         400.000***
                                             (80.000)
----------------------------------------------------------------
N               1,000    1,000    1,000    1,000
R-squared       0.450    0.520    0.580    0.600
================================================================
Standard errors in parentheses.
* p<0.1, ** p<0.05, ***p<0.01

️ 核心工具与技术栈

必备 Python 库

用途安装命令
pandas数据处理pip install pandas
numpy数值计算pip install numpy
statsmodels统计建模(本章核心)pip install statsmodels
matplotlib数据可视化pip install matplotlib
seaborn高级可视化pip install seaborn

statsmodels 核心功能

python
import statsmodels.api as sm
from statsmodels.formula.api import ols, logit, probit

# 1. OLS 回归(矩阵形式)
model = sm.OLS(y, X).fit()

# 2. OLS 回归(公式形式,类似 R)
model = ols('wage ~ education + experience', data=df).fit()

# 3. Logit 回归
model = logit('admitted ~ gpa + sat', data=df).fit()

# 4. Probit 回归
model = probit('admitted ~ gpa + sat', data=df).fit()

# 5. 加权最小二乘(WLS)
model = sm.WLS(y, X, weights=weights).fit()

# 6. 广义线性模型(GLM)
model = sm.GLM(y, X, family=sm.families.Binomial()).fit()

本章案例数据集

案例 1:教育回报率研究(Mincer 方程)

  • 样本量:1,000 个观测
  • 变量
    • 因变量:wage(工资,元)
    • 核心解释变量:education(受教育年限)
    • 控制变量:experience(工作经验年限)、female(性别)、urban(城市/农村)
  • 研究问题:教育每多一年,工资提高多少?

案例 2:大学录取影响因素(Logit 模型)

  • 样本量:500 个申请者
  • 变量
    • 因变量:admitted(是否录取,1=是,0=否)
    • 解释变量:gpa(GPA 成绩)、sat(SAT 分数)、extracurricular(课外活动数量)、income(家庭收入)
  • 研究问题:什么因素影响大学录取概率?

案例 3:渐进式模型对比(summary_col 应用)

  • 样本量:1,000 个观测
  • 模型对比
    • Model 1:仅教育变量
    • Model 2:+ 工作经验
    • Model 3:+ 性别
    • Model 4:+ 城市/农村
  • 目的:展示如何像顶级期刊一样呈现回归结果

学习路径建议

推荐学习顺序(总计 4-6 小时)

第 1 节(30 分钟)

运行第一个回归,建立信心

第 2 节(1.5 小时)

深入理解 OLS,掌握核心技能

第 3 节(1.5 小时)

学习 Logit 模型,扩展工具箱

第 4 节(1 小时)

学会专业展示回归结果

完成本章!

每节学习建议

  1. 先看理论:理解回归的基本原理(15 分钟)
  2. 运行代码:在网页内执行所有代码示例(30 分钟)
  3. 修改参数:尝试改变变量、样本量,观察结果变化(15 分钟)
  4. 对比 Stata/R:如果你会 Stata 或 R,对比语法差异(15 分钟)
  5. 完成练习:每节末尾的编程练习(30 分钟)

前置知识要求

必备技能

  • Python 基础

    • 变量、数据类型、列表、字典
    • 函数定义与调用
    • 条件判断(if/else)和循环(for/while)
    • 如果不熟悉,建议先学习 Module 1: Python 编程入门
  • pandas 基础

    • 读取 CSV 文件:pd.read_csv()
    • 数据选择:df['column']df[['col1', 'col2']]
    • 数据筛选:df[df['age'] > 30]
    • 不熟悉可以边学边查文档

统计学基础(建议但非必需)

  • 了解均值、方差、标准差的概念
  • 知道什么是相关系数
  • 听说过"显著性检验"和"p 值"
  • 不懂也没关系:本章会用通俗语言解释所有统计概念

你不需要会的

  • 高等数学(线性代数、微积分)
  • 复杂的统计理论
  • Stata 或 R(但会的话可以对比学习)

学习成果检验

完成本章后,你应该能够:

理论理解

  • [ ] 解释 OLS 回归的基本原理
  • [ ] 说明什么时候用 Logit/Probit 而不是 OLS
  • [ ] 理解 R²、p 值、置信区间的含义
  • [ ] 知道如何判断回归系数是否显著

编程技能

  • [ ] 使用 statsmodels 进行 OLS 回归
  • [ ] 使用 statsmodels 进行 Logit 回归
  • [ ] 提取回归系数、标准误、p 值
  • [ ] 计算边际效应(Logit 模型)
  • [ ] 使用 summary_col 对比多个模型

实战能力

  • [ ] 独立完成一个完整的回归分析项目
  • [ ] 像学术论文一样展示回归结果
  • [ ] 解读回归输出并得出结论
  • [ ] 识别常见的回归陷阱(多重共线性、内生性)

下一步学习

完成本章后,你可以继续学习:

  1. Module 2: 反事实与 RCT - 学习因果推断的基础框架
  2. Module 3: 数据清洗与变量构造 - 掌握实证研究的数据处理技能
  3. Module 5: 回归分析进阶 - 学习异方差、自相关、内生性等高级话题
  4. Module 9: 双重差分(DID) - 掌握经济学顶级期刊最常用的因果识别方法

参考资料

推荐教材

  1. Wooldridge, J. M. (2020). Introductory Econometrics: A Modern Approach (7th ed.). Cengage Learning.

    • 最经典的计量经济学教材,适合初学者
  2. Angrist, J. D., & Pischke, J. S. (2009). Mostly Harmless Econometrics. Princeton University Press.

    • 实证研究必读,深入浅出讲解因果推断
  3. Stock, J. H., & Watson, M. W. (2020). Introduction to Econometrics (4th ed.). Pearson.

    • 另一本经典教材,配有丰富的实证案例

Python 官方文档

经典论文(使用回归分析)

  1. Mincer, J. (1974). "Schooling, Experience, and Earnings." NBER.

    • 教育回报率研究的奠基之作
  2. Card, D., & Krueger, A. B. (1994). "Minimum Wages and Employment." American Economic Review.

    • 使用 DID 方法研究最低工资对就业的影响

学习建议

给初学者的话

"回归分析看起来复杂,但本质很简单:找出变量之间的关系。不要被数学公式吓到,专注于理解直觉,代码会帮你完成计算。"

给有 Stata/R 经验的学习者

"Python 的回归语法与 Stata/R 非常相似。本章会详细对比三者的差异,帮助你快速迁移。statsmodels 的输出格式几乎与 Stata 一模一样!"

给想做实证研究的学生

"掌握本章内容后,你就具备了阅读 80% 经济学、社会学论文的技能。回归分析是实证研究的基石,无论你将来做什么研究,这些技能都不会过时。"


开始学习

准备好了吗?让我们从第一节开始,5 分钟内运行你的第一个 Python 回归模型!


统计学习之旅,从这里开始!

基于 MIT 许可证发布。内容版权归作者所有。