# auteur : Christian Jost # http://cognition.ups-tlse.fr/vas-y.php?id=chj ############################################################################### # Test non paramétrique de comparaisons multiples avec des échantillons # # de taille différentes. Nemenyi and Dunn (Zar 1999). # # A faire si Kruskal-Wallis rejette H0, pour savoir où sont les différences# ############################################################################### nemenyi.test <- function(t,alpha=0.05) { ######################################################################## k=length(t); # nombre de groupes# tmp={}; ####nombre d'évènements# N=0; n=rep(0,k); for(i in 1:k) { N=N+length(t[[i]]); tmp=c(tmp,t[[i]]); n[i]=length(t[[i]]); } ####rang moyen du groupe i# a=1; b=0; R=rep(0,k); for(i in 1:k) { b=b+n[i]; R[i]=mean(rank(tmp)[a:b]); a=a+n[i]; } ####calcul les nombres de rangs égaux# t={}; tmp=sort(rank(tmp)); c=1; for (i in 1:(N-1)) { if (tmp[i]==tmp[i+1]) { c=c+1; } else { t=c(t,c); c=1; } i=i+1 } T=sum(t^3-t); res=matrix(NA,nrow=k,ncol=k); SE=matrix(data=0,nrow=k,ncol=k); Q=matrix(data=0,nrow=k,ncol=k); rang = rank(R); for (i in k:2) { for (j in 1:(i-1)) { ii = rang[i]; jj=rang[j]; #res[ii,jj]=FALSE; SE[ii,jj]=sqrt( ( N*(N+1)/12 - T/(12*(N-1)) )*(1/n[ii]+1/n[jj]) ); #statistique de test# Q[ii,jj]=abs(R[ii]-R[jj])/SE[ii,jj]; #si Q>Q(0.05,k) H0 rejetée# if (Q[ii,jj]>-qnorm(alpha/(k*(k-1)))) { res[ii,jj]=TRUE; } else { res[ii,jj]=FALSE; } #if (res[ii,jj]==FALSE) { break }; } } return(list(H0="H0: mean(i)=mean(j)" , Q=Q , Qseuil=-qnorm(alpha/(k*(k-1))), rankedRankSums = rang, interpretation="If Q[i,j]>Qseuil then reject H0: mean(i)=mean(j)")); } ; # fin de fonction nemenyi.test ########################################################################