J'ai rencontré un comportement paradoxal de soi-disant "tests exacts" ou "tests de permutation", dont le prototype est le test de Fisher. C'est ici.
Imaginez que vous avez deux groupes de 400 individus (par exemple 400 témoins contre 400 cas) et une covariable avec deux modalités (par exemple exposée / non exposée). Il n'y a que 5 individus exposés, tous dans le deuxième groupe. Le test de Fisher ressemble à ceci:
> 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
(...)
Mais maintenant, il y a une certaine hétérogénéité dans le deuxième groupe (les cas), par exemple la forme de la maladie ou le centre de recrutement. Il peut être divisé en 4 groupes de 100 individus. Quelque chose comme ça est susceptible de se produire:
> 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
(...)
Maintenant, nous avons ...
Ce n'est qu'un exemple. Mais nous pouvons simuler la puissance des deux stratégies d'analyse, en supposant que chez les 400 premiers individus, la fréquence d'exposition est de 0, et qu'elle est de 0,0125 chez les 400 individus restants.
On peut estimer la puissance de l'analyse avec deux groupes de 400 individus:
> 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
Et avec un groupe de 400 et 4 groupes de 100 personnes:
> 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
Il y a une grande différence de puissance. La division des cas en 4 sous-groupes donne un test plus puissant, même s'il n'y a pas de différence de distribution entre ces sous-groupes. Bien entendu, ce gain de puissance n'est pas attribuable à une augmentation du taux d'erreur de type I.
Ce phénomène est-il bien connu? Est-ce à dire que la première stratégie est sous-alimentée? Une valeur p amorcée serait-elle une meilleure solution? Tous vos commentaires sont les bienvenus.
Post Scriptum
Comme l'a souligné @MartijnWeterings, une grande partie de la raison de ce comportement (ce qui n'est pas exactement ma question!) Réside dans le fait que les véritables erreurs de type I des stratégies d'analyse de remorquage ne sont pas les mêmes. Mais cela ne semble pas tout expliquer. J'ai essayé de comparer les courbes ROC pour vs .H 1 : p 0 = 0,05 ≠ p 1 = 0,0125
Voici mon 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)
Voici le résultat:
Nous voyons donc qu'une comparaison avec la même erreur de type I véritable conduit toujours à des différences (bien plus faibles).