regroupement des moyennes suite à un Tukey test

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Charles Trouvé
Messages : 2
Enregistré le : 01 Mar 2018, 08:03

regroupement des moyennes suite à un Tukey test

Messagepar Charles Trouvé » 15 Mar 2018, 14:23

Bonjour à tous,

connaissez vous un moyen de regrouper par groupe, suite à un test de Tukey sur un modèle linéaire mixte, les moyennes qui ne sont pas significativement différentes ?
Le test de Tukey m'a permis de faire des comparaisons 2 à 2, mais maintenant je voudrais faire un regroupement de toute mes moyennes qui ne sont pas significativement différentes.
Voici le genre de table que je sors: (le but est de pouvoir étendre la méthode sur des tables avec plus de données).

Code : Tout sélectionner

            Name âge       diff       pvalue
HE - 3B5 HE - 3B   7   12.74982 1.000000e+00
LO - 3B5 LO - 3B   7  -61.09724 1.886205e-06
LO - HE5 LO - HE   7  -73.84706 5.206251e-09
SR - 3B5 SR - 3B   7  -27.42830 1.808280e-01
SR - HE5 SR - HE   7  -40.17811 6.373539e-03
SR - LO5 SR - LO   7   33.66894 4.180543e-02
TE - 3B5 TE - 3B   7 -123.76057 0.000000e+00
TE - HE5 TE - HE   7 -136.51039 0.000000e+00
TE - LO5 TE - LO   7  -62.66333 4.058717e-06
TE - SR5 TE - SR   7  -96.33227 3.774758e-14


Merci d'avance pour vos réponses !

Charles

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: regroupement des moyennes suite à un Tukey test

Messagepar François Bonnot » 15 Mar 2018, 17:24

Bonjour,
J'ai un jour eu besoin d'écrire une petite fonction (basée sur la fonction TukeyHSD) qui traite ce problème dans le cas simple d'un modèle à effets fixes, je vous la livre sans garantie en vous laissant le soin de l'adapter au cas du modèle mixte.
Je ne garantis pas, en particulier, la validité statistique de la méthode, surtout dans le cas d'un plan non-équilibré (les moyennes ne sont pas ajustées).
Les fonctions :

Code : Tout sélectionner

is.diff <- function(i,j,x,tuk.df,alpha){
  if (i==j) return(FALSE)
  name <- paste(names(x)[j],names(x)[i],sep='-')
  tuk.df[name,"p adj"]<alpha
}

groups <- function(x,tuk.df,alpha,hole.rm=FALSE){
  x <- sort(x)
  n <- length(x)
  m <- sapply(1:n,function(i) { j <- i:n ; max(j[sapply(j,function(k) !is.diff(i,k,x,tuk.df,alpha))]) })
  diff <- c(0,diff(m))
  if (any(diff<0))
    if (hole.rm){
      diff[diff>0] <- 0
      m <- m-diff
      cat("Warning: Holes have been removed.\n")
    }
    else cat("Warning: Groups contain holes. Use 'hole.rm=TRUE' to remove them.\n")
  group.min <- sapply(split(1:n,m),min)
  group.max <- as.numeric(names(group.min))
  ngroup <- length(group.min)
  group <- matrix(" ",nrow=n,ncol=ngroup)
  for (j in 1:ngroup) group[group.min[j]:group.max[j],j] <- letters[j]
  data.frame(x,groups=apply(group,1,paste,collapse=""))
}

TukeyHSD.group <- function(aov.res,which,conf.level=0.95,digits=2,hole.rm=FALSE){
  mt <- model.tables(aov.res,type="means",cterms=which)
  tuk <- TukeyHSD(aov.res,which,ordered=TRUE)
  text <- paste("groups(round(mt$table$",which,",",digits,"),tuk$",which,",1-conf.level,hole.rm=hole.rm)",sep='')
  eval(parse(text=text))
}

Un exemple reproductible :

Code : Tout sélectionner

df <- expand.grid(traitement=1:10,bloc=1:6)
df$x <- 100+df$traitement+df$bloc+rnorm(60)
df$bloc <- factor(df$bloc)
df$traitement <- factor(paste("Traitement",df$traitement))
mod <- aov(x~bloc+traitement,data=df)
anova(mod)
TukeyHSD.group(mod,"traitement")
François

Eric Wajnberg
Messages : 778
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: regroupement des moyennes suite à un Tukey test

Messagepar Eric Wajnberg » 16 Mar 2018, 05:14

Au cas où ceci puisse aider, il y a des packages R qui font ça avec des modèle à effets fixes. Par exemple, si je me souviens bien, le package agricola. A voir si ça peut fonctionner sur des modèles mixtes.

Eric.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité