r - R 中的自举相关

标签 r correlation statistics-bootstrap

我正在尝试在 R 中进行引导相关性。 我有两个变量 Var1 和 Var2,我想获得 Pearson 相关性的自举 p.value。

my variables look like this:
      x            y
1   .6080522    1.707642
2   1.4307273   1.772616
3   0.8226198   1.768537
4   1.7714221   1.265276
5   1.5986213   1.855719
6   1.0000000   1.606106
7   1.1678940   1.671457
8   0.6630012   1.608428
9   1.0842423   1.670619
10  0.5592512   1.107783
11  1.6442616   1.492832
12  0.8326965   1.643923
13  1.1696954   1.763181
14  0.7484543   1.762921
15  1.0842423   1.591566
16  0.9014748   1.718669
17  0.7604917   1.782863
18  0.8566499   1.796216
19  1.4307273   1.913675
20  1.7579695   1.903155

到目前为止我有这个:

data = as.data.frame(data)
x = data$Var1
y = data$Var2
dat = data.frame(x,y)

library(boot)
set.seed(1)
bootCorTest3 <- function(data, i){
  d <- data[i, ]
  results  <- cor.test(d$x, d$y, method='pearson')
  c(est = results$estimate, stat = results$statistic, param = results$parameter, p.value = results$p.value, CI = results$conf.int)
}


b3 <- boot(dat, bootCorTest3, R = 1000)
b3

# Original (non-bootstrap) statistics with label
b3$t0
colMeans(b3$t)
boot.ci(b3, type = c("norm", "basic", "perc", "bca")) #bootstrapped CI. 

自举 p 值应该是我用 colMeans(b3$t) 得到的值,对吧?

colMeans(b3$t) 给了我这个:

est.cor      stat.t    param.df     p.value         CI1         CI2
 0.28495324  2.13981008 48.00000000  0.14418623  0.01438146  0.51726022

看起来一切都很顺利。问题是我在不同的软件上运行相同的统计数据,结果有很大不同。我在这里得到的 p 值比另一个高得多。 我认为我可能在这里做错了什么,因为我的 R 能力不强。

有人可以给我一些关于这段代码的反馈吗?难道我做错了什么?您能获得 Pearson 相关性的引导 p.value 吗?

感谢您的宝贵时间。

最佳答案

如果您想引导相关性测试,只需从引导统计函数返回相关系数即可。在这种情况下,引导相关性测试的 p 值是不合适的,因为您忽略了相关性测试的方向性。

在 CrossValidated 上检查此问题,了解有关执行引导假设检验的一些不错的答案:https://stats.stackexchange.com/questions/20701/computing-p-value-using-bootstrap-with-r

library("boot")
data <- read.csv("~/Documents/stack/tmp.csv", header = FALSE)
colnames(data) <- c("x", "y")

data <- as.data.frame(data)
x <- data$Var1
y <- data$Var2
dat <- data.frame(x,y)

set.seed(1)

b3 <- boot(data, 
  statistic = function(data, i) {
    cor(data[i, "x"], data[i, "y"], method='pearson')
  },
  R = 1000
)
b3
#> 
#> ORDINARY NONPARAMETRIC BOOTSTRAP
#> 
#> 
#> Call:
#> boot(data = data, statistic = function(data, i) {
#>     cor(data[i, "x"], data[i, "y"], method = "pearson")
#> }, R = 1000)
#> 
#> 
#> Bootstrap Statistics :
#>      original        bias    std. error
#> t1* 0.1279691 -0.0004316781    0.314056
boot.ci(b3, type = c("norm", "basic", "perc", "bca")) #bootstrapped CI. 
#> BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
#> Based on 1000 bootstrap replicates
#> 
#> CALL : 
#> boot.ci(boot.out = b3, type = c("norm", "basic", "perc", "bca"))
#> 
#> Intervals : 
#> Level      Normal              Basic         
#> 95%   (-0.4871,  0.7439 )   (-0.4216,  0.7784 )  
#> 
#> Level     Percentile            BCa          
#> 95%   (-0.5225,  0.6775 )   (-0.5559,  0.6484 )  
#> Calculations and Intervals on Original Scale

plot(density(b3$t))
abline(v = 0, lty = "dashed", col = "grey60")

在没有 p 值的情况下,可以非常肯定地说,采样分布的大部分质量非常接近于零。

关于r - R 中的自举相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58393608/

相关文章:

r - 根据另一个向量中的数据 block 分配一个二进制向量

r - 为什么不能在 sapply 中使用 -qnorm?

r - plm 函数和异方差鲁棒标准误差

r - 根据面板数据中的索引分块抽样

machine-learning - 逻辑回归分类器的 Bootstrap 聚合(装袋)

HTML 输出文本不会根据 Shiny 的 CSS 文件而改变

matlab - 如何在matlab中计算相关矩阵

python - pandas 数据框中两列的相关系数与 .corr()

python - 沿一个轴的矩阵相似度

r - R 中的 Bootstrap 多项式回归