【问题标题】:Bootstrapped p-value for a correlation coefficient on RR 上相关系数的自举 p 值
【发布时间】:2019-01-16 14:07:04
【问题描述】:

R 上,我使用 boostrap 方法来获得相关系数估计和置信区间。 为了得到 p 值,我想,我可以计算不包含零的置信区间的比例。但这不是解决方案。

在这种情况下如何获得 p 值?

我正在使用cor.test 来获得系数估计。 cor.test 也可以给我每次测试的 p 值。但是我怎样才能得到引导的 p 值呢?

非常感谢!

下面是一个例子:

n=30
data = matrix (data = c (rnorm (n), rnorm (n),rnorm (n), rpois(n,1), 
rbinom(n,1,0.6)), nrow =  n, byrow = F)
data= as.data.frame(data)
z1  = replicate( Brep, sample(1:dim(data)[1], dim(data)[1], replace = T))
res = do.call  ( rbind, apply(z1, 2, function(x){ res=cor.test(data$V1[x], data$V2[x]) ; return ((list(res$p.value,res$estimate))) }))

 coeffcorr  = mean(unlist(res[,2]), na.rm = T) #bootstrapped coefficient
 confInter1 = quantile(unlist(res[,2]), c(0.025, 0.975), na.rm = T)[1] #confidence interval 1
 confInter2 = quantile(unlist(res[,2]), c(0.025, 0.975), na.rm = T)[2] #confidence interval 2  
 p.value    =  mean    (unlist(res[,1]), na.rm = T )  # pvalue

【问题讨论】:

  • 您可以发布示例数据吗?请使用dput(head(your_data, 20)) 的输出编辑问题。
  • 好的,完成了:-)

标签: r correlation confidence-interval p-value statistics-bootstrap


【解决方案1】:

R 中引导的标准方法是使用基本包boot。首先定义 bootstrap 函数,该函数接受两个参数,即数据集和数据集的索引。这是下面的函数bootCorTest。在函数中,您对数据集进行子集化,仅选择索引定义的行。

剩下的就很简单了。

library(boot)

bootCorTest <- function(data, i){
    d <- data[i, ]
    cor.test(d$x, d$y)$p.value
}


# First dataset in help("cor.test")
x <- c(44.4, 45.9, 41.9, 53.3, 44.7, 44.1, 50.7, 45.2, 60.1)
y <- c( 2.6,  3.1,  2.5,  5.0,  3.6,  4.0,  5.2,  2.8,  3.8)
dat <- data.frame(x, y)

b <- boot(dat, bootCorTest, R = 1000)

b$t0
#[1] 0.10817

mean(b$t)
#[1] 0.134634

boot.ci(b)

有关函数 bootboot.ci 的结果的更多信息,请参见各自的帮助页面。

编辑。

如果您想从引导统计函数bootCorTest 返回多个值,您应该返回一个向量。在以下情况下,它返回一个具有所需值的命名向量。

请注意,我设置了 RNG 种子,以使结果可重现。我应该已经在上面做了。

set.seed(7612)    # Make the results reproducible

bootCorTest2 <- function(data, i){
    d <- data[i, ]
    res <- cor.test(d$x, d$y)
    c(stat = res$statistic, p.value = res$p.value)
}


b2 <- boot(dat, bootCorTest, R = 1000)

b2$t0
#  stat.t  p.value 
#1.841083 0.108173


colMeans(b2$t)
#[1] 2.869479 0.133857

【讨论】:

  • 非常感谢!您知道如何计算自举 p 值吗?
  • 代码并不简单,但是 R 是开源的,所以你可以详细看到发生了什么。下载源代码,查看目录library/boot
  • 最后一个问题:我可以通过boot 一次性获得两个参数的引导:系数估计和p 值吗?
  • 不是如何从 bootstrap 获取 p 值。想象一下参数 p 值有偏差的情况,例如由于 y 和 x 的非二元正态分布。它也会偏向于典型的自举样本。取有偏差的 p 值的平均值不会产生有效的 p 值。
  • @Glu 1) 和 3) b$t 是由bootCorTest 返回的所有 p 值的向量。所以它的平均值是 bootstarp p 值,b$t0 是用所有数据计算的值(没有 bootstrap)。 4) bootCorTest2 返回 2 个值,它们都不是相关系数 estimate。请参阅cor.test 部分Value。在bootCorTest2 的最后一行,还包括cor = res$estimate
猜你喜欢
  • 1970-01-01
  • 2019-12-10
  • 1970-01-01
  • 2013-04-04
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 2017-10-06
相关资源
最近更新 更多