Histogramme avec moyenne et écart-type

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

Abdel Zine
Messages : 75
Enregistré le : 28 Nov 2006, 09:56

Histogramme avec moyenne et écart-type

Messagepar Abdel Zine » 28 Mar 2007, 14:06

Bonjour !
J'aimerai faire un histogramme avec en abscisse les variables X1, X2 etc., et en ordonées leurs moyennes et écarts-types (je pense que ce type de graphique à un nom précis mais ça m'échappe) :

Exemple :

Code : Tout sélectionner

           X.1        X.2
moy         -2.666667  -3.000000
écart-type   5.686241   5.291503


Merci d'avance.
Abdel
Nul ne peut atteindre l'aube sans passer par le chemin de la nuit. Khalil Gibran.

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 28 Mar 2007, 16:23

Que voulez-vous faire exactement ? L'histogramme est un estimateur de la densité de probabilité d'UNE variable. Si vous avez plusieurs variables quantitatives, vous pouvez estimer une densité multivariée. Avec deux variables, voir par exemple la fct bk2de (2D Binned Kernel Density Estimate) dans le package KernSmooth (dans la distribution de base de R). Mais il faut alors travailler sur les données brutes, pas sur les résumés.

Code : Tout sélectionner

library(MASS)
library(KernSmooth)

# moyenne
m <- c(-2.666667, -3)

# matrice de var-cov avec cor(x, y) = 0
v <- diag(c(5.686241, 5.291503)^2)

# simulation de 1000 valeurs tirées dans cette loi normale bivariée
xy <- mvrnorm(n = 1000, mu = m, Sigma = v)

# estimation de la densité bivariée
est <- bkde2D(xy, bandwidth = c(1.5, 1.5))

# représentation 3D
persp(est$fhat)


Abdel Zine
Messages : 75
Enregistré le : 28 Nov 2006, 09:56

Messagepar Abdel Zine » 28 Mar 2007, 17:52

Merci Renaut, oui je pense que je me suis mal exprimé.
Mes données brutes sont le résultat d'une simulation, j'en avais parlé sur ce post :

Je reprends les valeurs de l'exemple :

Code : Tout sélectionner

2.0   1.0   
8.0   8.0   
-5.0   -6.0   
-1.0   -1.0   
-9.0   -9.0   

Je travaille sur les lignes 1, 4 et 5, ce qui donne les moyennes et écarts-types :

Code : Tout sélectionner

-2.666667  -3.000000
5.686241   5.291503


Le graphique que je veux représenter ressemble à ça :
Image

Est-ce que ce type de graphique vous est familier ? et comment dois-je m'y prendre pour le représenter avec les données de synthèse (moy et sd) ou avec les données brutes ?
Merci
Nul ne peut atteindre l'aube sans passer par le chemin de la nuit. Khalil Gibran.

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 28 Mar 2007, 20:05

Bonsoir,


Juste un petit code pour dépanner mais ce genre de fonction doit exister dans une librairie.

Code : Tout sélectionner

x <- matrix(rnorm(100,25,1),10,10)
y <- rbind(apply(x,2,mean),apply(x,2,sd))
y
           [,1]       [,2]      [,3]       [,4]      [,5]      [,6]      [,7]       [,8]      [,9]     [,10]
[1,] 25.0914296 24.9379895 25.556240 24.4906894 24.737226 25.163118 25.234079 24.6934215 24.873325 24.602944
[2,]  0.8459521  0.8258512  0.878125  0.8516801  0.799541  0.551659  1.453586  0.9834084  1.126079  1.294988
x1 <- barplot(y[1,],width=0.5,space=0.5,ylim=c(0,max(apply(y,2,sum))),plot=F)
x1 <- c(x1)
barplot(y[1,],width=0.5,space=0.5,ylim=c(0,max(apply(y,2,sum))))
segments(x1,apply(y,2,function(x) abs(diff(x))),x1,apply(y,2,sum),col="red")

Maxime

Abdel Zine
Messages : 75
Enregistré le : 28 Nov 2006, 09:56

Messagepar Abdel Zine » 28 Mar 2007, 21:58

Merci MAxime, oui j'espère qu'il existe une fonction qui le fasse :)
Nul ne peut atteindre l'aube sans passer par le chemin de la nuit. Khalil Gibran.

Olivier Delaigue
Messages : 220
Enregistré le : 05 Déc 2006, 07:38

Messagepar Olivier Delaigue » 29 Mar 2007, 06:10

Code : Tout sélectionner

library(gplots)
?barplot2

Olivier

Abdel Zine
Messages : 75
Enregistré le : 28 Nov 2006, 09:56

Messagepar Abdel Zine » 01 Avr 2007, 16:16

Bonjour !
Merci Olivier, j'ai installé la librairie gplots et essayé les exemples de la fonction barplot2 :

Code : Tout sélectionner

# Example with confidence intervals and grid
hh <- t(VADeaths)[, 5:1]
mybarcol <- "gray20"
ci.l <- hh * 0.85
ci.u <- hh * 1.15
mp <- barplot2(hh, beside = TRUE,
        col = c("lightblue", "mistyrose",
                "lightcyan", "lavender"),
        legend = colnames(VADeaths), ylim = c(0, 100),
        main = "Death Rates in Virginia", font.main = 4,
        sub = "Faked 95 percent error bars", col.sub = mybarcol,
        cex.names = 1.5, plot.ci = TRUE, ci.l = ci.l, ci.u = ci.u,
        plot.grid = TRUE)
mtext(side = 1, at = colMeans(mp), line = -2,
      text = paste("Mean", formatC(colMeans(hh))), col = "red")
box()

Je pense que c'est bien ça que je cherche mais j'ai des difficultés à adapter la fonction à mon exemple, de telle sorte que les bornes de l'intervalle de confiance correspondent à à celles de l'écart-type, si j'ai bien compris :

Code : Tout sélectionner

ci.l = |moy| - sd
et
ci.u = |moy| + sd
Nul ne peut atteindre l'aube sans passer par le chemin de la nuit. Khalil Gibran.

Abdel Zine
Messages : 75
Enregistré le : 28 Nov 2006, 09:56

Messagepar Abdel Zine » 01 Juil 2007, 09:53

Bonsoir,

J'aimerais svp avoir votre avis concernant l'exactitude du traitement que je veux effectuer.

Comme mentionné plus haut, je voulais avoir un barplot qui me donne les moyennes et écarts-types, j'utilise la fonction barplot2 qu'Olivier m'a montré, avec à la place des intervalles de conviance les écarts-types.

Code : Tout sélectionner

> myTE # mes données brutes
      Relation.1 Relation.2
run.1          2          1
run.2          8          8
run.3         -5         -6
run.4         -1         -1
run.5         -9         -9

> allTE # les deux variables relation 1 et 2, avec leurs stats respectives
    Relation.1 Relation.2
min  -9.000000  -9.000000
max   8.000000   8.000000
med  -1.000000  -1.000000
moy  -1.000000  -1.400000
sd    6.519202   6.580274

allMoy <- allTE[4,] # la ligne 4 représente les moyenne (fonction moy())

> allMoy
Relation.1 Relation.2
      -1.0       -1.4

allSd  <- allTE[5,] # la ligne 5 représente les sd (fonction sd())

> allSd 
Relation.1 Relation.2
  6.519202   6.580274

> library(gplots) # pour barplot2()

# The confidence intervals (ci.l = lower bound, ci.u = upper bound) to be plotted :
> ci.u <- allMoy + allSd
> ci.l <- allMoy - allSd

> barplot2(allMoy, col = rainbow(10), ylim = c(-10, 10), plot.ci = T, ci.l = ci.l, ci.u = ci.u, plot.grid = T)


ce qui donne :

Image

Est ce bien ainsi qu'il fallait procéder ?
Merci.
Nul ne peut atteindre l'aube sans passer par le chemin de la nuit. Khalil Gibran.

Eric Pagot
Messages : 195
Enregistré le : 15 Fév 2007, 17:10

Messagepar Eric Pagot » 02 Juil 2007, 12:51

La fonction boxplot donne ce genre de graphique. Il y une boite dessinée avec la dispersion de chaque variable (il est même possible de faire des sous-groupes)
Vétérinaire CTPA

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 02 Juil 2007, 14:07

Re,

Je ne suis pas totalement d'accord avec le boxplot, le boxplot donne une information différente de celle que cherche a représenter Abdel, en particulier si la distribution a représentée est plurimodale. Dans un cas on met l'accent sur la moyenne et l'écart type, alors que dans l'autre sur la médianne et les quartiles ce qui peut être deux informations relativement différentes. Sinon pour répondre à Abdel c'est le bon code que tu as utilisé.

Maxime

Abdel Zine
Messages : 75
Enregistré le : 28 Nov 2006, 09:56

Messagepar Abdel Zine » 02 Juil 2007, 14:46

Bonjour,

Eric, j'avais exploré la possibilité d'utiliser une boîte à moustaches, mais il s'est avéré que ça ne correspondait pas vraiment à mon traitement, je te remercie pour ton intérêt.
La fonction barplot2 me satisfait sur le plan graphique, mais j'avais un doute sur le calcul en lui-même.

Maxime, toujours aussi serviable ;)
Nul ne peut atteindre l'aube sans passer par le chemin de la nuit. Khalil Gibran.


Retourner vers « Questions en cours »

Qui est en ligne

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