Tôi muốn bootstrap kiểm tra một giả thuyết (bài kiểm tra t sinh viên hai mẫu). Trong Efron và Tibshirani 1993 p.224 có mã rõ ràng cho điều đó: đối với mỗi quan sát, hãy trừ trung bình nhóm của nó và thêm trung bình tổng thể trong đó giá trị trung bình tổng thể là trung bình của các mẫu kết hợp. Họ cho rằng chúng ta nên phân phối bootstrap theo giả thuyết null và đó là lý do tại sao chúng ta nên làm điều này.
Tuy nhiên, tôi cũng học được rằng có thể tự khởi động từ các mẫu mà không cần sửa đổi chúng. Tôi đã thử cả hai phương pháp: Các bước của Efron (sử dụng chức năng boot_t_F
) và cũng không chuyển đổi các quan sát (sử dụng chức năng boot_t_B
).
Các giá trị p được khởi động kết quả (như tỷ lệ của các thống kê kiểm tra đã được khởi động vượt quá thống kê kiểm tra ban đầu) phải giống hệt nhau, nhưng chúng thì không.
Tại sao lại thế này?
Hai chức năng của tôi là dưới đây:
boot_t_B<-function(x,y){
print(t.test(x, y, var.equal=TRUE)) #original test statistics
t.est<-abs(t.test(x, y, var.equal=TRUE)$statistic) #Student's t-test
grand_mean<-mean(c(x,y), na.rm=T) #global mean
x1<-x #-mean(x, na.rm=T)+grand_mean it's not subtracted/added here
y1<-y #-mean(y, na.rm=T)+grand_mean
B <- 10000 #number of bootstrap samples
t.vect <- vector(length=B) #vector for bootstrapped t-statistics
for(i in 1:B){
boot.c <- sample(x1, size=length(x), replace=T)
boot.p <- sample(y1, size=length(y), replace=T)
t.vect[i] <- t.test(boot.c, boot.p, var.equal=TRUE)$statistic
}
return(mean(t.vect>t.est)) #bootstrapped p-value
}
boot_t_F<-function(x,y){
print(t.test(x, y, var.equal=TRUE)) #original test statistics
t.est<-abs(t.test(x, y, var.equal=TRUE)$statistic) #Student's t-test
grand_mean<-mean(c(x,y), na.rm=T) #global mean
x1<-x-mean(x, na.rm=T)+grand_mean
y1<-y-mean(y, na.rm=T)+grand_mean
B <- 10000 #number of bootstrap samples
t.vect <- vector(length=B) #vector for bootstrapped test-statistics
for(i in 1:B){
boot.c <- sample(x1, size=length(x), replace=T)
boot.p <- sample(y1, size=length(y), replace=T)
t.vect[i] <- t.test(boot.c, boot.p, var.equal=TRUE)$statistic
}
return(mean(t.vect>t.est)) #bootstrapped p-value
}
set.seed(1678)
boot_t_B(rnorm(25,0,10), rnorm(25,5,10))
[1] 4e-04
set.seed(1678)
boot_t_F(rnorm(25,0,10), rnorm(25,5,10))
[1] 0.0507
Lưu ý: Tôi đã chọn 'ngẫu nhiên' phân phối (bình thường) của các mẫu.
boot_t_B
các đối số của bạn là cả hairnorm
, nhưng trong cuộc gọi của bạn đếnboot_t_F
họrunif
vàrexp
.