Estimation de la puissance du test de Wilcoxon

Même si l'hypothèse de normalité n'est pas vraie, Student a tendance à avoir une meilleure puissance. Ce ne serait plus vrai en ajoutant des outliers. A noter que pour une meilleure lisibilité sur le graphique, les lois normales ont un écart type de 0.5.
Le code R qui a servi :
pval <- function(m2,m1,n,loi,test) { if (loi == 'uniforme') { x1 <- runif(n,m1-0.5,m1+0.5) x2 <- runif(n,m2-0.5,m2+0.5) } else if (loi == 'normale' ){ x1 <- rnorm(n,m1,0.5) x2 <- rnorm(n,m2,0.5) } if (test == 'wilcoxon') { return ( wilcox.test(x1,x2)$p.value ) } else if (test == 'student') { return ( t.test(x1,x2,var.equal = TRUE)$p.value ) } } puissance <- function(m2,loi,test,m1=0,n=20, alpha=0.05, N=1000) { pvals <- replicate(N,pval(m2,m1,n,loi,test)) return ( sum(pvals < alpha)/N ) } differences.moyennes <- seq(0,0.9,by=0.02) pw.loi.uniforme <- c() pw.loi.normale <- c() ps.loi.uniforme <- c() ps.loi.normale <- c() for (d in differences.moyennes) { pw.loi.uniforme <- c(pw.loi.uniforme, puissance(d, 'uniforme', 'wilcoxon')) pw.loi.normale <- c(pw.loi.normale, puissance(d, 'normale', 'wilcoxon')) ps.loi.uniforme <- c(ps.loi.uniforme, puissance(d, 'uniforme', 'student')) ps.loi.normale <- c(ps.loi.normale, puissance(d, 'normale', 'student')) } plot(differences.moyennes, pw.loi.uniforme, col=2, ylab = 'puissance du test') points(differences.moyennes,ps.loi.uniforme, col=3 ) points(differences.moyennes,pw.loi.normale, col=4 ) points(differences.moyennes,ps.loi.normale, col=5 ) legend("bottomright",legend=c( 'wilcoxon - loi uniforme', 'Student - loi uniforme', 'wilcoxon - loi normale', 'Student - loi normale'),col=2:5,pch=1)