计量经济学
📚 陈强《高级计量经济学》系统学习笔记
📖 前言
📝 学习目标
- 系统掌握计量经济学的理论基础与推导过程
- 理解各种估计方法的假设条件与经济含义
- 能够正确运用Stata/R/Python进行实证分析
- 培养严谨的因果推断思维框架
📌 学习资源
- 主要教材: 陈强《高级计量经济学及Stata应用》(第二版)
- 辅助教材: Wooldridge《计量经济学导论》、Angrist《基本无害的计量经济学》
- 软件工具: Stata 17, Python (statsmodels, linearmodels), R
- 学习周期: 2024年12月 - 2025年6月(预计)
📑 第一部分:回归分析基础
第1章 计量经济学导论
1.1 计量经济学的本质
定义 1.1:计量经济学
计量经济学是经济学、统计学和数学的结合,旨在通过建立经济模型,使用观测数据来检验经济理论、评估政策效果并进行经济预测。
核心目标: 从观测数据中识别因果效应,而非仅仅相关关系。
定理 1.1:计量分析的基本框架
任何计量经济学分析都遵循以下步骤:
- 理论模型设定: 基于经济理论建立数学模型
- 数据收集与处理: 获取并清洗相关观测数据
- 参数估计: 使用统计方法估计模型参数
- 模型检验: 检验模型的假设与拟合优度
- 结果解释与应用: 解释估计结果的经济含义
1.2 数据的类型
📊 数据类型分类
| 数据类型 | 特征 | 示例 | 常用模型 |
|---|---|---|---|
| 横截面数据 | 同一时点,不同个体 | 2023年全国企业调查数据 | OLS, Probit, Logit |
| 时间序列数据 | 同一主体,不同时点 | 1990-2023年中国GDP数据 | ARIMA, VAR, GARCH |
| 面板数据 | 不同个体,不同时点 | 2010-2023年各省份经济数据 | FE, RE, 动态面板 |
| 混合横截面 | 不同时点的横截面 | 2020、2023年家庭调查 | Pooled OLS, 时间虚拟变量 |
第2章 数学基础回顾
2.1 矩阵代数在计量中的应用
定义 2.1:矩阵表示法
多元线性回归模型可用矩阵表示为:
其中:
- $\mathbf{y}$: $n \times 1$ 因变量向量
- $\mathbf{X}$: $n \times (k+1)$ 设计矩阵(含常数项)
- $\boldsymbol{\beta}$: $(k+1) \times 1$ 参数向量
- $\boldsymbol{\varepsilon}$: $n \times 1$ 误差项向量
2.2 OLS估计量的矩阵推导
定理 2.1:OLS估计量的矩阵形式
在经典线性回归假设下,OLS估计量为:
推导过程:最小化残差平方和 $S(\boldsymbol{\beta}) = (\mathbf{y} - \mathbf{X}\boldsymbol{\beta})^{\prime}(\mathbf{y} - \mathbf{X}\boldsymbol{\beta})$
一阶条件:$\frac{\partial S}{\partial \boldsymbol{\beta}} = -2\mathbf{X}^{\prime}(\mathbf{y} - \mathbf{X}\boldsymbol{\beta}) = \mathbf{0}$
解得:$\mathbf{X}^{\prime}\mathbf{X}\boldsymbol{\beta} = \mathbf{X}^{\prime}\mathbf{y}$
当 $\mathbf{X}^{\prime}\mathbf{X}$ 可逆时:$\hat{\boldsymbol{\beta}} = (\mathbf{X}^{\prime}\mathbf{X})^{-1}\mathbf{X}^{\prime}\mathbf{y}$
示例 2.1:Python实现OLS矩阵计算
import numpy as np
import pandas as pd
import statsmodels.api as sm
# 生成模拟数据
np.random.seed(123)
n = 100
X = np.random.randn(n, 3)
X = sm.add_constant(X) # 添加常数项
beta_true = np.array([1.5, 2.0, -1.0, 0.5])
epsilon = np.random.randn(n) * 0.5
y = X @ beta_true + epsilon
# 方法1:矩阵直接计算
def ols_matrix_method(X, y):
"""使用矩阵公式计算OLS系数"""
XTX_inv = np.linalg.inv(X.T @ X)
beta_hat = XTX_inv @ X.T @ y
return beta_hat
# 方法2:使用statsmodels
def ols_statsmodels(X, y):
"""使用statsmodels进行OLS回归"""
model = sm.OLS(y, X)
results = model.fit()
return results
# 比较结果
beta_matrix = ols_matrix_method(X, y)
model_sm = ols_statsmodels(X, y)
beta_sm = model_sm.params
print("真实参数:", beta_true)
print("矩阵法估计:", beta_matrix)
print("Statsmodels估计:", beta_sm.values)
print("\n系数比较(最大绝对差):", np.max(np.abs(beta_matrix - beta_sm)))
📈 第二部分:经典假设与统计推断
第3章 经典线性回归模型
3.1 高斯-马尔可夫假设
定理 3.1:高斯-马尔可夫定理
在以下经典假设下,OLS估计量是最佳线性无偏估计量(BLUE):
- 线性于参数: $y = \mathbf{x}\boldsymbol{\beta} + \varepsilon$
- 随机抽样: $\{(\mathbf{x}_i, y_i): i=1,\ldots,n\}$ 是i.i.d.样本
- 无完全共线性: $\text{rank}(\mathbf{X}) = k+1$
- 零条件均值: $E(\varepsilon|\mathbf{X}) = 0$
- 同方差性: $\text{Var}(\varepsilon|\mathbf{X}) = \sigma^2$
BLUE的含义:在所有的线性无偏估计量中,OLS的方差最小。
定义 3.1:估计量的方差-协方差矩阵
在经典假设下,OLS估计量的方差-协方差矩阵为:
其中 $\sigma^2$ 的估计量为:
第 $j$ 个系数的标准误为:$\text{SE}(\hat{\beta}_j) = \sqrt{\hat{\sigma}^2 [(\mathbf{X}^{\prime}\mathbf{X})^{-1}]_{jj}}$
3.2 假设检验
🔍 三种常见的假设检验
| 检验类型 | 原假设 | 检验统计量 | 适用场景 |
|---|---|---|---|
| t检验 | $H_0: \beta_j = c$ | $t = \frac{\hat{\beta}_j - c}{\text{SE}(\hat{\beta}_j)}$ | 单个系数的显著性检验 |
| F检验 | $H_0: \beta_j = 0, \forall j \in Q$ | $F = \frac{(R^2_{ur} - R^2_r)/q}{(1-R^2_{ur})/(n-k-1)}$ | 多个线性约束的联合检验 |
| 似然比检验 | 嵌套模型比较 | $\text{LR} = 2(\ell_{ur} - \ell_r)$ | 大样本下的一般性检验 |
示例 3.1:Stata中的假设检验
* 加载数据
sysuse auto, clear
* 基础回归
regress price mpg weight length
* 1. 单个系数的t检验(自动输出)
* 检验mpg系数是否显著不为0(已输出)
* 2. 检验mpg系数是否等于-100
test mpg = -100
* 3. 联合检验:mpg和weight的系数都为0
test mpg weight
* 4. 线性约束检验:mpg系数 + weight系数 = 0
test mpg + weight = 0
* 5. 异方差稳健标准误下的检验
regress price mpg weight length, robust
test mpg weight // 使用稳健标准误进行检验
* 6. 存储回归结果并计算自定义统计量
regress price mpg weight length
scalar t_stat = _b[mpg]/_se[mpg]
scalar p_value = 2*ttail(e(df_r), abs(t_stat))
display "mpg的t统计量: " t_stat
display "对应的p值: " p_value
⚠️ 注意事项
- 多重检验问题: 同时检验多个假设时,第一类错误概率会增加,可考虑Bonferroni校正
- 异方差的影响: 当同方差假设不成立时,传统的t/F检验可能失效,应使用稳健标准误
- 样本量要求: t检验要求误差项正态分布或大样本,F检验对正态性假设更敏感
- 统计显著 vs 经济显著: p值显著不代表经济意义重大,需结合系数大小解释
第4章 异方差与自相关
4.1 异方差问题
定义 4.1:异方差性
当误差项的方差随解释变量变化时,称为异方差:
后果:
- OLS估计量仍是无偏的
- 标准误估计有偏,导致t/F检验失效
- OLS不再是最优线性无偏估计
📋 异方差的检验方法
| 检验方法 | 原假设 | 统计量 | 适用条件 |
|---|---|---|---|
| White检验 | 同方差 | $nR^2 \sim \chi^2_q$ | 一般形式,无具体函数形式 |
| BP检验 | 同方差 | $nR^2 \sim \chi^2_p$ | 已知方差函数形式 |
| Goldfeld-Quandt检验 | 同方差 | $F = \frac{\text{RSS}_2}{\text{RSS}_1}$ | 可排序样本 |
| 图示法 | - | 残差图 | 直观判断 |
示例 4.1:R语言处理异方差
# 加载包
library(lmtest)
library(sandwich)
library(ggplot2)
# 示例数据
set.seed(123)
n <- 100
x <- runif(n, 1, 10)
# 异方差数据生成:方差随x增大而增大
y <- 2 + 3*x + rnorm(n, 0, 0.5*x)
# 1. OLS回归
model <- lm(y ~ x)
summary(model)
# 2. 异方差检验
# White检验(一般形式)
white_test <- bptest(model, ~ x + I(x^2))
cat("White检验p值:", white_test$p.value, "\n")
# BP检验
bp_test <- bptest(model)
cat("BP检验p值:", bp_test$p.value, "\n")
# 残差图诊断
residuals_df <- data.frame(
fitted = fitted(model),
residuals = residuals(model),
x = x
)
ggplot(residuals_df, aes(x = fitted, y = residuals)) +
geom_point(alpha = 0.6) +
geom_hline(yintercept = 0, linetype = "dashed", color = "red") +
labs(title = "残差 vs 拟合值图",
subtitle = "漏斗形状提示异方差") +
theme_minimal()
# 3. 异方差稳健标准误
# HC0-HC4类型稳健标准误
coeftest(model, vcov = vcovHC(model, type = "HC0"))
coeftest(model, vcov = vcovHC(model, type = "HC3")) # 小样本推荐
# 4. 加权最小二乘法(WLS)
# 假设方差与x成比例
w <- 1/x^2 # 权重与方差成反比
model_wls <- lm(y ~ x, weights = w)
summary(model_wls)
🔗 第三部分:内生性问题(核心内容)
第5章 内生性与工具变量法
定义 5.1:内生性
当解释变量与误差项相关时,称为内生性问题:
主要来源:
- 遗漏变量:同时影响解释变量和因变量的变量未被控制
- 测量误差:解释变量存在测量误差
- 双向因果:因变量反过来影响解释变量
- 样本选择:样本非随机选择导致的偏差
5.1 工具变量法(IV)原理
定理 5.1:工具变量的条件
有效的工具变量 $z$ 必须满足:
- 相关性:$\text{Cov}(z, x) \neq 0$
- 外生性:$\text{Cov}(z, \varepsilon) = 0$
两阶段最小二乘法(2SLS):
- 第一阶段:$x = \pi_0 + \pi_1 z + \nu$,得到预测值 $\hat{x}$
- 第二阶段:$y = \beta_0 + \beta_1 \hat{x} + \varepsilon$
2SLS估计量:$\hat{\beta}_{IV} = (\hat{\mathbf{X}}^{\prime}\mathbf{X})^{-1}\hat{\mathbf{X}}^{\prime}\mathbf{y}$,其中 $\hat{\mathbf{X}} = \mathbf{Z}(\mathbf{Z}^{\prime}\mathbf{Z})^{-1}\mathbf{Z}^{\prime}\mathbf{X}$
🎯 工具变量的检验
| 检验类型 | 目的 | 统计量 | 判断标准 |
|---|---|---|---|
| 弱工具变量检验 | 检验相关性条件 | $F > 10$ (经验法则) | Cragg-Donald F统计量 |
| 过度识别检验 | 检验外生性条件(需过度识别) | $J \sim \chi^2_{m-k}$ | Sargan/Hansen检验 |
| 内生性检验 | 检验是否存在内生性 | $DWH \sim \chi^2_1$ | Durbin-Wu-Hausman检验 |
示例 5.1:Python中的工具变量法
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.sandbox.regression.gmm import IV2SLS
import linearmodels.iv as iv
import warnings
warnings.filterwarnings('ignore')
# 生成模拟数据(存在内生性)
np.random.seed(123)
n = 500
# 工具变量z,与内生变量x相关,但与误差项不相关
z = np.random.normal(0, 1, n)
# 内生变量x(受z和误差项v影响)
v = np.random.normal(0, 1, n) # x的误差项
x = 0.5 + 0.8*z + v # 第一阶段:z影响x
# 结构方程误差项,与v相关(导致内生性)
epsilon = 0.7*v + np.random.normal(0, 1, n) # 内生性来源:Cov(x, epsilon) ≠ 0
# 因变量y
y = 2 + 3*x + epsilon
# 创建DataFrame
df = pd.DataFrame({
'y': y,
'x': x,
'z': z,
'const': 1
})
# 1. OLS估计(有偏)
ols_model = sm.OLS(df['y'], df[['const', 'x']]).fit()
print("=== OLS估计结果(有偏)===")
print(ols_model.summary().tables[1])
# 2. 2SLS估计(使用statsmodels)
# 方法1:使用IV2SLS
from statsmodels.sandbox.regression.gmm import IV2SLS
iv_model_sm = IV2SLS(df['y'], df[['const']], df[['x']], df[['const', 'z']]).fit()
print("\n=== 2SLS估计结果(statsmodels)===")
print(iv_model_sm.summary())
# 方法2:使用linearmodels(更专业的计量经济学包)
from linearmodels.iv import IV2SLS
formula = 'y ~ 1 + [x ~ z]' # 1表示常数项,[x ~ z]表示x是内生变量,z是工具变量
iv_model_lm = IV2SLS.from_formula(formula, df).fit(cov_type='robust')
print("\n=== 2SLS估计结果(linearmodels)===")
print(iv_model_lm.summary)
# 3. 第一阶段回归
first_stage = sm.OLS(df['x'], df[['const', 'z']]).fit()
print("\n=== 第一阶段回归 ===")
print("系数估计:", first_stage.params)
print("F统计量:", first_stage.fvalue)
print("R-squared:", first_stage.rsquared)
# 4. 弱工具变量检验(经验法则:F > 10)
print("\n=== 弱工具变量检验 ===")
print(f"第一阶段F统计量: {first_stage.fvalue:.2f}")
print("判断:F > 10" if first_stage.fvalue > 10 else "警告:可能存在弱工具变量问题")
# 5. Hausman内生性检验
# 比较OLS和2SLS系数差异
from scipy.stats import chi2
beta_ols = ols_model.params['x']
beta_iv = iv_model_lm.params['x']
var_ols = ols_model.cov_params().loc['x', 'x']
var_iv = iv_model_lm.cov.loc['x', 'x']
hausman_stat = (beta_iv - beta_ols)**2 / (var_iv - var_ols)
p_value = 1 - chi2.cdf(hausman_stat, 1)
print(f"\n=== Hausman内生性检验 ===")
print(f"统计量: {hausman_stat:.4f}, p值: {p_value:.4f}")
print("结论:拒绝原假设(存在内生性)" if p_value < 0.05 else "结论:不能拒绝原假设")
⚠️ 工具变量法的注意事项
- 弱工具变量问题:弱工具变量会导致2SLS估计量有偏且非正态,需谨慎检验第一阶段F统计量
- 局部平均处理效应(LATE):IV估计的是"依从者"的处理效应,不一定等于平均处理效应(ATE)
- 外生性不可直接检验:在恰好识别情况下,工具变量的外生性无法直接检验,需依赖理论论证
- 有限信息与完全信息法:2SLS是有限信息法,3SLS是完全信息法,后者更有效率但要求模型设定正确
📝 关键公式索引
| 公式名称 | 表达式 | 所在章节 |
|---|---|---|
| OLS估计量(矩阵) | $\hat{\boldsymbol{\beta}} = (\mathbf{X}^{\prime}\mathbf{X})^{-1}\mathbf{X}^{\prime}\mathbf{y}$ | 2.2 |
| 方差-协方差矩阵 | $\text{Var}(\hat{\boldsymbol{\beta}}|\mathbf{X}) = \sigma^2 (\mathbf{X}^{\prime}\mathbf{X})^{-1}$ | 3.1 |
| t统计量 | $t_j = \frac{\hat{\beta}j - \beta{j0}}{\text{SE}(\hat{\beta}j)} \sim t{n-k-1}$ | 3.2 |
| F统计量 | $F = \frac{(R^2_{ur} - R^2_r)/q}{(1-R^2_{ur})/(n-k-1)} \sim F_{q, n-k-1}$ | 3.2 |
| White检验统计量 | $nR^2 \sim \chi^2_q$ | 4.1 |
| 2SLS估计量 | $\hat{\beta}_{IV} = (\hat{\mathbf{X}}^{\prime}\mathbf{X})^{-1}\hat{\mathbf{X}}^{\prime}\mathbf{y}$ | 5.1 |
| 第一阶段F统计量 | $F = \frac{(TSS_x - RSS_x)/p}{RSS_x/(n-p-1)}$ | 5.1 |
📚 参考文献
- 陈强 (2014). 高级计量经济学及Stata应用 (第二版). 高等教育出版社.
- Wooldridge, J. M. (2016). Introductory Econometrics: A Modern Approach (6th ed.). Cengage Learning.
- Angrist, J. D., & Pischke, J. S. (2009). Mostly Harmless Econometrics: An Empiricist’s Companion. Princeton University Press.
- Greene, W. H. (2018). Econometric Analysis (8th ed.). Pearson.
- Hayashi, F. (2000). Econometrics. Princeton University Press.
🔗 相关资源链接
- Stata官方网站 - 官方文档与教程
- Statsmodels文档 - Python计量经济学库
- 因果推断手册 - 免费在线因果推断教材
- NBER工作论文 - 最新计量经济学研究
最后更新:2024年12月05日