簡體   English   中英

帶 data.table 的引導函數

[英]Bootstrapping function with data.table

我一直在嘗試編寫一個函數,該函數從一個簡單的回歸模型中獲取結果並計算 Glass 的 Delta 尺寸效應。 那很簡單。 現在的問題是我想計算這個值的置信區間,當我將它與boot庫一起使用時,我不斷收到錯誤消息。

我試圖遵循這個答案,但沒有成功。

作為示例,我將使用 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”

謝謝

在引導手冊中(鍵入?boot):

統計:[...] 傳遞的第一個參數將始終是原始數據。 第二個將是定義引導樣本的索引、頻率或權重向量。

您無法引導模型,因此您修改函數以使用 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

您可以通過執行以下操作獲取 ci:

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 )  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM