web-dev-qa-db-fra.com

Boîte à moustaches en R indiquant la moyenne

Est-ce que quelqu'un connaît un moyen de générer un plot en R avec une ligne (ou un autre symbole) dans la valeur correspondant à la moyenne?

Je vous remercie!

24
Brani
abline(h=mean(x))

pour une ligne horizontale (utilisez v au lieu de h pour vertical si vous orientez votre boîte à moustaches horizontalement), ou

points(mean(x))

pour un point. Utilisez le paramètre pch pour changer le symbole. Vous voudrez peut-être aussi les colorier pour améliorer la visibilité.

Notez qu'ils sont appelés après que vous ayez dessiné la boîte à moustaches.

Si vous utilisez l'interface de formule, vous devez construire le vecteur de moyennes. Par exemple, en prenant le premier exemple de ?boxplot:

boxplot(count ~ spray, data = InsectSprays, col = "lightgray")
means <- tapply(InsectSprays$count,InsectSprays$spray,mean)
points(means,col="red",pch=18)

Si vos données contiennent des valeurs manquantes, vous pouvez remplacer le dernier argument de la fonction tapply par function(x) mean(x,na.rm=T).

38
James

Avec ggplot2:

p<-qplot(spray,count,data=InsectSprays,geom='boxplot')
p<-p+stat_summary(fun.y=mean,shape=1,col='red',geom='point')
print(p)
11

Vérifiez chart.Boxplot à partir du paquet PerformanceAnalytics. Il vous permet de définir le symbole à utiliser pour la moyenne de la distribution.

alt text http://bm2.genes.nig.ac.jp/RGM2/R_current/library/PerformanceAnalytics/man/images/big_chart.Boxplot_001.png

10
George Dontas

Je pense aussi que chart.Boxplot est la meilleure option, il vous donne la position de la moyenne, mais si vous avez une matrice avec des retours, vous avez uniquement besoin d'une ligne de code pour obtenir tous les graphes en un graphique. 

Voici un petit exemple de portefeuille de FNB.

library(Zoo)
library(PerformanceAnalytics)
library(tseries)
library(xts)

VTI.prices = get.hist.quote(instrument = "VTI", start= "2007-03-01", end="2013-03-01",
                        quote = c("AdjClose"),provider = "yahoo",Origin ="1970-01-01", 
                        compression = "m", retclass = c("Zoo"))

VEU.prices = get.hist.quote(instrument = "VEU", start= "2007-03-01", end="2013-03-01",
                        quote = c("AdjClose"),provider = "yahoo",Origin ="1970-01-01", 
                        compression = "m", retclass = c("Zoo"))

VWO.prices = get.hist.quote(instrument = "VWO", start= "2007-03-01", end="2013-03-01",
                        quote = c("AdjClose"),provider = "yahoo",Origin ="1970-01-01", 
                        compression = "m", retclass = c("Zoo"))


VNQ.prices = get.hist.quote(instrument = "VNQ", start= "2007-03-01", end="2013-03-01",
                       quote = c("AdjClose"),provider = "yahoo",Origin ="1970-01-01", 
                       compression = "m", retclass = c("Zoo"))

TLT.prices = get.hist.quote(instrument = "TLT", start= "2007-03-01", end="2013-03-01",
                        quote = c("AdjClose"),provider = "yahoo",Origin ="1970-01-01", 
                        compression = "m", retclass = c("Zoo"))

TIP.prices = get.hist.quote(instrument = "TIP", start= "2007-03-01", end="2013-03-01",
                         quote = c("AdjClose"),provider = "yahoo",Origin ="1970-01-01", 
                         compression = "m", retclass = c("Zoo"))

index(VTI.prices) = as.yearmon(index(VTI.prices))
index(VEU.prices) = as.yearmon(index(VEU.prices))
index(VWO.prices) = as.yearmon(index(VWO.prices))

index(VNQ.prices) = as.yearmon(index(VNQ.prices))
index(TLT.prices) = as.yearmon(index(TLT.prices))
index(TIP.prices) = as.yearmon(index(TIP.prices))

Prices.z=merge(VTI.prices, VEU.prices, VWO.prices, VNQ.prices, 
           TLT.prices, TIP.prices)

colnames(Prices.z) = c("VTI", "VEU", "VWO" , "VNQ", "TLT", "TIP")

returnscc.z = diff(log(Prices.z))

start(returnscc.z)
end(returnscc.z)
colnames(returnscc.z) 
head(returnscc.z)

Matrice de retour

ret.mat = coredata(returnscc.z)
class(ret.mat)
colnames(ret.mat)
head(ret.mat)

Boîte à moustaches de matrice de retour 

chart.Boxplot(returnscc.z, names=T, horizontal=TRUE, colorset="darkgreen", as.Tufte =F,
          mean.symbol = 20, median.symbol="|", main="Return Distributions Comparison",
          element.color = "darkgray", outlier.symbol = 20, 
          xlab="Continuously Compounded Returns", sort.ascending=F)

Vous pouvez essayer de changer le symbole moyen et supprimer ou modifier le symbole médian . J'espère que cela vous a aidé. :)

0
marbel

Sur la base des réponses de @James et @Jyotirmoy Bhattacharya, j'ai proposé cette solution:

zx <- replicate (5, rnorm(50))
zx_means <- (colMeans(zx, na.rm = TRUE))
boxplot(zx, horizontal = FALSE, outline = FALSE)
points(zx_means, pch = 22, col = "darkgrey", lwd = 7)

(Voir this post pour plus de détails)

Si vous souhaitez ajouter des points aux boîtes à moustaches horizontales, veuillez consulter this post. 

0
kribys