Tại sao giá trị p khác nhau
Có hai hiệu ứng đang diễn ra:
Do tính riêng biệt của các giá trị bạn chọn, vectơ 'rất có thể xảy ra' 0 2 1 1 1. Nhưng điều này sẽ khác với (không thể) 0 1.25 1.25 1.25 1.25, sẽ có giá trị nhỏ hơn .χ2
Kết quả là vectơ 5 0 0 0 0 không còn được tính nữa vì ít nhất là trường hợp cực đoan (5 0 0 0 0 có nhỏ hơn hơn 0 2 1 1 1). Đây là trường hợp trước đây. Các hai đứng về phía test Fisher trên đếm bảng 2x2 cả hai trường hợp của 5 tiếp xúc là trong lần đầu tiên hoặc nhóm thứ hai là không kém khắc nghiệt.χ2
Đây là lý do tại sao giá trị p khác nhau gần như là một yếu tố 2. (không chính xác vì điểm tiếp theo)
Trong khi bạn mất 5 0 0 0 0 như một trường hợp cực đoan như nhau, bạn có được 1 4 0 0 0 như một trường hợp cực đoan hơn 0 2 1 1 1.
Vì vậy, sự khác biệt nằm trong ranh giới của giá trị (hoặc giá trị p được tính trực tiếp như được sử dụng khi triển khai R của thử nghiệm Fisher chính xác). Nếu bạn chia nhóm 400 thành 4 nhóm 100 thì các trường hợp khác nhau sẽ được coi là "cực đoan" hơn hoặc ít hơn so với nhóm khác. 5 0 0 0 0 bây giờ ít 'cực đoan' hơn 0 2 1 1 1. Nhưng 1 4 0 0 0 là 'cực đoan' hơn.χ2
mã ví dụ:
# probability of distribution a and b exposures among 2 groups of 400
draw2 <- function(a,b) {
choose(400,a)*choose(400,b)/choose(800,5)
}
# probability of distribution a, b, c, d and e exposures among 5 groups of resp 400, 100, 100, 100, 100
draw5 <- function(a,b,c,d,e) {
choose(400,a)*choose(100,b)*choose(100,c)*choose(100,d)*choose(100,e)/choose(800,5)
}
# looping all possible distributions of 5 exposers among 5 groups
# summing the probability when it's p-value is smaller or equal to the observed value 0 2 1 1 1
sumx <- 0
for (f in c(0:5)) {
for(g in c(0:(5-f))) {
for(h in c(0:(5-f-g))) {
for(i in c(0:(5-f-g-h))) {
j = 5-f-g-h-i
if (draw5(f, g, h, i, j) <= draw5(0, 2, 1, 1, 1)) {
sumx <- sumx + draw5(f, g, h, i, j)
}
}
}
}
}
sumx #output is 0.3318617
# the split up case (5 groups, 400 100 100 100 100) can be calculated manually
# as a sum of probabilities for cases 0 5 and 1 4 0 0 0 (0 5 includes all cases 1 a b c d with the sum of the latter four equal to 5)
fisher.test(matrix( c(400, 98, 99 , 99, 99, 0, 2, 1, 1, 1) , ncol = 2))[1]
draw2(0,5) + 4*draw(1,4,0,0,0)
# the original case of 2 groups (400 400) can be calculated manually
# as a sum of probabilities for the cases 0 5 and 5 0
fisher.test(matrix( c(400, 395, 0, 5) , ncol = 2))[1]
draw2(0,5) + draw2(5,0)
đầu ra của bit cuối cùng đó
> fisher.test(matrix( c(400, 98, 99 , 99, 99, 0, 2, 1, 1, 1) , ncol = 2))[1]
$p.value
[1] 0.03318617
> draw2(0,5) + 4*draw(1,4,0,0,0)
[1] 0.03318617
> fisher.test(matrix( c(400, 395, 0, 5) , ncol = 2))[1]
$p.value
[1] 0.06171924
> draw2(0,5) + draw2(5,0)
[1] 0.06171924
Làm thế nào nó ảnh hưởng sức mạnh khi chia nhóm
Có một số khác biệt do các bước riêng biệt trong các mức 'có sẵn' của giá trị p và tính bảo thủ của thử nghiệm chính xác của Fishers (và những khác biệt này có thể trở nên khá lớn).
ngoài ra, phép thử Fisher phù hợp với mô hình (chưa biết) dựa trên dữ liệu và sau đó sử dụng mô hình này để tính giá trị p. Mô hình trong ví dụ là có chính xác 5 cá nhân tiếp xúc. Nếu bạn lập mô hình dữ liệu với nhị thức cho các nhóm khác nhau thì đôi khi bạn sẽ nhận được nhiều hơn hoặc ít hơn 5 cá nhân. Khi bạn áp dụng thử nghiệm đánh cá cho điều này, thì một số lỗi sẽ được trang bị và phần dư sẽ nhỏ hơn so với các thử nghiệm có biên cố định. Kết quả là bài kiểm tra quá bảo thủ, không chính xác.
Tôi đã dự đoán rằng hiệu ứng trên xác suất lỗi loại thử nghiệm I sẽ không lớn nếu bạn chia ngẫu nhiên các nhóm. Nếu giả thuyết null là đúng thì bạn sẽ gặp trong khoảng phần trăm các trường hợp có giá trị p đáng kể. Trong ví dụ này, sự khác biệt là lớn như hình ảnh hiển thị. Lý do chính là, với tổng số 5 lần phơi sáng, chỉ có ba mức chênh lệch tuyệt đối (5-0, 4-1, 3-2, 2-3, 1-4, 0-5) và chỉ có ba mức p- rời rạc các giá trị (trong trường hợp hai nhóm 400).α
vị nhất là âm mưu xác suất từ chối nếu là đúng và nếu là đúng. Trong trường hợp này, mức độ alpha và sự không thống nhất không quan trọng lắm (chúng tôi biểu thị tỷ lệ loại bỏ hiệu quả) và chúng tôi vẫn thấy một sự khác biệt lớn.H 0 H aH0H0Ha
Câu hỏi vẫn còn cho dù điều này giữ cho tất cả các tình huống có thể.
3 lần điều chỉnh mã phân tích sức mạnh của bạn (và 3 hình ảnh):
sử dụng nhị thức hạn chế cho trường hợp 5 cá nhân bị phơi nhiễm
xác suất hiệu quả để từ chối là chức năng của alpha được chọn. Thử nghiệm chính xác của Fisher được biết là giá trị p được tính toán chính xác nhưng chỉ có một vài cấp độ (các bước) xảy ra nên thường thử nghiệm có thể quá bảo thủ so với mức độ alpha đã chọn.H0
Thật thú vị khi thấy rằng hiệu ứng mạnh hơn nhiều đối với trường hợp 400-400 (màu đỏ) so với trường hợp 400-100-100-100-100 (màu xanh). Do đó, chúng tôi thực sự có thể sử dụng sự phân tách này để tăng sức mạnh, khiến nó có khả năng từ chối H_0 hơn. (mặc dù chúng tôi không quan tâm lắm đến việc làm cho lỗi loại I có nhiều khả năng xảy ra, do đó, điểm thực hiện việc phân tách này để tăng sức mạnh có thể không phải lúc nào cũng mạnh mẽ như vậy)
sử dụng nhị thức không giới hạn ở 5 cá nhân bị phơi nhiễm
Nếu chúng tôi sử dụng nhị thức như bạn đã làm thì cả hai trường hợp 400-400 (đỏ) hoặc 400-100-100-100 (xanh dương) đều cho giá trị p chính xác. Điều này là do thử nghiệm chính xác của Fisher giả định tổng số hàng và cột cố định, nhưng mô hình nhị thức cho phép các giá trị này là miễn phí. Thử nghiệm Fisher sẽ 'khớp' tổng số hàng và cột làm cho số hạng còn lại nhỏ hơn thuật ngữ lỗi thực sự.
Liệu sức mạnh gia tăng có phải trả giá?
Nếu chúng ta so sánh xác suất từ chối khi là đúng và khi là đúng (chúng ta muốn giá trị đầu tiên thấp và giá trị thứ hai cao) thì chúng ta thấy rằng sức mạnh (từ chối khi là đúng) có thể tăng lên mà không cần chi phí mà lỗi loại I tăng.H a H aH0HaHa
# using binomial distribution for 400, 100, 100, 100, 100
# x uses separate cases
# y uses the sum of the 100 groups
p <- replicate(4000, { n <- rbinom(4, 100, 0.006125); m <- rbinom(1, 400, 0.006125);
x <- matrix( c(400 - m, 100 - n, m, n), ncol = 2);
y <- matrix( c(400 - m, 400 - sum(n), m, sum(n)), ncol = 2);
c(sum(n,m),fisher.test(x)$p.value,fisher.test(y)$p.value)} )
# calculate hypothesis test using only tables with sum of 5 for the 1st row
ps <- c(1:1000)/1000
m1 <- sapply(ps,FUN = function(x) mean(p[2,p[1,]==5] < x))
m2 <- sapply(ps,FUN = function(x) mean(p[3,p[1,]==5] < x))
plot(ps,ps,type="l",
xlab = "chosen alpha level",
ylab = "p rejection")
lines(ps,m1,col=4)
lines(ps,m2,col=2)
title("due to concervative test p-value will be smaller\n leading to differences")
# using all samples also when the sum exposed individuals is not 5
ps <- c(1:1000)/1000
m1 <- sapply(ps,FUN = function(x) mean(p[2,] < x))
m2 <- sapply(ps,FUN = function(x) mean(p[3,] < x))
plot(ps,ps,type="l",
xlab = "chosen alpha level",
ylab = "p rejection")
lines(ps,m1,col=4)
lines(ps,m2,col=2)
title("overly conservative, low effective p-values \n fitting marginals makes residuals smaller than real error")
#
# Third graph comparing H_0 and H_a
#
# using binomial distribution for 400, 100, 100, 100, 100
# x uses separate cases
# y uses the sum of the 100 groups
offset <- 0.5
p <- replicate(10000, { n <- rbinom(4, 100, offset*0.0125); m <- rbinom(1, 400, (1-offset)*0.0125);
x <- matrix( c(400 - m, 100 - n, m, n), ncol = 2);
y <- matrix( c(400 - m, 400 - sum(n), m, sum(n)), ncol = 2);
c(sum(n,m),fisher.test(x)$p.value,fisher.test(y)$p.value)} )
# calculate hypothesis test using only tables with sum of 5 for the 1st row
ps <- c(1:10000)/10000
m1 <- sapply(ps,FUN = function(x) mean(p[2,p[1,]==5] < x))
m2 <- sapply(ps,FUN = function(x) mean(p[3,p[1,]==5] < x))
offset <- 0.6
p <- replicate(10000, { n <- rbinom(4, 100, offset*0.0125); m <- rbinom(1, 400, (1-offset)*0.0125);
x <- matrix( c(400 - m, 100 - n, m, n), ncol = 2);
y <- matrix( c(400 - m, 400 - sum(n), m, sum(n)), ncol = 2);
c(sum(n,m),fisher.test(x)$p.value,fisher.test(y)$p.value)} )
# calculate hypothesis test using only tables with sum of 5 for the 1st row
ps <- c(1:10000)/10000
m1a <- sapply(ps,FUN = function(x) mean(p[2,p[1,]==5] < x))
m2a <- sapply(ps,FUN = function(x) mean(p[3,p[1,]==5] < x))
plot(ps,ps,type="l",
xlab = "p rejecting if H_0 true",
ylab = "p rejecting if H_a true",log="xy")
points(m1,m1a,col=4)
points(m2,m2a,col=2)
legend(0.01,0.001,c("400-400","400-100-100-100-100"),pch=c(1,1),col=c(2,4))
title("comparing H_0:p=0.5 \n with H_a:p=0.6")
Tại sao nó ảnh hưởng đến sức mạnh
Tôi tin rằng mấu chốt của vấn đề nằm ở sự khác biệt của các giá trị kết quả được chọn là "đáng kể". Tình hình là năm cá nhân bị phơi bày được rút ra từ 5 nhóm kích thước 400, 100, 100, 100 và 100. Các lựa chọn khác nhau có thể được thực hiện được coi là "cực đoan". rõ ràng sức mạnh tăng lên (ngay cả khi lỗi loại I hiệu quả là như nhau) khi chúng ta đi đến chiến lược thứ hai.
Nếu chúng ta phác họa sự khác biệt giữa chiến lược thứ nhất và thứ hai bằng đồ họa. Sau đó, tôi tưởng tượng một hệ tọa độ có 5 trục (cho các nhóm 400 100 100 100 và 100) với một điểm cho các giá trị giả thuyết và bề mặt mô tả khoảng cách sai lệch mà xác suất nằm dưới một mức nhất định. Với chiến lược đầu tiên, bề mặt này là một hình trụ, với chiến lược thứ hai, bề mặt này là một hình cầu. Điều tương tự cũng đúng với các giá trị thực và một bề mặt xung quanh nó cho lỗi. Những gì chúng ta muốn là sự chồng chéo càng nhỏ càng tốt.
Chúng ta có thể tạo ra một đồ họa thực tế khi chúng ta xem xét một vấn đề hơi khác (với chiều hướng thấp hơn).
Hãy tưởng tượng chúng tôi muốn kiểm tra quy trình Bernoulli bằng cách thực hiện 1000 thử nghiệm. Sau đó, chúng ta có thể thực hiện cùng một chiến lược bằng cách chia 1000 thành các nhóm thành hai nhóm có kích thước 500. Nó trông như thế nào (gọi X và Y là số đếm trong cả hai nhóm)?H0:p=0.5
Cốt truyện cho thấy cách các nhóm 500 và 500 (thay vì một nhóm 1000) được phân phối.
Thử nghiệm giả thuyết tiêu chuẩn sẽ đánh giá (đối với mức độ 95% alpha) cho dù tổng của X và Y lớn hơn 531 hay nhỏ hơn 469.
Nhưng điều này bao gồm phân phối X và Y.
Hãy tưởng tượng một sự thay đổi của phân phối từ sang . Sau đó, các khu vực trong các cạnh không quan trọng lắm, và một ranh giới tròn hơn sẽ có ý nghĩa hơn.H aH0Ha
Tuy nhiên, điều này không đúng (necesarilly) khi chúng ta không chọn cách chia nhóm ngẫu nhiên và khi có thể có ý nghĩa với các nhóm.