Page QiView

计量经济学

计量经济学

📚 陈强《高级计量经济学》系统学习笔记

📖 前言

📝 学习目标

  • 系统掌握计量经济学的理论基础与推导过程
  • 理解各种估计方法的假设条件与经济含义
  • 能够正确运用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. 数据收集与处理: 获取并清洗相关观测数据
  3. 参数估计: 使用统计方法估计模型参数
  4. 模型检验: 检验模型的假设与拟合优度
  5. 结果解释与应用: 解释估计结果的经济含义

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} = \mathbf{X}\boldsymbol{\beta} + \boldsymbol{\varepsilon} $$

其中:

  • $\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估计量为:

$$ \hat{\boldsymbol{\beta}} = (\mathbf{X}^{\prime}\mathbf{X})^{-1}\mathbf{X}^{\prime}\mathbf{y} $$

推导过程:最小化残差平方和 $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矩阵计算

Python 复制代码
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):

  1. 线性于参数: $y = \mathbf{x}\boldsymbol{\beta} + \varepsilon$
  2. 随机抽样: $\{(\mathbf{x}_i, y_i): i=1,\ldots,n\}$ 是i.i.d.样本
  3. 无完全共线性: $\text{rank}(\mathbf{X}) = k+1$
  4. 零条件均值: $E(\varepsilon|\mathbf{X}) = 0$
  5. 同方差性: $\text{Var}(\varepsilon|\mathbf{X}) = \sigma^2$

BLUE的含义:在所有的线性无偏估计量中,OLS的方差最小。

定义 3.1:估计量的方差-协方差矩阵

在经典假设下,OLS估计量的方差-协方差矩阵为:

$$ \text{Var}(\hat{\boldsymbol{\beta}}|\mathbf{X}) = \sigma^2 (\mathbf{X}^{\prime}\mathbf{X})^{-1} $$

其中 $\sigma^2$ 的估计量为:

$$ \hat{\sigma}^2 = \frac{\text{RSS}}{n-k-1} = \frac{\sum_{i=1}^n \hat{\varepsilon}_i^2}{n-k-1} $$

第 $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中的假设检验

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

⚠️ 注意事项

  1. 多重检验问题: 同时检验多个假设时,第一类错误概率会增加,可考虑Bonferroni校正
  2. 异方差的影响: 当同方差假设不成立时,传统的t/F检验可能失效,应使用稳健标准误
  3. 样本量要求: t检验要求误差项正态分布或大样本,F检验对正态性假设更敏感
  4. 统计显著 vs 经济显著: p值显著不代表经济意义重大,需结合系数大小解释

第4章 异方差与自相关

4.1 异方差问题

定义 4.1:异方差性

当误差项的方差随解释变量变化时,称为异方差:

$$ \text{Var}(\varepsilon_i|\mathbf{x}_i) = \sigma_i^2 \neq \text{常数} $$

后果

  • 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语言处理异方差

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:内生性

当解释变量与误差项相关时,称为内生性问题:

$$ \text{Cov}(x_j, \varepsilon) \neq 0 $$

主要来源

  1. 遗漏变量:同时影响解释变量和因变量的变量未被控制
  2. 测量误差:解释变量存在测量误差
  3. 双向因果:因变量反过来影响解释变量
  4. 样本选择:样本非随机选择导致的偏差

5.1 工具变量法(IV)原理

定理 5.1:工具变量的条件

有效的工具变量 $z$ 必须满足:

  1. 相关性:$\text{Cov}(z, x) \neq 0$
  2. 外生性:$\text{Cov}(z, \varepsilon) = 0$

两阶段最小二乘法(2SLS)

  1. 第一阶段:$x = \pi_0 + \pi_1 z + \nu$,得到预测值 $\hat{x}$
  2. 第二阶段:$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中的工具变量法

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 "结论:不能拒绝原假设")

⚠️ 工具变量法的注意事项

  1. 弱工具变量问题:弱工具变量会导致2SLS估计量有偏且非正态,需谨慎检验第一阶段F统计量
  2. 局部平均处理效应(LATE):IV估计的是"依从者"的处理效应,不一定等于平均处理效应(ATE)
  3. 外生性不可直接检验:在恰好识别情况下,工具变量的外生性无法直接检验,需依赖理论论证
  4. 有限信息与完全信息法: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

📚 参考文献

  1. 陈强 (2014). 高级计量经济学及Stata应用 (第二版). 高等教育出版社.
  2. Wooldridge, J. M. (2016). Introductory Econometrics: A Modern Approach (6th ed.). Cengage Learning.
  3. Angrist, J. D., & Pischke, J. S. (2009). Mostly Harmless Econometrics: An Empiricist’s Companion. Princeton University Press.
  4. Greene, W. H. (2018). Econometric Analysis (8th ed.). Pearson.
  5. Hayashi, F. (2000). Econometrics. Princeton University Press.

🔗 相关资源链接


最后更新:2024年12月05日