R 带data.table的引导函数
我一直在尝试编写一个函数,从一个简单的回归模型中获取结果,并计算玻璃的Delta尺寸效应。那很容易。 现在的问题是,我想计算这个值的置信区间,当我将它与R 带data.table的引导函数,r,data.table,statistics-bootstrap,R,Data.table,Statistics Bootstrap,我一直在尝试编写一个函数,从一个简单的回归模型中获取结果,并计算玻璃的Delta尺寸效应。那很容易。 现在的问题是,我想计算这个值的置信区间,当我将它与boot库一起使用时,我不断得到一个错误 我试着按照答案做,但没有成功 作为示例,我将使用Stata数据集 library(data.table) webclass <- readstata13::read.dta13("http://www.stata.com/videos13/data/webclass.dta")
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
感谢启动手册(类型?启动)中的:
统计信息:[……]传递的第一个参数将始终是原始参数
数据。第二个将是指数、频率或权重的向量
其中定义了引导示例
无法引导模型,因此要修改函数以使用data.table和index,必须在下列参数之后指定函数的其他参数:
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
在启动手册(类型?启动)中:
统计信息:[……]传递的第一个参数将始终是原始参数
数据。第二个将是指数、频率或权重的向量
其中定义了引导示例
无法引导模型,因此要修改函数以使用data.table和index,必须在下列参数之后指定函数的其他参数:
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
最后2个参数无效。根据文档,第四个参数
sim
可以有以下值:“普通”(默认值)、“参数”、“平衡”、“置换”或“对偶”
。第五个参数stype
应该是我看到的“i”、“f”、“w”中的一个,但是函数ESdelta
需要一些参数(在这种情况下math
和treated
)。我试图将它们放在括号中,但显然不起作用。如果您想将其他参数传递到ESdelta
,则应命名它们。请使用?boot::boot
查看函数的文档最后2个参数无效。根据文档,第四个参数sim
可以有以下值:“普通”(默认值)、“参数”、“平衡”、“置换”或“对偶”
。第五个参数stype
应该是我看到的“i”、“f”、“w”中的一个,但是函数ESdelta
需要一些参数(在这种情况下math
和treated
)。我试图将它们放在括号中,但显然不起作用。如果您想将其他参数传递到ESdelta
,则应命名它们。请使用?boot::boot
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 )