Faire un test de Wilcoxon en boucle

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

Patricia OBEID
Messages : 68
Enregistré le : 10 Avr 2017, 19:03

Faire un test de Wilcoxon en boucle

Messagepar Patricia OBEID » 23 Déc 2021, 07:54

Bonjour,
Je souhaiterais calculer et regrouper dans un tableau les pvalues d’un test de Wilcoxon pour toutes les comparaisons 2 à 2 possibles.
Je pense qu’il faut utiliser pairwise.wilcox.test.
J’ai un dataframe dans lequel chaque ligne correspond à une cellule.
Je souhaite comparer les moyennes de fluo (Mean) pour chaque Cond1.
Mais je butte sur « Error in factor(g) : objet 'Cond1' introuvable ».
J’ai essayé de « convertir » Cond1 en ClassNb (Numeric, factor ou character) Même message d’erreur qu’avec Cond1 …
En fait, je ne comprends pas à quoi correspond g (grouping vector or factor)

Voici mon script :

Code : Tout sélectionner

df3 <- read.csv("df3.csv",header=T, stringsAsFactors = F)
pairwise.wilcox.test(Mean, Cond1 , p.adj = "bonf")


et mon dataframe :

Code : Tout sélectionner

> dput(df3)
structure(list(Cond1 = c("OP_L2_J04", "OP_L2_J04", "OP_L2_J04",
"OP_L2_J04", "OP_L2_J04", "OP_L2_J04", "OP_L2_J04", "OP_L2_J04",
"OP_L2_J04", "OP_L2_J04", "OP_L2_J04", "OP_L2_J04", "OP_L2_J04",
"OP_L2_J04", "OP_L2_J04", "OP_L2_J04", "OP_L2_J04", "OP_L2_J04",
"OP_L2_J04", "OP_L2_J04", "OP_L2_J04", "OP_L2_J04", "OP_L2_J04",
"OP_L2_J04", "OP_L2_J04", "OP_L2_J04", "OP_L2_J04", "OP_L2_J04",
"OP_L2_J04", "OP_L2_J04", "OP_L2_J01", "OP_L2_J01", "OP_L2_J01",
"OP_L2_J01", "OP_L2_J01", "OP_L2_J01", "OP_L2_J01", "OP_L2_J01",
"OP_L2_J01", "OP_L2_J01", "OP_L2_J01", "OP_L2_J01", "OP_L2_J01",
"OP_L2_J01", "OP_L2_J01", "OP_L2_J01", "OP_L2_J01", "OP_L2_J01",
"OP_L2_J01", "OP_L2_J01", "OP_L2_J01", "OP_L2_J01", "OP_L2_J01",
"OP_L2_J01", "OP_L2_J01", "OP_L2_J01", "OP_L2_J01", "OP_L2_J01",
"OP_L2_J01", "OP_L2_J01", "OP_L2_J14", "OP_L2_J14", "OP_L2_J14",
"OP_L2_J14", "OP_L2_J14", "OP_L2_J14", "OP_L2_J14", "OP_L2_J14",
"OP_L2_J14", "OP_L2_J14", "OP_L2_J14", "OP_L2_J14", "OP_L2_J14",
"OP_L2_J14", "OP_L2_J14", "OP_L2_J14", "OP_L2_J14", "OP_L2_J14",
"OP_L2_J14", "OP_L2_J14", "OP_L2_J14", "OP_L2_J14", "OP_L2_J14",
"OP_L2_J14", "OP_L2_J14", "OP_L2_J14", "OP_L2_J14", "OP_L2_J14",
"OP_L2_J14", "OP_L2_J14"), ClassNb = c(19L, 19L, 19L, 19L, 19L,
19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L,
19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L,
19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L,
19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L,
19L, 19L, 19L, 21L, 21L, 21L, 21L, 21L, 21L, 21L, 21L, 21L, 21L,
21L, 21L, 21L, 21L, 21L, 21L, 21L, 21L, 21L, 21L, 21L, 21L, 21L,
21L, 21L, 21L, 21L, 21L, 21L, 21L), Mean = c(3826.67, 3344.29,
3407.1, 3534.19, 3299.52, 3426.14, 3270, 3587, 3246, 4820.25,
4821.56, 5175.2, 4814, 4799.75, 4749.67, 4990.92, 4743, 4744.67,
5004.33, 6785.59, 5803.29, 6358.91, 34211.12, 27182, 26775.33,
32392.54, 1803, 2129.9, 2032.4, 1808, 2005.91, 1918.75, 1941.06,
1835.5, 3129, 3220.5, 3175, 3162, 4833, 4830, 4911.47, 5628.67,
4364.5, 4523.36, 4739.65, 4346.76, 4145, 6064.6, 4730, 4673,
5369.44, 5216.62, 6299.1, 6329.84, 5829.26, 5882, 5854, 6216.22,
7468.46, 4863.86, 13039.77, 11975.23, 10076.5, 12738.8, 16307.05,
14469.84, 11440.64, 16341.18, 8936, 8522, 9361.63, 9300.52, 8457,
8493.83, 8421.91, 8694, 8920.93, 9293.31, 8662.5, 9379.71, 12223.58,
8600, 12682.33, 9269.21, 14209.79, 8794.5, 12094.5, 13122.72,
13350.33, 9342)), class = "data.frame", row.names = c(NA, -90L
))
>


Question subsidiaire, je ne sais pas comment écrire que je souhaite enregistrer en csv le tableau de pvalues généré.
Je vous remercie par avance de votre aide et conseils.
Patricia

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Faire un test de Wilcoxon en boucle

Messagepar Mickael Canouil » 25 Déc 2021, 13:08

Bonjour,

"Mean" et "Cond1" n'existent pas dans l'environnement global.
Ce sont des colonnes de votre data.frame.
Ainsi, vous devez indiquer où se trouve les variables :

Code : Tout sélectionner

pairwise.wilcox.test(df[["Mean"]], df[["Cond1"]], p.adj "bonf")
#> 
#>  Pairwise comparisons using Wilcoxon rank sum exact test 
#> 
#> data:  df3[["Mean"]] and df3[["Cond1"]] 
#> 
#>           OP_L2_J01 OP_L2_J04
#> OP_L2_J04 1         -        
#> OP_L2_J14 < 2e-16   5.7e-07  
#> 
#> P value adjustment method: bonferroni 

Code : Tout sélectionner

with(df3pairwise.wilcox.test(MeanCond1p.adj "bonf"))
#> 
#>  Pairwise comparisons using Wilcoxon rank sum exact test 
#> 
#> data:  Mean and Cond1 
#> 
#>           OP_L2_J01 OP_L2_J04
#> OP_L2_J04 1         -        
#> OP_L2_J14 < 2e-16   5.7e-07  
#> 
#> P value adjustment method: bonferroni 

Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

Patricia OBEID
Messages : 68
Enregistré le : 10 Avr 2017, 19:03

Re: Faire un test de Wilcoxon en boucle

Messagepar Patricia OBEID » 25 Déc 2021, 16:45

Bonjour Mickael
et merci.

Je souhaiterais pouvoir enregistrer sous forme de tableau csv les valeurs des p.values
Comment puis-je récupérer les noms des conditions testées et le résultat de la pvalue pour construire ce tableau ?
Encore merci
et Joyeux Noël
Patricia

Patricia OBEID
Messages : 68
Enregistré le : 10 Avr 2017, 19:03

Re: Faire un test de Wilcoxon en boucle

Messagepar Patricia OBEID » 25 Déc 2021, 16:54

En cherchant, j'arrive à créer ce tableau avec :

Code : Tout sélectionner

TableStat_<- with(df3, pairwise.wilcox.test(Mean, Cond1, p.adj = "bonf"))
Results <- TableStat_[["p.value"]]


Mais il y a peut-être une façon de l'écrire plus correcte ?...
Merci pour vos conseils
Patricia

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Faire un test de Wilcoxon en boucle

Messagepar Mickael Canouil » 25 Déc 2021, 18:47

Je ne sais pas ce que veut dire "façon de l'écrire plus correcte" ...

Ceci étant, l'extension {broom} et en particulier la fonction tidy() devrait faire ce que vous voulez.
A noter que cette fonction ressort un tableau pour une grande variété de modèle statistique.
Pour en savoir plus, vous pouvez consulter la documentation => https://broom.tidymodels.org/

Code : Tout sélectionner

library(broom)
tidy(res)
#> # A tibble: 3 × 3
#>   group1    group2     p.value
#>   <chr>     <chr>        <dbl>
#> 1 OP_L2_J04 OP_L2_J01 1   e+ 0
#> 2 OP_L2_J14 OP_L2_J01 5.07e-17
#> 3 OP_L2_J14 OP_L2_J04 5.70e- 7
Mickaël
mickael.canouil.fr | rlille.fr

Patricia OBEID
Messages : 68
Enregistré le : 10 Avr 2017, 19:03

Re: Faire un test de Wilcoxon en boucle

Messagepar Patricia OBEID » 26 Déc 2021, 06:03

Merci pour vos conseils Mickael
Bonnes fêtes de fin d'année
Patricia


Retourner vers « Questions en cours »

Qui est en ligne

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