Paquetes necesarios

library(ggplot2)
library(car)
library(RcmdrMisc)
library(lubridate)
library(scales)
library(qcc)
library(agricolae)

Ejemplo 1

Préstamo de bicicletas

Los siguientes son datos correspondientes al número de bicicletas prestadas durante varias semanas por una estación del sistema de bicicletas públicas. En las filas se presentan las semanas de observación (no especificada):

Vamos a tener en cuenta este ejemplo para los gráficos que vamos a aprender en esta sección.

Boxplot

Tenga en cuenta que \(Me = \tilde{X}\).

Hagamos un Boxplot sin variable de agrupación:

Boxplot con variable de agrupación

data <- data.frame(Prestamos = x,
                   Dia = c(rep("Lun", 9), 
                           rep(c("Mar","Mie","Jue"), each = 10),
                           rep("Vie", 9), rep("Sáb", 9))
                   )
boxplot(Prestamos ~ Dia, data = data, ylab = "Préstamos")

Gráfico de Medias

# de Bicicletas promedio prestadas por día:

library(RcmdrMisc)
par(cex.lab = 1.3, cex.axis = 1.3)
with(data, plotMeans(Prestamos, Dia, error.bars="se", main="", 
  connect=TRUE, ylab = "# promedio de biciletas prestadas"))

Recuerde, el promedio señalado por el punto negro, y el error estándar señalado por las barras de error (las líneas punteadas) se calculan con los datos correspondientes a cada día. Por ejemplo, para el día viernes.

Gráfico de Barras

  • Permite graficar una variable numérica con una categórica. 

  • Permite representar graficamente tablas de frecuencia de variable categórica. 

  • Eje x: Variable categórica.

  • Eje y: Variable numérica (o Frecuencia).

resumen <- read.csv("frec_dia_hora.csv", header = T, row.names = "Dia")
data1 <- resumen[,-5]
data1 <- rowSums(data1)
barplot(t(data1), beside = TRUE, xlab = "Día", ylab = "# préstamos")

Nota: quitamos la columna 5 de manera arbitraria, para hacer una demostración de como eliminar columnas. Cuando hay este tipo de situaciones con valores NA, puede tener más relevancia quitar filas (recuerde el uso de na.omit).

ggplot(data = data, aes(x=Dia, y=Prestamos)) + geom_bar(stat="sum") + 
  theme(legend.position = "none") 

Gráfico circular

  • Permite representar graficamente tablas de frecuencia de variable categórica. 

  • Color: variable categórica

  • Tamaño de la tajada: frecuencia.

lbls <- names(data1)
pie(data1, labels = lbls, main="Gráfico Circular")

Gráfico de Barras comparativo (2 variables)

# de Bicicletas prestadas por día:

Sem.1 Sem.2 Sem.3 Sem.4 Sem.5 Sem.6 Sem.7 Sem.8 Sem.9 Sem.10
Lun 68 63 42 27 30 36 28 32 12
Mar 65 43 25 74 38 51 36 42 28 47
Mie 12 32 49 38 21 42 27 31 50 23
Jue 22 43 27 49 16 28 23 19 46 49
Vie 79 27 22 23 24 25 44 30 24
Sab 31 28 25 45 12 57 51 43 69
data2 <- resumen[,c("Sem.1","Sem.4","Sem.8")]
barplot(t(data2), beside = T, col = 3:5, xlab = "Día", ylab = "# préstamos")
legend("topright", legend = colnames(data2), fil = 3:5)

Histograma

  • Permite representar graficamente tablas de frecuencia de variable numérica. 

  • Eje x: Variable numérica

  • Eje y: Frecuencia.

h <- hist(x, main='')

Observe la siguiente tabla de frecuencias. ¿Qeé relación tiene con el histograma?

library(fdth)
mi_tabla <- fdt(x = x, start = 10, end = 80, right = TRUE,
                h = 10)
summary(mi_tabla)
##  Class limits  f   rf rf(%) cf  cf(%)
##       (10,20]  5 0.09  8.77  5   8.77
##       (20,30] 20 0.35 35.09 25  43.86
##       (30,40]  9 0.16 15.79 34  59.65
##       (40,50] 14 0.25 24.56 48  84.21
##       (50,60]  3 0.05  5.26 51  89.47
##       (60,70]  4 0.07  7.02 55  96.49
##       (70,80]  2 0.04  3.51 57 100.00

Polígono de Frecuencias (Ojiva)

  • El gráfico es una serie de parejas ordendas unidas por rectas.

  • Eje x: Variable aleatoria.

  • Eje y: Frecuencia acumulada.

# library(agricolae)
ogive.freq(h, xlab='Número de préstamos', ylab='Relative frequency')

##   Número de préstamos    RCF
## 1                  10 0.0000
## 2                  20 0.0877
## 3                  30 0.4386
## 4                  40 0.5965
## 5                  50 0.8421
## 6                  60 0.8947
## 7                  70 0.9649
## 8                  80 1.0000
## 9                  90 1.0000

Diagrama de Pareto

  • Se compone de un diagrama de barras, al cual se le superpone un gráfico de línea (polígono de frecuencia acumulada).

  • Eje x: Variable categórica

  • Eje y izquierdo: Frecuencia absoluta acumulada.

  • Eje y derecho: Frecuencia relativa acumulada.

Grafiquemos uno de estos para las bicicletas

# library(qcc)
pareto.chart(data1, ylab='# de Préstamos')

##      
## Pareto chart analysis for data1
##        Frequency  Cum.Freq. Percentage Cum.Percent.
##   Mar  411.00000  411.00000   20.36670     20.36670
##   Sáb  361.00000  772.00000   17.88900     38.25570
##   Lun  338.00000 1110.00000   16.74926     55.00496
##   Jue  306.00000 1416.00000   15.16353     70.16848
##   Mie  304.00000 1720.00000   15.06442     85.23290
##   Vie  298.00000 2018.00000   14.76710    100.00000

Ejemplo 2

Ejemplo 2: datos Iris, de Edgar Anderson

La base de datos iris, disponible en R provee las medidas en centímetros de la longitud y ancho de los sépalos y de los pétalos de tres especies de flores.

Extraido de Wikipedia 

Exploremos este conjunto de datos.

Ejemplo 2: datos Iris

# 'iris' está cargado en R por defecto
head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

Diagrama de dispersión

  • Para observar el comportamiento de dos variables Cuantitativas. 

  • Puntos en plano coordenado.  

  • Eje x: Variable independiente

  • Eje y: Variable de respuesta

plot(iris$Sepal.Length, iris$Petal.Length)

Usemos ahora el paquete ggplot2

ggplot(iris) +
  aes(x = Sepal.Length, y = Petal.Length) +
  geom_point()

Matriz de diagramas de dispersión

En este gráficos se grafican las parejas variables posibles en diagramas de dispersión.

plot(iris[,1:4])

En RcmdrMisc hay otro buen gráfico.

scatterplotMatrix(~Petal.Length+Petal.Width+Sepal.Length+Sepal.Width | Species, 
                  regLine=FALSE, smooth=FALSE, diagonal=list(method="density"), 
                  by.groups=TRUE, data=iris)

Diagrama de dispersión discriminado

  • Para observar el comportamiento de dos variables Cuantitativas y una categórica. 

  • Puntos en plano coordenado.  

  • Eje x: Variable independiente

  • Eje y: Variable de respuesta

  • Colores: variable categórica.

ggplot(iris) +
  aes(x = Sepal.Length, y = Petal.Length, colour = Species) +
  geom_point() +
  scale_color_hue()

Ejemplo 3

Edad de muerte de los reyes

Examinemos una base de datos curiosa. Ésta contiene la edad que tenían varios reyes de Inglaterra en el momento de su fallecimiento.

kings <- scan("http://robjhyndman.com/tsdldata/misc/kings.dat",skip=3)
kings
##  [1] 60 43 67 50 56 42 50 65 68 43 65 34 47 34 49 41 13 35 53 56 16 43 69 59 48
## [26] 59 86 55 68 51 33 49 67 77 81 67 71 81 68 70 77 56

Gráfico de línea

Una manera de visualizar esta información es con los gráficos de línea de tiempo, también llamados gráficos de series de tiempo. Una forma sencilla de hacerlos es graficando una línea:

plot(kings, type = 'l')

Ejemplo 3: Lidiando con fechas

Tenemos un connunto de datos con las mediciones meteorológicas diarias de 2009 a 2011 de NEON Harvard Forest field. Examinemos como varía la temperatura del aire a través del tiempo. La variable de interés se llama airt.

Primero, importemos los datos.

MetDiario.09.11 <- read.csv("Met_HARV_Daily_2009_2011.csv")

Ahora vamos a asegurarnos de que la columna que tiene la fecha sea interpretada por R como una fecha:

MetDiario.09.11$date <- as.Date(MetDiario.09.11$date)

La librería ggplot2 permite hacer gráficos de series de tiempo de forma muy flexible.

ggplot(MetDiario.09.11, aes(date, airt)) + geom_line(na.rm=TRUE)

Si queremos tener en cuenta el detalle de los meses, debemos cambiar la escala del eje x.

# library(lubridate)
# library(scales)
ggplot(MetDiario.09.11, aes(date, airt)) + geom_line(na.rm=TRUE) +
  scale_x_date(labels=date_format("%b %y"))