考虑以下虚拟数据:
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==A
和factor==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
。
答案 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)