R中的折刀配对t检验

时间:2016-04-29 07:03:59

标签: r resampling

考虑以下虚拟数据:

x <- rnorm(15,mean = 3,sd = 1)
y <- rnorm(15,mean = 3,sd = 1)
xy <- c(x,y)
factor <- c(rep('A',15),rep('B',15))

df1 <- data.frame(xy,factor)
df1$PAIR_IDENTIFIER <- 1:15

现在,我们想测试factor==Afactor==B之间的均值是否有所不同。所以我们实施了配对t检验

paired_t_test <- t.test(xy ~ factor, df1, paired = T)
paired_t_test$p.value

现在我们想通过使用jackknife resample

对此进行扩展

那就是我们留下一对(PAIR_IDENTIFIER)并重新运行t检验。我们希望重新运行测试15-1次。

我尝试从bootstrap

实现jackknife功能
library(bootstrap)

n <- length(df1$xy)

theta <- function(x,df1){ t.test(xy ~ factor, df1, paired = T)}
results <- jackknife(1:n,theta,df1)

但我不知道如何编写函数来为每次迭代删除PAIR_IDENTIFIER

1 个答案:

答案 0 :(得分:2)

你很亲密。实际上没有必要删除该变量,t-test只会使用公式中指定的内容。

theta.fun <- function(x, mydata) {
     t.test(xy ~ factor, 
           data = mydata[mydata$PAIR_IDENTIFIER %in% x, ], 
           paired = T)$p.value
}

jackknife(x = 1:15, theta = theta.fun, mydata = df1)

$jack.se
[1] 0.5257458

$jack.bias
[1] 0.4501173

$jack.values
 [1] 0.4064047 0.1164558 0.6187378 0.2853089 0.5913767 0.3906702 0.3528575 0.5142996 0.2430837 0.5590809 0.5015720 0.6029110 0.3881225
[14] 0.5223167 0.3734025

$call
jackknife(x = 1:15, theta = theta.fun, mydata = df1)