【问题标题】:Bootstrapping function with data.table带有 data.table 的引导函数
【发布时间】: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


【解决方案1】:

在启动手册中(输入?boot):

statistic: [...] 传递的第一个参数将始终是原始参数 数据。第二个将是索引、频率或权重的向量 它定义了引导样本。

您无法引导模型,因此您修改函数以使用 data.table 和索引,函数的其他参数必须在之后指定:

ESdelta<-function(Data,inds,yvar,tvar,msg=TRUE){

  Data = Data[inds,]
  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)

}

Dat <- setDT(M0$model)
bo = boot(Dat, statistic=ESdelta, R=50,yvar="math",tvar="treated",msg=FALSE)


> bo

ORDINARY NONPARAMETRIC BOOTSTRAP


Call:
boot(data = Dat, statistic = ESdelta, R = 50, yvar = "math", 
    tvar = "treated", msg = FALSE)


Bootstrap Statistics :
     original     bias    std. error
t1* 0.7635896 0.05685514   0.4058304

您可以通过以下方式获取 c.i:

boot.ci(bo)

BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 50 bootstrap replicates

CALL : 
boot.ci(boot.out = bo)

Intervals : 
Level      Normal              Basic         
95%   (-0.0887,  1.5021 )   (-0.8864,  1.5398 )  

Level     Percentile            BCa          
95%   (-0.0126,  2.4136 )   (-0.1924,  1.7579 )  

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    相关资源
    最近更新 更多