我有以下代码(基本上是从一篇论文中复制而来).
# First of all you need the following packages install.packages("car") install.packages("MASS") install.packages("boot") library("car") library("MASS") library("boot") boot.function <- function(data, indices){ data <- data[indices,] mod <- lm(prestige ~ income + education, data=data) # the liear model # the first element of the following vector contains the t-value # and the second element is the p-value c(summary(mod)[["coefficients"]][2,3], summary(mod)[["coefficients"]][2,4]) }
现在,我计算了bootstrapping模型,它给出了以下内容:
duncan.boot <- boot(Duncan, boot.function, 1999) duncan.boot ORDINARY NONPARAMETRIC BOOTSTRAP Call: boot(data = Duncan, statistic = boot.function, R = 1999) Bootstrap Statistics : original bias std. error t1* 5.003310e+00 0.288746545 1.71684664 t2* 1.053184e-05 0.002701685 0.01642399
我有两个问题:
>我的理解是bootrapped值是原始加上偏差,这意味着两个自举值(自举t值以及自举p值)都大于原始值.这反过来是不可能的,因为如果t值上升(这意味着更重要),p值必须更低,对吧?因此我认为我还没有真正理解启动函数的输出(这里:duncan.boot).如何计算引导值?
>我不明白boot()的工作原理.如果你看看duncan.boot< - boot(Duncan,boot.function,1999),你会发现我没有传递函数“boot.function”的任何参数.我想R设置数据< - Duncan.但由于我没有为参数“indices”传递任何内容,我不明白函数“boot.function”中的以下行如何工作数据< - data [indices,]
我希望这些问题有意义!
关于引导对象的print方法报告的内容,请看一下(使用str()检查返回的对象后完成的操作
> duncan.boot$t0 [1] 5.003310e+00 1.053184e-05 > apply(duncan.boot$t, 2, mean) [1] 5.342895220 0.002607943 > apply(duncan.boot$t, 2, mean) - duncan.boot$t0 [1] 0.339585441 0.002597411
更明显的是,T0值来自原始数据,而偏差是boot() – ed值和T0值之间的差值.我认为,为什么基于参数考虑的p值随着估计的t统计量的增加而增加,这并不是很有意义.当你这样做时,你真的处于两个不同的统计思想区域.我会将p值的增加解释为采样过程的影响,而不考虑正态分布假设.它只是简单地说一下p值的采样分布(这实际上只是另一个样本统计量).
(评论:R开发时使用的资料手册是Davison和Hinkley的“Bootstrap方法及其应用程序”.我没有声称支持我上面的答案,但我想在Hagen Brenner问之后将其作为参考关于在下面的评论中使用两个索引进行采样.在超出简单参数估计之后出现许多意外的自举方面,如果我正在处理更复杂的采样情况,我将首先转向该引用.)