Дивовижна поведінка сили точного тесту Фішера (тести перестановки)


9

Я зустрів парадоксальну поведінку так званих "точних тестів" або "тестів на перестановку", прототипом яких є тест Фішера. Ось.

Уявіть, що у вас є дві групи з 400 осіб (наприклад, 400 контрольних проти 400 випадків) і коваріат з двома способами (наприклад, піддаються / не піддаються впливу). Є лише 5 осіб, що піддаються впливу, всі в другій групі. Тест Фішера йде так:

> x <- matrix( c(400, 395, 0, 5) , ncol = 2)
> x
     [,1] [,2]
[1,]  400    0
[2,]  395    5
> fisher.test(x)

    Fisher's Exact Test for Count Data

data:  x
p-value = 0.06172
(...)

Але зараз, у другій групі (випадки) є певна неоднорідність, наприклад, форма захворювання або центр рекрутингу. Його можна розділити на 4 групи по 100 особин. Щось подібне, можливо, станеться:

> x <- matrix( c(400, 99, 99 , 99, 98, 0, 1, 1, 1, 2) , ncol = 2)
> x
     [,1] [,2]
[1,]  400    0
[2,]   99    1
[3,]   99    1
[4,]   99    1
[5,]   98    2
> fisher.test(x)

    Fisher's Exact Test for Count Data

data:  x 
p-value = 0.03319
alternative hypothesis: two.sided
(...)

Тепер у нас ...p<0.05

Це лише приклад. Але ми можемо моделювати потужність двох стратегій аналізу, припускаючи, що у перших 400 особин частота опромінення дорівнює 0, а в 400 осіб, що залишилися, це 0,0125.

Ми можемо оцінити потужність аналізу з двома групами з 400 осіб:

> p1 <- replicate(1000, { n <- rbinom(1, 400, 0.0125); 
                          x <- matrix( c(400, 400 - n, 0, n), ncol = 2); 
                          fisher.test(x)$p.value} )
> mean(p1 < 0.05)
[1] 0.372

І з однією групою з 400 та 4 групами з 100 особин:

> p2 <- replicate(1000, { n <- rbinom(4, 100, 0.0125); 
                          x <- matrix( c(400, 100 - n, 0, n), ncol = 2);
                          fisher.test(x)$p.value} )
> mean(p2 < 0.05)
[1] 0.629

Існує велика різниця в потужності. Поділ випадків на 4 підгрупи дає більш потужний тест, навіть якщо різниці розподілу між цими підгрупами немає. Звичайно, цей приріст потужності не можна пояснити збільшенням помилок типу I.

Чи відоме це явище? Чи означає це, що перша стратегія є недостатньою? Чи було б завантажене p-значення кращим рішенням? Всі ваші коментарі вітаються.

Post Scriptum

Як вказував @MartijnWeterings, велика частина причин такої поведінки (що не є точно моїм питанням!) Полягає в тому, що справжні помилки типу I стратегій буксирування аналізу не однакові. Однак, схоже, це не все пояснює. Я спробував порівняти криві ROC для проти .H0:p0=p1=0.005H1:p0=0.05p1=0.0125

Ось мій код.

B <- 1e5
p0 <- 0.005
p1 <- 0.0125

# simulation under H0 with p = p0 = 0.005 in all groups
# a = 2 groups 400:400, b = 5 groupe 400:100:100:100:100

p.H0.a <- replicate(B, { n <- rbinom( 2, c(400,400), p0);
                           x <- matrix( c( c(400,400) -n, n ), ncol = 2);
                          fisher.test(x)$p.value} )

p.H0.b <- replicate(B, { n <- rbinom( 5, c(400,rep(100,4)), p0);
                           x <- matrix( c( c(400,rep(100,4)) -n, n ), ncol = 2);
                          fisher.test(x)$p.value} )

# simulation under H1 with p0 = 0.005 (controls) and p1 = 0.0125 (cases)

p.H1.a <- replicate(B, { n <- rbinom( 2, c(400,400), c(p0,p1) );
                           x <- matrix( c( c(400,400) -n, n ), ncol = 2);
                          fisher.test(x)$p.value} )

p.H1.b <- replicate(B, { n <- rbinom( 5, c(400,rep(100,4)), c(p0,rep(p1,4)) );
                           x <- matrix( c( c(400,rep(100,4)) -n, n ), ncol = 2);
                          fisher.test(x)$p.value} )

# roc curve 

ROC <- function(p.H0, p.H1) {
  p.threshold <- seq(0, 1.001, length=501)
  alpha <- sapply(p.threshold, function(th) mean(p.H0 <= th) )
  power <- sapply(p.threshold, function(th) mean(p.H1 <= th) )
  list(x = alpha, y = power)
}

par(mfrow=c(1,2))
plot( ROC(p.H0.a, p.H1.a) , type="b", xlab = "alpha", ylab = "1-beta" , xlim=c(0,1), ylim=c(0,1), asp = 1)
lines( ROC(p.H0.b, p.H1.b) , col="red", type="b" )
abline(0,1)

plot( ROC(p.H0.a, p.H1.a) , type="b", xlab = "alpha", ylab = "1-beta" , xlim=c(0,.1) )
lines( ROC(p.H0.b, p.H1.b) , col="red", type="b" )
abline(0,1)

Ось результат:

криві roc

Отже, ми бачимо, що порівняння при одній істинній помилці I типу все ще призводить до (дійсно набагато менших) відмінностей.


Я не розумію. Розщеплення групи випадків може мати сенс, коли всередині нього підозрюється деяка неоднорідність - скажімо, вони походять з 5 різних центрів. Розбиття «відкритої» модальності мені, здається, не має сенсу.
Елвіс

1
Якби ми графічно змалювали різницю між першою та другою стратегією. Тоді я уявляю систему координат з 5 осями (для груп 400 100 100 100 та 100) з точкою для значень гіпотези та поверхнею, яка зображує відстань відхилення, за якою ймовірність нижче певного рівня. З першою стратегією ця поверхня є циліндром, з другою стратегією ця поверхня - сфера. Те саме стосується істинних значень та поверхні навколо нього для помилки. Ми хочемо, щоб перекриття було якомога меншим.
Секст Емпірік

1
Я прийняв кінець свого питання, даючи трохи більше розуміння міркувань, чому існує різниця між двома методами.
Секст Емпірік

1
Я вважаю, що точний тест Барнард використовується, коли фіксований лише один з двох запасів. Але, ймовірно, ви отримаєте ті самі ефекти.
Секст Емпірік

1
Ще одна (більше) цікава примітка, яку я хотів зробити, - це те, що потужність насправді зменшується при тестуванні на p0> p1. Таким чином, потужність збільшується, коли p1> p0, на тому самому рівні альфа. Але потужність зменшується, коли p1 <p0 (я навіть отримую криву, яка знаходиться нижче діагоналі).
Секст Емпірік

Відповіді:


4

Чому р-значення різні

Діють два ефекти:

  • Через дискретність значень ви обираєте вектор "найімовірніше, що трапиться" 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 більш імовірною, тому сенс цього розколу для збільшення потужності не завжди може бути настільки сильним)

різні ймовірності відхилення H0

з використанням біноміальних, не обмежуючих 5 опромінених осіб

Якщо ми використовуємо двочлен, як ви, то жоден із двох випадків 400-400 (червоний) або 400-100-100-100-100 (синій) не дає точного p-значення. Це відбувається тому, що точний тест Фішера передбачає підсумки фіксованих рядків і стовпців, але біноміальна модель дозволяє бути вільними. Тест Фішера "помістить" підсумки рядків і стовпців, зробивши залишковий термін меншим, ніж істинний термін помилки.

надто консервативний точний тест Фішера

чи збільшується потужність?

Якщо ми порівняємо ймовірність відхилення, коли є істинним, і коли є істинним (ми бажаємо, щоб перше значення було низьким, а друге значення було високим), то ми бачимо, що дійсно потужність (відхиляючи, коли є правдою) може бути збільшена без вартість, яка збільшує помилку I типу.H0HaHa

порівнюючи H_0 і H_a

# 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

Однак це не (необхідно) вірно, коли ми не вибираємо розбиття груп випадковим чином і коли для них може бути сенс.


Спробуйте запустити мій код для оцінки потужності, просто замінивши 0,0125 на 0,02 (щоб відповідати вашим пропозиціям мати середнє 8 виявлених випадків): аналіз 400 проти 400 має потужність 80%, а аналіз з 5 групами має потужність 90%.
Елвіс

Однак я згоден, що статистика може приймати менше різних значень у першій ситуації, і це не допомагає. Однак цього недостатньо для пояснення проблеми: цю перевагу по потужності можна спостерігати для всіх рівнів помилок типу I, не тільки 0,05. Кванти р-значень, отриманих за другою стратегією, завжди нижчі, ніж ті, отримані першою.
Елвіс

Я думаю, я згоден з тим, що ти кажеш. Але який висновок? Чи рекомендуєте ви розділити випадково групу справ на 4 підгрупи, щоб отримати певну силу? Або ви згодні зі мною, що це не може бути виправдано?
Елвіс

Я думаю, що проблема полягає не в тому, що тест із випадками, розділеними на 4 підгрупи, може мати погані властивості - ми обидва погодилися з тим, що рівень помилок типу I повинен вести себе добре. Я думаю, що проблема полягає в тому, що тест з 400 контрольних і 400 випадків недостатній. Чи є якесь «чисте» рішення для цього? Чи може допомогти завантажувальне значення p?
Елвіс

(Мені шкода, що моє запитання було не зовсім ясним!)
Елвіс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.