乐趣区

关于算法:R语言工具变量与两阶段最小二乘法

原文链接:http://tecdat.cn/?p=5374

咱们要预计的模型是

其中​是解释变量,​和​是咱们想要预计的系数。x 是控制变量,d 是医治变量。咱们对咱们医治 d 对 y 的影响特地感兴趣。

生成数据

首先,让咱们生成数据。

假如 x,d,z(d 的工具变量)和 e 之间的相关矩阵如下:

##       x     d     z     e
## x 1.000 0.001 0.002 0.001
## d 0.001 1.000 0.700 0.300
## z 0.002 0.700 1.000 0.001
## e 0.001 0.300 0.001 1.000

具体而言,相关性表明

  1. cor(d,e)= 0.3,这意味着 d 是内生的;
  2. cor(d,z)= 0.7,这意味着 z 是 d 的弱小工具变量;
  3. cor(z,e)= 0.001,这意味着工具变量 z 满足排除限度,因为它只通过 d 影响 y。

当初,让咱们应用指定的相关性为,, 和生成数据.xdze

 nvars = dim(U) 1 
numobs = 1000 
 random.normal = matrix(rnorm(nvars*numobs, 0 , nrow=nvars, ncol=numobs);
X = U %*% random.normal
newX = t(X)
data = as.data.frame(newX) 

数据看起来像这样:

##             x          d          z          e
## 1 -0.62645381  0.1830168 -0.4694601  1.7474361
## 2  0.32950777 -0.8201385 -0.2255741  0.2818908
## 3  0.57578135 -0.3048125  0.8670061 -0.1795257
## 4 -0.62124058 -2.2153200 -0.7481687 -1.0350488
## 5 -0.01619026  0.9438195  1.2471197  0.5820200
## 6  0.91897737  0.7830549  0.6025820 -1.5924689

以及数据之间的相关性

##             x          d            z           e
## x  1.00000000 0.00668391 -0.012319595 0.016239235
## d  0.00668391 1.00000000  0.680741763 0.312192680
## z -0.01231960 0.68074176  1.000000000 0.006322354
## e  0.01623923 0.31219268  0.006322354 1.000000000 

正如咱们后面所指出的那样。
当初让咱们指定实在的数据生成过程并生成已解释变量 y

如果咱们伪装不晓得真正的关系,用 x 和 d 来解释 y,咱们对 x 和 d 的正确系数应该靠近 1。否则,咱们的后果就谬误了。

OLS

如果咱们只应用 OLS 来预计系数:

## 
## Call:
## lm(formula = y ~ x + d)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.2395 -0.5952 -0.0308  0.6617  2.7592 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  9.99495    0.03105  321.89   <2e-16 ***
## x            1.01408    0.02992   33.89   <2e-16 ***
## d            1.31356    0.03023   43.46   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.9817 on 997 degrees of freedom
## Multiple R-squared:  0.7541, Adjusted R-squared:  0.7536 
## F-statistic:  1528 on 2 and 997 DF,  p-value: < 2.2e-16

b 的预计系数为 1.31,而不是 1。

2SLS

当初咱们应用 2SLS 来预计关系。咱们用 z 作为 d 的工具变量

第 1 阶段:回归 x 和 z 上的 d,并将 d 的拟合值保留为 d

## 
## Call:
## lm(formula = d ~ x + z)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.59344 -0.52572  0.04978  0.53115  2.01555 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.01048    0.02383   -0.44    0.660    
## x            0.01492    0.02296    0.65    0.516    
## z            0.68594    0.02337   29.36   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.7534 on 997 degrees of freedom
## Multiple R-squared:  0.4636, Adjusted R-squared:  0.4626 
## F-statistic: 430.9 on 2 and 997 DF,  p-value: < 2.2e-16

第 2 阶段:在 x 和 d.hat 上回归 y

## 
## Call:
## lm(formula = y ~ x + d.hat)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.4531 -1.0333  0.0228  1.0657  4.0104 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  9.99507    0.04786  208.85   <2e-16 ***
## x            1.01609    0.04612   22.03   <2e-16 ***
## d.hat        1.00963    0.06842   14.76   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.513 on 997 degrees of freedom
## Multiple R-squared:  0.4158, Adjusted R-squared:  0.4146 
## F-statistic: 354.8 on 2 and 997 DF,  p-value: < 2.2e-16

后果

b 的真值:1,b 的 OLS 估计值:.00963,2SLS b 的估计值:1.31356
如果医治变量 be 是内生的,咱们应该为医治变量找到一个工具变量),并应用 2SLS。

十分感谢您浏览本文,有任何问题请在上面留言!


参考文献

1.R 语言多元 Logistic 逻辑回归 利用案例

2. 面板平滑转移回归 (PSTR) 剖析案例实现

3.matlab 中的偏最小二乘回归(PLSR)和主成分回归(PCR)

4.R 语言泊松 Poisson 回归模型剖析案例

5.R 语言回归中的 Hosmer-Lemeshow 拟合优度测验

6.r 语言中对 LASSO 回归,Ridge 岭回归和 Elastic Net 模型实现

7. 在 R 语言中实现 Logistic 逻辑回归

8.python 用线性回归预测股票价格

9.R 语言如何在生存剖析与 Cox 回归中计算 IDI,NRI 指标

退出移动版