如何获取自助法得出的p值和t值,以及函数boot()是如何工作的?

4

我希望能够获得一个线性模型的自举t值和自举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])     
}

现在,我计算引导模型,结果如下:
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

我有两个问题:
1. 我的理解是,bootstrapped value指的是原始值加上偏差,这意味着bootstrapped t-value和bootstrapped p-value都比原始值大。然而这是不可能的,因为如果t-value升高(也就是更显著),p-value一定会降低,对吧?因此我认为我还没有真正理解boot函数的输出结果(这里是duncan.boot)。那么我该如何计算bootstrapped values?
2. 我不明白boot()是如何工作的。如果你看一下"duncan.boot <- boot(Duncan, boot.function, 1999)",你会发现我没有传递任何参数给函数"boot.function"。我想R设置了"data <- Duncan"。但由于我没有为参数"indices"传递任何内容,我不明白函数"boot.function"中的以下代码如何工作:"data <- data[indices,]"。
希望我的问题表述清晰!
1个回答

7
启动函数期望得到一个带有两个参数的函数:第一个参数是数据框(data.frame),第二个参数是“indices”向量(可能包含重复条目,且可能不使用所有索引)用于选择行并可能具有一些重复或三倍以上的条目。然后,根据重复和三倍以上的模式从原始数据帧中进行替换抽样(使用不同的“choice sets”多次确定),将其传递给boot.function中的indices参数,然后收集R个函数应用程序的结果。
关于boot对象的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()值的平均值与T0值之间的差异。我认为,问基于参数考虑的p值为什么随着估计t统计量的增加而增加并没有多大意义。当你这样做时,你真的处于两个不同的统计思维领域。我会将p值的增加解释为抽样过程的影响,而该过程并未考虑正态分布的假设。它只是在描述p值的抽样分布(实际上只是另一个样本统计量)。
(注:R开发时使用的源书是Davison和Hinkley的“Bootstrap Methods and their Applications”。我并不支持自己上面的回答,但在Hagen Brenner在下面的评论中问及具有两个索引的抽样后,我想把它作为参考放上去。当我们处理更复杂的抽样情况时,bootstrap方法会出现许多意想不到的方面,我首先会借鉴那篇参考文献。)

我很好奇stats.stackexchange.com上的人对这个问题的统计方面有什么看法。我会说你提到的“抽样过程的影响”是引起自助偏差估计器倾向于表现出增加的方差,因此可能被不精确地估计(至少,这是我的模糊回忆)。 - joran
我实际上并没有计算任何方差,尽管我承认自助法生成的p值可能会比正态理论所预期的方差要大。 - IRTFM
当您查看摘要时,您会获得t值和p值。这两个值彼此相关。如果您给我t值,我可以计算出p值,反之亦然。如果t值增加,那么显然p值会减少。我想您同意,对吗?所以如果您同意,我不明白为什么在引导案例中不是这种情况。我不同意这句话:“在计算p值时,R不考虑正态分布假设。”我认为这正是R所做的。 - Hagen Brenner
可以通过绘制引导的lm来查看p值的抽样分布。只需执行plot(duncan.boot),您就会得到一个直方图和一个qq图。 - Hagen Brenner
@Hagen Brenner:它们可能被称为“p值”,但实际上它们是不同样本中[1-pnorm(估计值与sd(估计值)的比率)]的集合。这突显了“p值”是特定假设下的样本统计量的事实。在任何给定的样本中,当p值较低时,T值将会很高。您可以通过将它们相互绘制来看到这一点:plot(duncan.boot$t[,1],duncan.boot$t[,2])。但这并不意味着更高的自助估计T值将与更低的偏差估计p值相关联。 - IRTFM
@ DWin:是的,你说得对。 但我还有一个关于boot()的问题。我该如何确保boot会考虑每个R样本中的两个索引?这对我的分析非常重要。谢谢! - Hagen Brenner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接