comment faire un test de tukey par groupe

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

aurelie ducasse
Messages : 1
Enregistré le : 20 Avr 2021, 09:09

comment faire un test de tukey par groupe

Messagepar aurelie ducasse » 22 Avr 2021, 12:54

Bonjour,
je souhaiterai faire des tests stats par groupe pour éviter beaucoup de subset et multiplier les tests
voici ma problématique simplifiée :
- variable de réponse = Biomasse
- variable explicative = Traitement (3 doses)
- variable de groupe = Variete (7 variétés de blé)
Je voudrai connaître l'effet des différents traitements sur la biomasse de la plante mais par variété et non globalement.
Pour m'eviter de faire des subset par variété, auriez-vous une astuce assez simple (car je ne suis pas experte en R) pour que je puisse faire mes différents tests par variété en une fois?

J'ai tenté ça pour faire une Anova :
res1 <- ddply(data, "Variete", function(data)
Anova(lm(Biomasse~Traitement, data = data)))
res1
et R me donne ce tableau :
# Variete Sum Sq Df F value Pr(>F)
#1 anv_anv 0.01235245 2 0.7781847 4.630106e-01
#2 cul_cul 0.05015412 2 2.2831639 1.075296e-01
#3 obe_obe 0.12516923 2 9.1905189 2.821369e-04 ***
#4 pes_pes 0.06701308 2 4.1885097 1.959465e-02 *
#5 scu_scu 0.02899102 2 2.0876259 1.319727e-01
#6 sur_sur 0.02364750 2 2.6199736 8.003770e-02
#7 voi_voi 0.15099909 2 18.4103891 3.913775e-07 ***

Jusque là je suis contente car j'obtient que la moyenne d'au moins un des trois traitements diffère des deux autres pour les variétés "obe", "pes" et "voi". Je veux donc ensuite savoir quels traitements diffèrent des autres. Mais c'est là que ça se complique! Je n'arrive pas à faire la même chose pour faire un test de Tukey par variété :-(
j'ai essayé dans le même genre :

library(multcomp)
res1b <- dlply(data, "Variété", function(data)
glht(lm(Biomasse~Traitement, data = data), linfct=mcp(Traitement="Tukey")))
res1b

mais ça ne fonctionne absolument pas :-(
Auriez-vous une idée svp?

Facundo Muñoz
Messages : 156
Enregistré le : 04 Juil 2019, 09:58
Contact :

Re: comment faire un test de tukey par groupe

Messagepar Facundo Muñoz » 23 Avr 2021, 19:47

Bonsoir,

Désolé, mais je ne peux pas reproduire vos sorties. Ça peut être pour plusieurs raisons :

1. Je n'ai pas un jeu de données comme le votre. J'ai essayé d'en simuler un en respectant vos informations, mais peut-être il manque un détail important.
2. Vous utilisez des fonctions sans expliciter leurs packages. J'ai essayer avec deux packages qui fournissent de fonctionnes avec ces noms, mais je ne suis pas sûr que ce soient les mêmes que vous utilisez. Les versions des packages pourraient être importantes aussi.

C'est pour quoi, il est toujours utile d'avoir un code reproductible pour illustrer le problème, avec des données minimalistes.


Je vous laisse ici en bas mon code avec le résultat d'un tableau qui n'est pas pareil que le votre car il compte de deux lignes par variété, en lieu de une seule.

Coté statistique, je ne comprends pas pour quoi vous faites plusieurs tests anovas, et puis plusieurs tests de Tukey, en lieu de faire un seul simple modèle de régression linéaire avec des effets fixes Variete, Traitement et leur interaction.

Cordialement,

Code : Tout sélectionner

library(car)       # Anova() ?
#> Loading required package: carData
library(plyr)      # ddply() ?
library(multcomp)  # glht()
#> Loading required package: mvtnorm
#> Loading required package: survival
#> Loading required package: TH.data
#> Loading required package: MASS
#>
#> Attaching package: 'TH.data'
#> The following object is masked from 'package:MASS':
#>
#>     geyser
library(tidyverse)

## Jeu de données de test ?
dat <- expand.grid(
  Traitement = paste("dose", 1:3, sep = "_"),
  Variete = paste("V", 1:7, sep = "_")
) %>%
  mutate(
    Biomasse = pmap(., ~rnorm(100))
  ) %>%
  unnest(col = Biomasse)

## Votre test
(res1 <- ddply(dat, "Variete", function(data)
  Anova(lm(Biomasse ~ Traitement, data = data)))
)
#>    Variete      Sum Sq  Df    F value    Pr(>F)
#> 1      V_1   0.9132963   2 0.41250753 0.6623669
#> 2      V_1 328.7806703 297         NA        NA
#> 3      V_2   1.5535781   2 0.76998431 0.4639424
#> 4      V_2 299.6247420 297         NA        NA
#> 5      V_3   0.7640294   2 0.38058043 0.6837974
#> 6      V_3 298.1192934 297         NA        NA
#> 7      V_4   2.3211265   2 1.19605934 0.3038356
#> 8      V_4 288.1857738 297         NA        NA
#> 9      V_5   0.1707778   2 0.09280654 0.9113962
#> 10     V_5 273.2619961 297         NA        NA
#> 11     V_6   0.4497765   2 0.22177549 0.8012277
#> 12     V_6 301.1686026 297         NA        NA
#> 13     V_7   1.2490279   2 0.61844635 0.5394732
#> 14     V_7 299.9138721 297         NA        NA

## Pas le même type de résultats
ƒacu.-


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité