IV回归计算

时间:2020-05-29 08:54:26

标签: r regression

对于我的论文,我正在进行工具变量(IV)回归,我想知道自己是否做对了。我有几个问题:

  1. 将线性模型与IV模型进行比较,效果的符号会发生变化(从正到负或相反)。
  2. ivreg包中使用带有AER的两级最小二乘(2SLS)得出负R²值,因此我决定手动计算2SLS估计值。这些给出的估计与ivreg代码相同,但现在具有统计上显着的结果。

我的数据有限,因此,我已经进行了一些非参数测试,因此我没想到会有任何明显的结果,并且不同组的平均值没有显着差异。

我正在研究组织的政策对给定预算的影响。 如果预算剩余为正,则组织的绩效良好,因此其成本比预算少。 变量是一个百分比,可以是正数或负数。 由于组织可以确定自己的政策,因此不能随机选择治疗方法。 此外,政策因素主要是虚拟变量,19个变量是二进制变量,2个是分类变量,1个是比率。 我的IV是0到1之间的任何数字。

这就是我所做的:

1。我估算了一个简单的普通最小二乘模型,看看它会做什么(我知道结果没有任何意义)。

lm1 <- lm(budget ~ policy1, data=df)
lm2 <- lm(budget ~ policy2, data=df)
summ(lm1)
summ(lm2)

2。然后我用ivreg代码执行了IV,尽管R²变为负值,我认为这很奇怪。

ivreg1 <- ivreg(budget ~ policy1| iv, data=df)
ivreg2 <- ivreg(budget ~ policy2 | iv, data=df)
library(stargazer)
stargazer(ivreg1, ivreg2, dep.var.labels=c("Budget"), covariate.labels = c("policy 1", "policy2") , align=TRUE, column.sep.width = "-15pt", font.size = "small", type="text")

3。所以我尝试自己一步一步地做2SLS。

我还使用了fitted.values(reg1)而不是predict(reg1)。这样会得到相同的输出。

attach(df)
reg1<- lm(policy1~iv)
policy1.hat <- fitted.values(reg1)
reg2 <- lm(policy2~iv)
policy2.hat <- fitted.values(reg2)
ivreg3 <- lm(budget~policy1.hat)
ivreg4 <- lm(budget~policy2.hat)
stargazer(ivreg1, ivreg2, dep.var.labels=c("Budget"), covariate.labels = c("policy 1", "policy2"), align=TRUE, column.sep.width = "-15pt", font.size = "small", type="text")
detach(df)

通过这一步骤,我得到了一个正的R²调整值,但我注意到政策因素现在很重要,并且与lm模型相比的符号发生了变化。

问题: 我计算IV回归错误吗?

示例数据(由于数据的匿名性,所以不是实数):

 df <- data.frame(
    budget = c(4,2.8,9.1,15.5,10.1,12.9,4.3,
               -1.9,-4.9,-1.3,14.1,8.6,7.8,-5.8,3.8,7.2,5.2,-5.3,8.6,
               3.5,-1.2,-15.7,1.6,6.9,12.6,10.4,4.5,-8.3,-15.3,
               9.8,21.5),
        iv = c(0.52,0.43,0.41,0.44,0.41,0.4,0.39,
               0.43,0.38,0.37,0.34,0.42,0.4,0.36,0.35,0.41,0.39,
               0.35,0.31,0.43,0.36,0.51,0.35,0.34,0.37,0.37,0.39,
               0.46,0.44,0.36,0.37),
   policy1 = c(1L,1L,1L,1L,1L,1L,0L,1L,1L,1L,
               1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,
               1L,1L,1L,1L,1L,1L),
   policy2 = c(1L,1L,1L,1L,1L,1L,1L,0L,0L,1L,
               0L,1L,0L,1L,1L,1L,1L,0L,1L,1L,1L,1L,1L,1L,1L,
               0L,1L,1L,0L,1L,0L)
)

0 个答案:

没有答案