【发布时间】:2019-09-09 08:41:15
【问题描述】:
我一直在尝试编写一个函数,该函数从简单的回归模型中获取结果并计算 Glass 的 Delta 尺寸效应。那很简单。
现在的问题是我想计算这个值的置信区间,当我将它与 boot 库一起使用时,我一直收到错误。
我已尝试关注this 的回答,但没有成功。
作为一个例子,我将使用 Stata 数据集
library(data.table)
webclass <- readstata13::read.dta13("http://www.stata.com/videos13/data/webclass.dta")
#estimate impact
M0<-lm(formula = math ~ treated ,data = webclass)
######################################
##### Effect Size ######
## Glass's delta=M1-M2/SD2 ##
####################################
ESdelta<-function(regmodel,yvar,tvar,msg=TRUE){
Data<-regmodel$model
setDT(Data)
meanT<-mean(Data[get(tvar)=="Treated",get(yvar)])
meanC<-mean(Data[get(tvar)=="Control",get(yvar)])
sdC<-sd(Data[get(tvar)=="Control",get(yvar)])
ESDelta<-(meanT-meanC)/sdC
if (msg==TRUE) {
cat(paste("the average scores of the variable-",yvar,"-differ by approximately",round(ESDelta,2),"standard deviations"))
}
return(ESDelta)
}
ESdelta(M0,"math","treated",msg = F)
#0.7635896
现在当我尝试使用启动功能时,出现以下错误
boot::boot(M0, statistic=ESdelta, R=50,"math","treated")
#Error in match.arg(stype) : 'arg' should be one of “i”, “f”, “w”
谢谢
【问题讨论】:
-
最后 2 个参数无效。根据文档,第四个参数
sim可以有值:"ordinary" (the default), "parametric", "balanced", "permutation", or "antithetic"。第 5 个参数stype应该是“i”、“f”、“w”之一 -
我明白了,但函数
ESdelta需要一些参数(在本例中为math和treated)。我试图将它们放在括号中,但显然它不起作用 -
如果你想传递额外的参数给
ESdelta,它们应该被命名。请使用?boot::boot浏览该函数的文档
标签: r data.table statistics-bootstrap