Ich traf auf ein paradoxes Verhalten von sogenannten "exakten Tests" oder "Permutationstests", deren Prototyp der Fisher-Test ist. Hier ist es.
Stellen Sie sich vor, Sie haben zwei Gruppen von 400 Personen (z. B. 400 Kontrollpersonen gegenüber 400 Fällen) und eine Kovariate mit zwei Modalitäten (z. B. exponiert / nicht exponiert). Es gibt nur 5 exponierte Personen, alle in der zweiten Gruppe. Der Fisher-Test sieht folgendermaßen aus:
> 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
(...)
Aber jetzt gibt es eine gewisse Heterogenität in der zweiten Gruppe (den Fällen), z. B. die Form der Krankheit oder das Rekrutierungszentrum. Es kann in 4 Gruppen von 100 Personen aufgeteilt werden. So etwas wird wahrscheinlich passieren:
> 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
(...)
Jetzt haben wir ...
Dies ist nur ein Beispiel. Wir können jedoch die Leistungsfähigkeit der beiden Analysestrategien simulieren, vorausgesetzt, dass bei den ersten 400 Personen die Expositionshäufigkeit 0 und bei den 400 verbleibenden Personen 0,0125 beträgt.
Wir können die Aussagekraft der Analyse mit zwei Gruppen von 400 Personen abschätzen:
> 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
Und mit einer Gruppe von 400 und 4 Gruppen von 100 Personen:
> 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
Es gibt einen ziemlichen Machtunterschied. Die Aufteilung der Fälle in 4 Untergruppen ergibt einen leistungsfähigeren Test, auch wenn es keinen Unterschied in der Verteilung zwischen diesen Untergruppen gibt. Natürlich ist dieser Leistungsgewinn nicht auf eine erhöhte Fehlerrate vom Typ I zurückzuführen.
Ist dieses Phänomen bekannt? Bedeutet das, dass die erste Strategie nicht ausreichend ist? Wäre ein Bootstrap-P-Wert eine bessere Lösung? Alle Ihre Kommentare sind willkommen.
Post Scriptum
Wie von @MartijnWeterings hervorgehoben, liegt ein großer Teil des Grundes für dieses Verhalten (was nicht genau meine Frage ist!) In der Tatsache, dass die wahren Typ-I-Fehler der Schleppanalysestrategien nicht dieselben sind. Dies scheint jedoch nicht alles zu erklären. Ich habe versucht, die ROC-Kurven für zu vergleichen gegen .H 1 : p 0 = 0,05 ≠ p 1 = 0,0125
Hier ist mein Code.
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)
Hier ist das Ergebnis:
Wir sehen also, dass ein Vergleich mit demselben wahren Typ-I-Fehler immer noch zu (tatsächlich viel kleineren) Unterschieden führt.