您在问题中要求两件事。首先,您要求一种在 R 中一致地估计此模型的方法。其次,您要求在 Stata 的 ivtobit 中实现的特定方法(这些方法是全信息最大似然和 Newey,1987 年的两步估计器)。做第二个对 R 社区来说是一个很好的服务,我没有时间去做。不过,没有人这样做似乎很奇怪。不过,我可以帮你做第一个。
有几种方法可以获得模型的一致估计量。这是一种简单直观的方法,基于 Rivers 和 Vuong 的估计器(J of Econometrics,1988)。估计器中的步骤是:
- 估计内生变量的简化形式(即在您的符号中回归 x 在 z 上)
- 从该回归中收集预测值和残差
- 使用 Tobit 估计感兴趣的方程,用预测的内生变量代替内生变量并包括在 2 中收集的残差(即回归 y 对 x-predicted 和使用 Tobit 的残差)
预测 x 上的系数是感兴趣系数的估计量。
通常的标准误是错误的——也就是说,Tobit 在步骤 3 中吐出的标准误不是正确的标准误。这是因为 Tobit 例程不“知道”您处理的变量是拟合变量而不是精确变量。您可以通过“正确执行”来对此做出反应:查找方差矩阵的公式,然后实施它(booooring)。或者你可以只是引导。我赞成后者。它更容易,如果你真的要“做对”,那么无论如何你都不会使用这个估计器,因为它效率不高。相反,您实际上会实施 Newey (1987) 估计或最大似然。
如果您有其他外生的右侧变量,只需将它们包含在所有命令中(包括在 tobit 和简化形式回归中)。如果您有其他内生的右侧变量,那么您将它们视为第一个内生 RHS 变量。对每个内生变量运行简化形式的回归。在每个内生变量的末尾包括预测值和残差。与对内生性的任何适当校正一样,您必须拥有与包含内生变量一样多的排除外生变量才能使这一切起作用。
下面的代码为您给出的简单示例实现了估计器和引导标准错误。我还修复了该示例,以便它可以交钥匙工作:
require(censReg)
require(boot)
a <- 2 # structural parameter of interest
b <- 1 # strength of instrument
rho <- 0.5 # degree of endogeneity
N <- 1000
z <- rnorm(N)
res1 <- rnorm(N)
res2 <- res1*rho + sqrt(1-rho*rho)*rnorm(N)
x <- z*b + res1
ys <- x*a + res2
d <- (ys>0) #dummy variable
y <- d*ys
inconsistent.tobit <- censReg(y~x)
summary(inconsistent.tobit)
reduced.form <- lm(x~z)
summary(reduced.form)
consistent.tobit <- censReg(y~fitted(reduced.form)+residuals(reduced.form))
summary(consistent.tobit)
# I'd like bootstrapped standard errors, please!
my.data <- data.frame(y,x,z)
tobit_2siv_coef <- function(data,indices){
d <- data[indices,]
reduced.form <- lm(x~z,data=d)
consistent.tobit <- censReg(d[,"y"]~fitted(reduced.form)+residuals(reduced.form))
return(summary(consistent.tobit)$estimate["fitted(reduced.form)",1])
}
boot.results <- boot(data=my.data,statistic=tobit_2siv_coef,R=100)
boot.results