wake-up-neo.net

Boxplot in R mit dem Mittelwert

Kennt jemand eine Möglichkeit, ein Boxplot in R mit einer Linie (oder einem anderen Symbol) in dem Wert zu generieren, der dem Mittelwert entspricht?

Vielen Dank!

24
Brani
abline(h=mean(x))

für eine horizontale Linie (verwenden Sie v anstelle von h für die Vertikale, wenn Sie Ihr Boxplot horizontal ausrichten), oder

points(mean(x))

für einen Punkt. Verwenden Sie den Parameter pch, um das Symbol zu ändern. Möglicherweise möchten Sie sie auch einfärben, um die Sichtbarkeit zu verbessern.

Beachten Sie, dass diese aufgerufen werden, nachdem Sie das Boxplot gezeichnet haben.

Wenn Sie die Formelschnittstelle verwenden, müssen Sie den Mittelwertvektor konstruieren. Nehmen Sie zum Beispiel das erste Beispiel von ?boxplot:

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

Wenn Ihre Daten fehlende Werte enthalten, möchten Sie möglicherweise das letzte Argument der tapply-Funktion durch function(x) mean(x,na.rm=T) ersetzen.

38
James

Mit ggplot2:

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

Überprüfen Sie chart.Boxplot aus Paket PerformanceAnalytics. Hier können Sie das Symbol definieren, das für den Verteilungsmittelwert verwendet werden soll.

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

10
George Dontas

Ich denke auch, dass chart.Boxplot die beste Option ist, es gibt Ihnen die Position des Mittelwerts, aber wenn Sie eine Matrix mit Renditen haben, benötigen Sie nur eine Codezeile, um alle Boxplots in einem Diagramm zu erhalten. 

Hier ist ein kleines Beispiel für ein ETF-Portfolio.

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)

Matrix zurückgeben

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

Box Plot of Return Matrix 

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)

Sie können versuchen, das Mittelwertsymbol zu ändern und das Medianwertesymbol zu entfernen oder zu ändern. Hoffe, es hat geholfen. :)

0
marbel

Basierend auf den Antworten von @James und @Jyotirmoy Bhattacharya habe ich folgende Lösung gefunden:

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)

(Siehe this post für weitere Details)

Wenn Sie Punkte zu horizontalen Boxplots hinzufügen möchten, lesen Sie this post. 

0
kribys