plots in R

Gráficos de sectores, barras y cajas en R

Representación gráfica en R

Una de las mejores maneras que tiene un data scientist de presentar resultados de sus análisis realizados es a través de gráficos. La gente suele ser reacia a indagar dentro de tablas inmensas de datos, largos informes con cálculos arduos, pero en cambio suele entender de forma más o menos sistemática un gráfico estadístico. En este post vamos a ver como realizar tres tipos de gráficos en R para ayudarnos en nuestra tarea. Si eres estudiante de ciencias y has empezado a utilizar R recientemente, también es un buen punto de partida para romper el hielo con este práctico programa. La representación gráfica en R te ayudará a poder tener una mayor visión de los resultados o las muestras poblacionales que estás estudiando.

Diagrama de sectores

Los gráficos de sectores son círculos divididos en diversos sectores que se usan para representar frecuencias de las diferentes clases mostradas dentro de un conjunto de datos.

Construcción de un diagrama básico

pie es la función de R que nos permite construir gráficos de sectores. Recibe como argumento princial un vector (o tabla) con las frecuencias absolutas de cada clase.

datos.slots = read.table("slots.txt")
frecuencias.slots = table(datos.slots[,"spins"])
pie(frecuencias.slots)
Simple Pie Chart

Simple Pie Chart

Ponlo a tu gusto

El argumento labels recibe un vector de cadenas de caracteres y se utiliza para cambiar las etiquetas que se muestran en cada sector.

El argumento col recibe un vector de cadenas de caracteres y se utiliza para cambiar los colores de cada sector.

pie(frecuencias.slots, labels=c("Perdedores natos","Comportamiento Normal","Comportamiento excelente","Comportamiento sospechoso"), col=c("blue","red","green","yellow"), main="Comportamiento de los jugadores de Slots")
Pie Chart Mejorado

Pie Chart Mejorado

Gráfico de Barras

En un gráfico de barras en lugar de utilizar puntos disconexos o unidos por líneas para representar los datos utilizamos barras. Se utilizan normalmente cuando se quiere presentar estudios sobre un número pequeño de clases.
barplot es la función que permite construir gráficos de barras.

player.losers = datos.slots[datos.slots[,"clasificacion"] == "losers", "spins"]
player.average = datos.slots[datos.slots[,"clasificacion"] == "average", "spins"]
player.lucky = datos.slots[datos.slots[,"clasificacion"] == "lucky", "spins"]
player.luckiest = datos.slots[datos.slots[,"clasificacion"] == "luckiest", "spins"]
medias = c(mean(player.losers), mean(player.average), mean(player.lucky), mean(player.luckiest))
barplot(medias)
Simple Bar Plot

Simple Bar Plot

Ponlo a tu gusto

La mayoría de los parámetros para las anteriores funciones gráficas también son compartidos por barplot

barplot(medias,col="lightyellow",border="red",ylim=c(0,5000), xlab="Comportamientos",ylab="Jugadores",main="Comportamiento de los jugadores de Slots")
Barplot mejorado

Barplot mejorado

Añadir nombre a las barras

  • Nombrar los elementos del vector correspondiente y luego utililzar barplot:
 names(medias) = c("Perdedores natos","Comportamiento Normal","Comportamiento excelente","Comportamiento sospechoso")
barplot(medias,col=c("blue","red","green", "yellow"), border="red", ylim=c(0,5000), xlab="Comportamientos",ylab="Jugadores",main="Comportamiento de los jugadores de Slots")
  • Utilizar el argumento names.arg de la función barplot:
xpos = barplot(medias, names.arg=c("Perdedores natos","Comportamiento Normal","Comportamiento excelente","Comportamiento sospechoso"), col=c("blue","red","green", "yellow"), border="blue", ylim=c(0,5000), xlab="Comportamientos", ylab="Jugadores", main="Comportamiento de los jugadores de Slots")
Barplot etiquetado

Barplot etiquetado

Con idea del error cometido

El gráfico aún puede mejorarse mucho más si añadimos barras de error. Típicamente se añade una barra de error correspondiente a una desviación típica.

La función arrows nos permite añadir barras de error de forma rápida y sencilla.

Esta función recibe como argumentos las posiciones de los extremos inferiores y superiores de la barra. Las posiciones x se obtiene de barplot. Las posiciones y se obtienen de restar y sumar al correspondiente valor la desviación típica.

Adicionalmente recibe los parametros code, angle y length para tunear la barra de error, normalmente estos valores se fijan en 3, 90 y 0.1 respectivamente.

xpos  = barplot(medias, names.arg=c("Perdedores natos","Comportamiento Normal","Comportamiento excelente","Comportamiento sospechoso"), col=c("blue","red","green", "yellow"), border="blue", ylim=c(0,5000), xlab="Comportamientos", ylab="Jugadores", main="Comportamiento de los jugadores de Slots")	 	 
sds = sd(datos.slots[,"spins"])
arrows(xpos, medias-sds, xpos, medias+sds, angle=90, code=3, length=0.1)
Bar plot con barras de error

Bar plot con barras de error

Con un contraste de hipótesis

Normalmente se suele realizar un contraste de hipótesis para comprobar la significancia de los resultados.

\begin{cases}H_0: & \mu_0 = \mu_1\\H_1: & \mu_0>\mu_1\ \mathrm{o}\ \mu_0<\mu_1\end{cases}

La función t.test utiliza el estadistico t de student para realizar el correspondiente contraste de hipótesis

La función t.test recibe como entrada dos vectores con los datos correspondientes y la hipótesis alternativa alt="less" o "greater". Por defecto asume un nivel de confianza del 95% que puede tunearse con el parámetro conf.level.

t.test(player.average,player.losers,alt="greater") 
... t = 3.6789, df = 47.63, p-value = 0.0002977 ...
t.test(player.average,player.lucky,alt="greater")
... t = 3.4251, df = 47.087, p-value = 0.0006417 ...
t.test(player.average,player.lucky,alt="less")
... t = -0.6521, df = 45.693, p-value = 0.2588 ...

La función t.test devuelve entre otra información el correspondiente p value. Recordemos que si el p value es menor que (1 - nivel de confianza) entonces se rechaza la hipótesis nula y por lo tanto se "acepta" la alternativa.

Normalmente se suele marcar en el gráfico de barras con uno o dos asteriscos las barras que representan datos significativos.

points(xpos[3]+0.3,3000,pch=8,cex=2)
Barplot señalando datos relevantes

Barplot señalando datos relevantes

Diagrama de Caja y Bigotes

Un gráfico ampliamente utilizado para comparar distintos grupos de datos son los diagramas de caja y bigotes, también conocidos como box plots (box and whisker plots en inglés).

Los box plots usan un resumen estadístico consistente en 5 valores: el valor mínimo (típicamente 1.5 veces el valor intercuartílico  por debajo del primer cuartil), el valor máximo (análogamente unas 1.5 veces el valor intercuartílico  por encima del tercer cuartil), el primer cuartil, la mediana y el tercer cuartel.

diagrama-caja

En los box plots también se identifican Outliers, valores de los datos que distan más allá de ese mínimo y máximo calculado como 1.5 veces el rango intercuartílico por encima o por debajo del primer y del tercer cuartil y que puede deberse a algún error de medición y suelen representarse en forma de puntos para evitar distorsiones en la distribución general de los datos.

La función de R para construir este tipo de gráficos es boxplot.

La función boxplot puede recibir como parámetros los vectores de los distintos grupos por separado.

boxplot(player.losers, player.averaged, player.luckiest, player.lucky)
Diagrama de Caja y Bigotes

Diagrama de Caja y Bigotes

Alternativamente boxplot puede recibir a partir de un marco de datos primero el vector que contenga los datos numéricos y luego el vector que conteniene la clasificación separados por el símbolo ~

boxplot(datos.slots[["spins"]] ~ datos.slots[["clasificacion"]])

Ponlo a tu gusto

El resto de parámetros es similar al resto de la funciones gráficas vistas anteriormente.

boxplot(datos.slots[["spins"]] ~ datos.slots[["clasificacion"]], col=c("blue","red","green","yellow"), xlab="Comportamiento",ylab="Jugadores",main="Comportamientos de los jugadores de Slots")
Boxplot personalizado

Boxplot personalizado

Leave a Reply

Your email address will not be published. Required fields are marked *