R语言工具变量与两阶段最小二乘法
时间:2022-07-22
本文章向大家介绍R语言工具变量与两阶段最小二乘法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
原文链接:http://tecdat.cn/?p=5374
我们要估计的模型是
Y = A + BX + CD + EY = A + BX + CD + E,
其中Y是解释变量,,和是我们想要估计的系数。
生成数据
首先,让我们生成数据。
假设的工具变量和之间的相关矩阵如下:
## 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
具体而言,相关性表明
- cor(d,e)= 0.3,这意味着是内生的; d
- cor(d,z)= 0.7,这意味着是的强大工具变量; zd
- cor(z,e)= 0.001,这意味着工具变量满足排除限制,因为它只影响到.zyd
现在,让我们使用指定的相关性为,,和生成数据.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
如果我们假装我们不知道真正的关系并使用和来解释,我们对和正确系数应该接近到。
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 instread of 1. ## 2SLS ##现在我们使用2SLS来估计这种关系。我们使用z作为d的工具变量
第1阶段:在和上回归,并将d的拟合值保存为d.ddxxzz
##
## 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阶段:在和上回归y x d.hat
##
## 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 OLS estiamte of b:.00963 2SLS estiamte of b:1.31356
如果治疗变量是内生的,我们使用2SLS。
点击标题查阅往期内容
R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数
R语言使用Metropolis- Hasting抽样算法进行逻辑回归
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
R语言中的block Gibbs吉布斯采样贝叶斯多元线性回归
R语言用线性模型进行预测:加权泊松回归,普通最小二乘,加权负二项式模型,多重插补缺失值
- Golang中container/list包中的坑
- 关于Golang语言数组索引的有趣现象
- 使用SQL来分析数据库参数(二)(r10笔记第82天)
- Golang不定参数
- [go语言]利用缓冲信道来实现网游帐号验证消息的分发和等待
- 转--Golang语言版 ssh口令破解工具
- cubieboard(树莓派)安装Ubuntu+Apache+PHP+Mysql
- Oracle 12c里的几点补充(一)(r11笔记第7天)
- Oracle备库的PDB无法连接的问题(r11笔记第6天)
- Golang语言社区--模板的使用
- Golang语言写Web 应用程序
- 强制wordpress后台HTTPS
- Golang语言 Cookie的使用
- Golang 语言调用动态库实现OpenGL及windows的API编程
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Kubeflow Pipeline - 构建一个机器学习 Workflow
- Git 如何压缩 commit
- How go build works
- 网状Meta分析之R语言‘gemtc’包实战(3)
- 关于 K8S API Resources: Group 和 Version 该怎么写
- ZooKeeper 的应用场景
- 在 K8S 部署一个 Spark History Server - 篇3
- Go 学习笔记-1
- Tensorflow-gpu 运行在 cpu 母机的问题
- R语言入门之散点图
- Python函数(一)
- Spark on Kubernetes 动态资源分配
- R语言入门之偏度(skewness)与峰度(kurtosis)
- Spark Operator 是如何提交 Spark 作业
- R语言进阶之聚类分析