Diagrama de caja en R que muestra la media
Pregunta
¿Alguien sabe de una manera de generar un diagrama de caja en R con una línea (o otro símbolo) en el valor correspondiente a la media?
Gracias!
Solución
abline(h=mean(x))
para una línea horizontal (v uso en lugar de h para los verticales Si orienta su gráfico de caja horizontal), o
points(mean(x))
para un punto. Usar la pch
parámetro para cambiar el símbolo. Es posible que desee colorearlos para mejorar la visibilidad también.
Tenga en cuenta que estos son llamados después de haber dibujado el diagrama de caja.
Si está utilizando la interfaz de fórmula, que tendría que construir el vector de medios. Por ejemplo, tomando el primer ejemplo de ?boxplot
:
boxplot(count ~ spray, data = InsectSprays, col = "lightgray")
means <- tapply(InsectSprays$count,InsectSprays$spray,mean)
points(means,col="red",pch=18)
Si los datos contienen valores que faltan, es posible que desee reemplazar el último argumento de la función tapply
con function(x) mean(x,na.rm=T)
Otros consejos
Con ggplot2
:
p<-qplot(spray,count,data=InsectSprays,geom='boxplot')
p<-p+stat_summary(fun.y=mean,shape=1,col='red',geom='point')
print(p)
chart.Boxplot de PerformanceAnalytics
paquete . Se le permite definir el símbolo para el uso de la media de la distribución.
En base a las respuestas por @ James y @Jyotirmoy Bhattacharya me ocurrió con esta solución:
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)
(Véase este post para más detalles)
Si desea añadir puntos a diagramas de cajas horizontales, consulte este enviar.
También creo chart.Boxplot es la mejor opción, le da la posición de la media, pero si usted tiene una matriz con retornos todo lo que necesita es una línea de código para obtener todos los diagramas de caja en un solo gráfico.
Aquí hay un pequeño ejemplo cartera de ETF.
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)
Vuelta Matrix
ret.mat = coredata(returnscc.z)
class(ret.mat)
colnames(ret.mat)
head(ret.mat)
Diagrama de cajas de Retorno 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)
Puede intentar cambiar el mean.symbol, y quitar o cambiar el median.symbol. Espero que ayudó. :)