étoiles de significativité

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

étoiles de significativité

Messagepar Patricia OBEID » 13 Mar 2018, 13:27

Bonjour,
je souhaiterais faire apparaître les étoiles de significativité sur un barplot.
Voici ce que j'ai pu faire :
mon fichier de données (data1) :

Code : Tout sélectionner

data1 <-structure(list(Samples = c("NT-1", "NT-2", "NT-3", "TA-1", "TA-2",
"TA-3", "TB-1", "TB-2", "TB-3", "TC-1", "TC-2", "TC-3"), Name = c("NT",
"NT", "NT", "TA", "TA", "TA", "TB", "TB", "TB", "TC", "TC", "TC"
), QR = c(0.887816443, 0.951538103, 1.183724489, 0.180282758,
0.215137859, 0.194566243, 0.479078287, 0.437796806, 0.398688344,
0.49769484, 0.897095409, 1.242575344)), .Names = c("Samples",
"Name", "QR"), class = "data.frame", row.names = c(NA, -12L))

mon fichier avec les moyennes, écart-type, ... (Stat)

Code : Tout sélectionner

Stat <-structure(list(Name = c("NT", "TA", "TB", "TC"), QR_Moy = c(1.00769,
0.196662, 0.438521, 0.879122), Ecartype = c(0.155742, 0.0175218,
0.0401999, 0.372765), ErreurType = c(0.089917686, 0.010116216,
0.023209423, 0.215215973)), .Names = c("Name", "QR_Moy", "Ecartype",
"ErreurType"), class = "data.frame", row.names = c(NA, -4L))


J'obtiens une liste de pvalues (List of 4) avec

Code : Tout sélectionner

test <- pairwise.t.test(data1$QR,data1$Name)
test$p.value
# NT         TA         TB
# TA 0.007265354         NA         NA
# TB 0.035774070 0.36596602         NA
# TC 0.460629603 0.01686606 0.08697365

Je ne sais pas comment extraire les pvalues des comparaisons des échantillons traités (ici n= 3 mais je peux en avoir bcp plus : TA, TB, TC) avec l'échantillons non traité (NT) : la première colonne en fait !

Voici le tracé du Barplot avec les écart-type

Code : Tout sélectionner

x11()
op <- par (las=2, cex=0.7, oma=c(1,0,0,0))
bp=barplot(Stat$QR_Moy,names.arg=Stat$Name,ylim=c(0,1.5),main="Test")
box() 
arrows(bp,Stat$QR_Moy-Stat$Ecartype,bp, Stat$QR_Moy+Stat$Ecartype, lwd=1.5, angle=90,length=0.1,code=3)

Je voudrais pouvoir mettre au dessus de chaque échantillon traité les étoiles de significativité liées au pvalues issues du t test mais je ne sais pas comment écrire cela.
Peut-être ne faut-il pas partir de la liste "test" ?...
Du coup, je ne sais pas comment écrire la commande pour faire un t test sur n échantillons contre l'échantillon non traité. Il faudrait faire apparaître une colonne pvalue dans Stat qui correspondrait à une boucle où on fait un t test de NT contre l'échantillon A, B, C, ...n

Ensuite, comment utiliser cette valeur pour placer les étoiles sur le graphique ?

J'espère que tout ce que je viens de vous raconter est compréhensible ...
Toute aide sera la bienvenue.
Patricia

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

Re: étoiles de significativité

Messagepar François Bonnot » 14 Mar 2018, 12:45

Bonjour,
Votre code parfaitement reproductible donne envie de vous aider.
[J'ai édité votre message pour ajouter des balises].
Voici donc une suggestion (à utiliser après affichage du graphe):

Code : Tout sélectionner

etoiles <- function(pvalue) {
    if (pvalue <= 0.001) return("***")
    if (pvalue <= 0.01) return("***")
    if (pvalue <= 0.05) return("*")
    ""
}

limits <- 2:length(bp)
text(bp[limits],Stat$QR_Moy[limits]+Stat$Ecartype[limits]+0.05,sapply(test$p.value[,1],etoiles),cex=2)

Remarque : cette suggestion ne concerne que l'affichage du résultat mais ne préjuge pas du bien fondé d'utiliser des étoiles, ni de l'adéquation du test pairwise au problème.
François

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

Re: étoiles de significativité

Messagepar Mickael Canouil » 14 Mar 2018, 13:47

Bonjour,

voici une autre proposition de fonction pour remplacer une valeur-p par des étoiles (s'il le faut vraiment):

Code : Tout sélectionner

etoiles <- function (pvalue) {
    return(c("n.s.", "*", "**", "***")[which.max(which(pvalue <= c(1, 0.05, 0.01, 0.001)))])
}


Dans le contexte ggplot, il existe l'extension ggsignif qui fait ce genre de chose: https://cran.r-project.org/package=ggsignif

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

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

Re: étoiles de significativité

Messagepar Patricia OBEID » 15 Mar 2018, 17:24

Un grand MERCI à vous deux !
J'essayerai aussi de passer par ggplot (pour apprendre d'avantage) mais j'ai pas mal de difficultés à décrypter les scripts ggplot ...
Peut-être pourriez-vous m'indiquer un tuto, pour les débutants, qui explique simplement comment fonctionne ggplot.
J'ai déjà utilisé ce package pour d'autres applications mais j'ai dû me faire aider pour arriver à mes fins ...
Je sais qu'il est très riche pour tous les graphiques.
Encore merci et bonne soirée,
Patricia


Retourner vers « Questions en cours »

Qui est en ligne

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