我想得到自举的t值和lm的自举p值。 我有以下代码(基本上是从一篇论文中复制而来)。
# 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设置data <- Duncan
。但由于我没有为参数“indices”传递任何内容,我不明白函数“boot.function”中的以下行如何工作data <- data[indices,]
我希望这些问题有意义!??
答案 0 :(得分:7)
启动函数“期待”得到一个有两个参数的函数:第一个是data.frame,第二个是“indices”向量(可能有重复的条目,可能没有使用所有的索引)来使用选择行并且可能有一些重复或一式三份。)然后用替换的样本由原始数据帧中的重复模式和三次重复确定(多次由“R”用不同的“选择集”确定),将它们传递给索引boot.function中的参数,然后收集R个函数应用程序的结果。
关于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在下面的评论中询问了两个指数的抽样。在超越简单参数估计之后出现了许多意外的自举方面,如果我正在处理更复杂的采样情况,我会首先转向该参考。)