Puissance du test de Wilcoxon

Estimation de la puissance du test de Wilcoxon

puissances comparées des tests de Wilcoxon et de Student

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)
Design selector