martes, 8 de junio de 2010

El paquete HistData

Gracias a dos alumnos del postgrado de Bioestadística de la UOC he descubierto el paquete HistData que contiene, entre otros, los datos de Florence Nightingale y que utilicé en el artículo anterior.
El paquete HistData recoge algunos de los más famosos conjuntos de datos de la historia de la Estadística, como los datos de Sir Francis Galton que sirvieron para entrever la normal bivariante y los conceptos de correlación y regresión. Pero además, el paquete contiene la reproducción con R de gráficos famosos asociados a esos datos. De esta forma los docentes podemos hacer memoria histórica estadística, que siempre va bien.
Así, debo rectificar parcialmente mi afirmación en el sentido de que no hay una función de R que reproduzca el coxcomb o rosa de Nightingale. Si bien es estrictamente cierta, el código que acompaña los datos de Nightingale permite generar el gráfico que veis al principio de este artículo y que compara las frecuencias de soldados muertos por diversas causas, antes y después de aplicar las mejoras sanitarias.
Este código utiliza el lenguaje gráfico del paquete ggplot2 que es una auténtica maravilla. Aprender este lenguaje no es trivial, pero si se domina se pueden hacer gráficos que combinan los mejores aspectos de los gráficos base de R y los lattice. Ya tengo otro buen tema de estudio para este verano.

data(Nightingale)
# For some graphs, it is more convenient to reshape death rates to long format

# keep only Date and death rates

require(reshape)

Night<- Nightingale[,c(1,8:10)]

melted <- melt(Night, "Date")

names(melted) <- c("Date", "Cause", "Deaths")

melted$Cause <- sub("\\.rate", "", melted$Cause)

melted$Regime <- ordered( rep(c(rep('Before', 12), rep('After', 12)), 3), levels=c('Before','After'))

Night <- melted


require(ggplot2)
cxc <- ggplot(Night, aes(x = factor(Date), y=Deaths, fill = Cause)) +
# do it as a stacked bar chart first

geom_bar(width = 1, position="identity", color="black") +
# set scale so area ~ Deaths

scale_y_sqrt() +

facet_grid(. ~ Regime, scales="free", labeller=label_both)

# A coxcomb plot = bar chart + polar coordinates

cxc + coord_polar(start=3*pi/2) +

opts(title="Causes of Mortality in the Army in the East") +

xlab("")


La idea fundamental es que un coxcomb es un diagrama de barras con áreas proporcionales a los datos y en coordenadas polares. Justamente su definición. ¡Fantástico!

No hay comentarios:

Publicar un comentario