5 min read

GMM模型理解

很老的笔记,总结一下。

供需求函数

\[\begin{cases} q_t^D &= \alpha_0 + \alpha_1 p_t + u_t\\ q_t^S &= \beta_0 + \beta_1 p_t + v_t\\ q_t^D &= q_t^S\\ \end{cases}\]

这是供需求函数,我们肯定不能直接用\(q_t = \alpha_0 + \alpha_1 p_t + u_t\)去跑回归。 因为我们首先不知道这是代表供给还是需求函数,实际上谁也不是。

\[\begin{cases} q_t &= \alpha_0 + \alpha_1 p_t + u_t \\ q_t &= \beta_0 + \beta_1 p_t + v_t \\ \end{cases}\]

解得:

\[\begin{alignat}{2} p_t &= \frac{\beta_0-\alpha_0}{\beta_1-\alpha_1} + \frac{v_t-u_t}{\beta_1-\alpha_1}\\ p_t &\sim v_t,u_t\\ \end{alignat}\]

我们知道,当\(x\)\(\mu\)线性相关,\(x\)就是内生了(陈强 2014)

这个时候我们需要引入 工具变量,假设是天气\(x_t\)

工具变量的两个条件:

  • 在供给方程中,天气影响\(p_t\)的,因此\(Cov(p_t,x_t) \neq 0\)1
  • \(x_t\)\(u_t,v_t\)都不像相关,天气是外生的,除了自身,不受到其他变量决定。

重新写供给函数

\[\begin{cases} q_t^S &= \beta_0 + \beta_1 p_t + \beta x_t + v_t\\ q_t^S &= \beta_0 + \beta_1 p_t \xleftarrow{\rho > 0} \beta x_t \xrightarrow{\times} v_t\\ \end{cases}\]

所以,

这里涉及到 2SLS

第一步,

\[\begin{alignat}{2} p_t &= \gamma_0 + \gamma_1 x_t + \delta_t\\ p_t &= \hat{p_t}(x_t) + \hat{\delta}_t\\ \end{alignat}\]

第二步,

\[\begin{cases} q_t &= \alpha_0 + \alpha_1 \hat{p_t} + u_t + \alpha_1 (p_t - \hat{p_t}) \\ q_t &= \beta_0 + \beta_1 \hat{p_t} + v_t + \beta_1 (p_t - \hat{p_t}) \\ \end{cases}\]

\[\begin{cases} q_t &= \alpha_0 + \alpha_1 (\hat \gamma_0 + \hat \gamma_1 x_t) + u_t + \alpha_1 (p_t - \hat{p_t}) \\ q_t &= \beta_0 + \beta_1 (\hat \gamma_0 + \hat \gamma_1 x_t) + v_t + \beta_1 (p_t - \hat{p_t}) \\ \end{cases}\]

然后就可以回归了。

矩估计

  • 一矩:\(E(x) = \mu\)
  • 二矩:\(E(x^2) = Var(x) + E^2(x) = \sigma^2 + \mu^2\)

如果我们假设\(x \sim N(\mu,\sigma)\),有两个未知数,因此我们需要两个假设,\(\mu\)\(\sigma\),并使用两个方程去估计,就是我们的矩。 通常我们用样本矩来猜测,

\[\begin{cases} \frac{1}{n}\sum_{i=1}^n x_i = \hat \mu\\ \frac{1}{n}\sum_{i=1}^n x_i^2 = \hat{\mu}^2 + \hat{\sigma}^2\\ \end{cases}\]

因此任意的\(f(x)\)都可以叫做矩估计。

这里我们使用第二个假设,

\[\begin{alignat}{2} E(z_i \epsilon_i) &= 0\\ E(z_i (y_i - x_i^{'} \beta)) &= 0\\ E(z_i y_i)&= E(z_i x_i^{'}) \cdot \beta\\ E(z_i x_i^{'})^{-1} E(z_i y_i)&= \beta\\ \end{alignat}\]

我们用样本估计,来估计总体估计!!!

\[\begin{alignat}{2} E(z_i x_i^{'})^{-1} E(z_i y_i)&= \beta\\ \hat \beta &= (\frac{1}{n}\sum_{i=1}^n z_i x_i^{'})^{-1} (\frac{1}{n}\sum_{i=1}^n z_i y_i)\\ \hat \beta &= (z_i x_i^{'})^{-1}(z_i y_i)\\ \end{alignat}\]

样本矩除了\(E(\beta)\),还有\(Var(\beta)\)要估计。

\[\begin{alignat}{2} \hat \beta - \beta &= (z_i x_i^{'})^{-1}z_i(x^{'}\beta+\epsilon) - \beta\\ \hat \beta - \beta &= (z_i x_i^{'})^{-1}z_ix^{'}\beta+(z_i x_i^{'})^{-1}z_i \epsilon - \beta\\ \hat \beta - \beta &= \beta+(z_i x_i^{'})^{-1}z_i \epsilon - \beta\\ \hat \beta - \beta &= (z_i x_i^{'})^{-1}z_i \epsilon\\ \hat \beta - \beta &= (\frac{1}{n}\sum_{i=1}^n z_i x_i^{'})^{-1}(\frac{1}{n}\sum_{i=1}^n z_i \epsilon_i)\\ \hat \beta - \beta &= S_{ZX}^{-1} \bar g\\ \end{alignat}\]

这里假设\(S_{ZX}^{-1} = (\frac{1}{n}\sum_{i=1}^n z_i x_i^{'})^{-1}\)\(\bar g = (\frac{1}{n}\sum_{i=1}^n z_i \epsilon_i)\)

因此用样本估计估计总体估计时, 我们假设在大样本的情况下,

\(S_{ZX}^{-1} \bar g \xrightarrow{大样本} E(S_{ZX}^{-1} \bar g) = E(S_{ZX}^{-1})E(\bar g) = E(S_{ZX}^{-1}) \cdot 0 = 0\)

注意这里\(E(S_{ZX}^{-1})\)是一个数,所以可以分离。

所以\(E(\hat \beta - \beta) = 0 \to E(\hat \beta) = \beta\)

\[\begin{alignat}{2} Avar(\hat \beta) &= E((\hat \beta - \beta)^2)\\ &=E((S_{ZX}^{-1} \bar g)^2)\\ \cdots \end{alignat}\]

这里有比较简单的推导方法。

第一个方程是 \[\begin{alignat}{2} x &\sim z\\ \hat \gamma &= (z^{'}z)^{-1}z^{'}x\\ \hat x &= z \hat \gamma\\ &=z[(z^{'}z)^{-1}z^{'}x]\\ &=[z(z^{'}z)^{-1}z^{'}]x &=px\\ \end{alignat}\]

同理 \[\begin{alignat}{2} \hat \beta &= (\hat x \hat x)^{-1}\hat x y\\ \hat \beta &= (x^{'}P^{'}Px)^{-1}\hat x y\\ \hat \beta &= (x^{'}Px)^{-1}\hat x y\\ \hat \beta &= (x^{'}\hat x)^{-1}\hat x y\\ \hat \beta &= (zx)^{-1}zy\\ \end{alignat}\]

full rank 就是矩估计的条件

能够作为工具变量的变量数量不能少于内生变量的数量。

弱工具变量检验

Shea’s partial \(R^2\)

假设\(y = x_1^{'} \beta_1 + x_2 \beta_2 + \mu\),其中只有\(x_2\)是内生的,工具变量为\(z_2\)。 做回归 \(x_2 \sim x_1^{'} \to e_1\)\(z_2 \sim x_1^{'} \to e_2\)。 其中\(e_1\)\(e_2\)分别衡量了\(x_2\)\(z_2\)除了\(x_1^{'}\)以外的其他波动。 再做\(e_1 \sim e_2 \to R_p^2\),如果\(R_p^2\)大,说明不是弱工具变量。

过度识别检验

\(z\)的数量超过内生的\(x\)数量。 只有这样\(E(z\epsilon)=0\),否则不满足 因此,我们假设有K个\(x\),r个是内生的,\(z\)有 m个,因此回归,

\[\epsilon \sim x_1 + \cdots + x_{K-r} + z_1 + \cdots z_m + error\] 如果得到的\(R^2\)大,或者说\(nR^2\)比较于\(\Theta^2(m-r)\)而大的话,那么\(E(z\epsilon)=0\)的条件就不满足了。 因此要求\(R^2\)尽可能低,即P值要小。

GMM

GMM是过度识别的时候使用,因为\(n(x) < n(z)\)。 这个时候\(\frac{1}{n}\sum_{i=1}^n z_i(y_i-x^{'} \hat \beta)\)不能等于0了,无解,但是可以使其平方最小。

一步还是两步

一步是满足同方差假设的,所以还是用两步吧。

弱工具变量容易有偏

\[y = 1 + 2x + \mu\]

强工具变量

\[x = 0.5z + 0.2\mu + 0.1v\]

弱工具变量

\[x = 0.01z + 0.2\mu + 0.1v\]

library(tidyverse)
beta_cb1 <- 1:100
beta_cb2 <- 1:100
a <- data_frame(
  mu = rnorm(100),
  v  = rnorm(100),
  z  = rnorm(100)
)
## Warning: `data_frame()` is deprecated as of tibble 1.1.0.
## Please use `tibble()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.
for (i in 1:100){
  
b <- 
  as.data.frame(resample_bootstrap(a)) %>% 
  mutate(
    x1 = 0.5*z + 0.2*mu + 0.1*v,
    x2 = 0.01*z + 0.2*mu + 0.1*v,
    y1 = 1 + 2*x1 + mu,
    y2 = 1 + 2*x2 + mu
  ) %>% 
  summarise(
    beta1 = sum(z*y1)/sum(z*x1),
    beta2 = sum(z*y2)/sum(z*x2)
  )
beta_cb1[i] <- b[1,1]
beta_cb2[i] <- b[1,2]
}
data_frame(
  beta1 = beta_cb1 %>% unlist(),
  beta2 = beta_cb2 %>% unlist()
) %>% 
  gather() %>% 
  ggplot(aes(x = value, y = ..density..,col = key)) + 
    geom_freqpoly() +
    labs(
      x = "预测的beta值,真实为2",
      y = "频率",
      subtitle = "弱工具变量在小样本下很容易不对称,有偏",
      title = "弱工具变量比较"
    ) +
  theme_minimal() +
  theme(text = element_text(family = "STKaiti"))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): Windows字体数据
## 库里没有这样的字体系列
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): Windows字体数据
## 库里没有这样的字体系列
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## Windows字体数据库里没有这样的字体系列
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): Windows字体数据
## 库里没有这样的字体系列
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## Windows字体数据库里没有这样的字体系列

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## Windows字体数据库里没有这样的字体系列

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## Windows字体数据库里没有这样的字体系列

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## Windows字体数据库里没有这样的字体系列

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## Windows字体数据库里没有这样的字体系列

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## Windows字体数据库里没有这样的字体系列

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## Windows字体数据库里没有这样的字体系列

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## Windows字体数据库里没有这样的字体系列

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## Windows字体数据库里没有这样的字体系列

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## Windows字体数据库里没有这样的字体系列

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## Windows字体数据库里没有这样的字体系列
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## Windows字体数据库里没有这样的字体系列
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## Windows字体数据库里没有这样的字体系列

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## Windows字体数据库里没有这样的字体系列

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## Windows字体数据库里没有这样的字体系列

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
## Windows字体数据库里没有这样的字体系列

陈强. 2014. 高级计量经济学及Stata应用.第2版. 高等教育出版社.