Чому р-значення різні
Діють два ефекти:
Через дискретність значень ви обираєте вектор "найімовірніше, що трапиться" 0 2 1 1 1. Але це відрізнятиметься від (неможливо) 0 1,25 1,25 1,25 1,25, яке мало б менше значення .χ2
Результатом є те, що вектор 5 0 0 0 0 вже не рахується як мінімум в крайньому випадку (5 0 0 0 0 має менший ніж 0 2 1 1 1). Так було і раніше. Двосторонній тест Фішера на підрахунків 2х2 таблиці обох випадках 5 експозицій , які перебувають в першої або другої групи в рівній мірі екстремальним.χ2
Ось чому значення р відрізняється майже на коефіцієнт 2. (не саме через наступну точку)
Хоча ви втрачаєте 5 0 0 0 0 як однаково екстремальний випадок, ви отримуєте 1 4 0 0 0 як більш екстремальний випадок, ніж 0 2 1 1 1.
Таким чином, різниця знаходиться в межі значення (або безпосередньо обчисленому p-значенні, яке використовується R-реалізацією точного тесту Фішера). Якщо ви розділите групу з 400 на 4 групи з 100, то різні випадки вважатимуться більш-менш «крайніми», ніж інші. 5 0 0 0 0 зараз менш "екстремальний", ніж 0 2 1 1 1. Але 1 4 0 0 0 є більш "крайнім".χ2
Приклад коду:
# 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)
вихід цього останнього біта
> 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
Як це впливає на владу при розбитті груп
Існують деякі відмінності через дискретні кроки у "доступних" рівнях p-значень та консервативність точного тесту Фішера (і ці відмінності можуть стати досить великими).
також тест Фішера відповідає моделі (невідомої) на основі даних, а потім використовує цю модель для обчислення р-значень. Модель у прикладі полягає в тому, що там знаходиться рівно 5 осіб, що піддаються впливу. Якщо ви змоделюєте дані двочленними для різних груп, ви отримуєте зрідка більше або менше 5 особин. Якщо ви застосуєте для цього тест рибалки, то деяка помилка буде встановлена, а залишки будуть меншими порівняно з тестами з фіксованими маргіналами. Результат полягає в тому, що тест є занадто консервативним, не точним.
Я очікував, що ймовірність помилок експерименту типу I не буде настільки великою, якщо ви випадково розділите групи. Якщо нульова гіпотеза відповідає дійсності, тоді ви зіткнетесь приблизно в відсотках випадків із значним р-значенням. У цьому прикладі відмінності великі, як показує зображення. Основна причина полягає в тому, що загалом 5 експозицій мають лише три рівні абсолютної різниці (5-0, 4-1, 3-2, 2-3, 1-4, 0-5) і лише три дискретні p- значення (у випадку двох груп по 400).α
Найцікавішим є графік ймовірностей відхилити якщо є істинним, а якщо - істинним. У цьому випадку рівень альфа та дискретність не так важливі (ми побудуємо ефективну швидкість відхилення), і ми все ще бачимо велику різницю.H0H0Ha
Залишається питання, чи це стосується всіх можливих ситуацій.
3-кратне коригування коду вашого аналізу потужності (і 3 зображення):
використовуючи біноміальне обмеження для 5 осіб, що піддаються впливу
Сюжети ефективної ймовірності відхилити як функцію вибраного альфа. Точному тесту Фішера відомо, що р-значення точно розраховується, але лише кілька рівнів (кроків) трапляються, тому часто тест може бути занадто консервативним щодо вибраного альфа-рівня.H0
Цікаво побачити, що ефект значно сильніший для випадку 400-400 (червоний) проти корпусу 400-100-100-100-100 (синій). Таким чином, ми можемо використовувати цей розкол для збільшення потужності, зробимо більше шансів відхилити H_0. (хоча ми не так сильно ставимося до того, щоб зробити помилку типу I більш імовірною, тому сенс цього розколу для збільшення потужності не завжди може бути настільки сильним)
з використанням біноміальних, не обмежуючих 5 опромінених осіб
Якщо ми використовуємо двочлен, як ви, то жоден із двох випадків 400-400 (червоний) або 400-100-100-100-100 (синій) не дає точного p-значення. Це відбувається тому, що точний тест Фішера передбачає підсумки фіксованих рядків і стовпців, але біноміальна модель дозволяє бути вільними. Тест Фішера "помістить" підсумки рядків і стовпців, зробивши залишковий термін меншим, ніж істинний термін помилки.
чи збільшується потужність?
Якщо ми порівняємо ймовірність відхилення, коли є істинним, і коли є істинним (ми бажаємо, щоб перше значення було низьким, а друге значення було високим), то ми бачимо, що дійсно потужність (відхиляючи, коли є правдою) може бути збільшена без вартість, яка збільшує помилку I типу.H0HaHa
# 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")
Чому це впливає на владу
Я вважаю, що головна проблема полягає в різниці значень результатів, які обрані "значущими". Ситуація складається з п'яти опромінених осіб із 5 груп розміром 400, 100, 100, 100 та 100. Можна зробити різні вибори, які вважаються "крайніми". мабуть, потужність зростає (навіть коли ефективна помилка I типу однакова), коли ми переходимо до другої стратегії.
Якби ми графічно змалювали різницю між першою та другою стратегією. Тоді я уявляю систему координат з 5 осями (для груп 400 100 100 100 та 100) з точкою для значень гіпотези та поверхнею, яка зображує відстань відхилення, за якою ймовірність нижче певного рівня. З першою стратегією ця поверхня є циліндром, з другою стратегією ця поверхня - сфера. Те саме стосується істинних значень та поверхні навколо нього для помилки. Ми хочемо, щоб перекриття було якомога меншим.
Ми можемо зробити фактичну графіку, коли розглянемо дещо іншу проблему (із меншими розмірами).
Уявіть, що ми хочемо протестувати процес Бернуллі , зробивши 1000 експериментів. Тоді ми можемо виконати ту саму стратегію, розділивши 1000 на групи на дві групи розміром 500. Як це виглядає (нехай X і Y є рахунками в обох групах)?H0:p=0.5
Сюжет показує, як розподіляються групи 500 і 500 (замість однієї групи з 1000).
Стандартний тест гіпотези дозволив би оцінити (для 95% альфа-рівня), чи сума X і Y більша за 531 або менша за 469.
Але це включає в себе дуже малоймовірний нерівномірний розподіл X і Y.
Уявіть зміщення розподілу від до . Тоді регіони в краях не так важливі, і більш кругла межа мала б більше сенсу.H0Ha
Однак це не (необхідно) вірно, коли ми не вибираємо розбиття груп випадковим чином і коли для них може бути сенс.