R 中的折刀配对 t 检验

jackknife paired t-test in R

考虑以下虚拟数据:

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

现在我们想通过使用折刀重采样来对此进行扩展

即我们留下一对 (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

你很接近。真的没有必要删除那个变量,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)