带有聚集标准错误的probit-相当于Stata命令
我在Stata中有以下带有聚集标准错误的probit-相当于Stata命令,r,stata,logistic-regression,standard-error,R,Stata,Logistic Regression,Standard Error,我在Stata中有以下probit命令,并在R中查找等效代码: probit mediation viol ethniccomp lncrisisdur lncapratio lnten_mean durable_avg neighbors totaldem_nbrhd geostr medprev jointdem if newcrisis==1, cluster(crisno) 我能够复制系数的估计结果,但不能复制校正后的标准误差(聚类) probit.3.1_1我不知道解析解,所以
probit
命令,并在R中查找等效代码:
probit mediation viol ethniccomp lncrisisdur lncapratio lnten_mean durable_avg neighbors totaldem_nbrhd geostr medprev jointdem if newcrisis==1, cluster(crisno)
我能够复制系数的估计结果,但不能复制校正后的标准误差(聚类)
probit.3.1_1我不知道解析解,所以我会使用boot
包中的boot
在R中使用块引导
下面是我将要进行基准测试的Stata代码
cd "C:\Users\Richard\Desktop\"
use "http://www.ats.ucla.edu/stat/stata/dae/binary.dta", clear
generate group = int((_n - 1) / 20) + 1
probit admit gpa gre, vce(cluster group)
outsheet using "binary.txt", replace
这里是R中的等价项。第二个块提供了组
上的块引导,这是我在Stata中创建的一个随机聚类变量
setwd("C:/Users/Richard/Desktop/")
df <- read.delim("binary.txt")
# homoskedastic
probit <- glm(admit ~ gpa + gre, data=df, family=binomial(link=probit))
# with block bootstrap using `boot` package
library(boot)
myProbit <- function(x, y) {
myDf <- do.call("rbind", lapply(y, function(n) subset(df, group == x[n])))
myModel <- glm(admit ~ gpa + gre, data=myDf, family=binomial(link=probit))
coefficients(myModel)
}
groups <- unique(df$group)
probitBS <- boot(groups, myProbit, 500)
# comparison
summary(probit)
probitBS
另请参见为什么二元响应模型的稳健SEs没有帮助:不幸的是,我认为这种方法是不正确的,因为在可能性中包含聚类结构意味着基线probit
估计有偏差和不一致,请参见。因此,我们在每一步都得到了错误的系数&将错误系数的分布与错误的基线系数进行比较。@MichaelChirico-好的观点。我同意。谢谢你的链接!(虽然现在我不确定解决方案是什么,因为链接也排除了LPM!)这个问题整个周末都在折磨我。。。最后我决定结果是公正的,我会在电脑上添加一些链接。从那里,我做了我自己的引导。
setwd("C:/Users/Richard/Desktop/")
df <- read.delim("binary.txt")
# homoskedastic
probit <- glm(admit ~ gpa + gre, data=df, family=binomial(link=probit))
# with block bootstrap using `boot` package
library(boot)
myProbit <- function(x, y) {
myDf <- do.call("rbind", lapply(y, function(n) subset(df, group == x[n])))
myModel <- glm(admit ~ gpa + gre, data=myDf, family=binomial(link=probit))
coefficients(myModel)
}
groups <- unique(df$group)
probitBS <- boot(groups, myProbit, 500)
# comparison
summary(probit)
probitBS
Probit regression Number of obs = 400
Wald chi2(2) = 24.03
Prob > chi2 = 0.0000
Log pseudolikelihood = -240.094 Pseudo R2 = 0.0396
(Std. Err. adjusted for 20 clusters in group)
------------------------------------------------------------------------------
| Robust
admit | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
gpa | .454575 .1531717 2.97 0.003 .1543641 .7547859
gre | .0016425 .0006404 2.56 0.010 .0003873 .0028977
_cons | -3.003536 .520864 -5.77 0.000 -4.024411 -1.982662
------------------------------------------------------------------------------
> probitBS
ORDINARY NONPARAMETRIC BOOTSTRAP
Call:
boot(data = groups, statistic = myProbit, R = 500)
Bootstrap Statistics :
original bias std. error
t1* -3.003535745 -3.976856e-02 0.5420935780
t2* 0.454574799 3.781773e-03 0.1530609943
t3* 0.001642537 4.200797e-05 0.0006210689