library(ggplot2)
library(car)
library(RcmdrMisc)
library(lubridate)
library(scales)
library(qcc)
library(agricolae)
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.
Tenga en cuenta que \(Me = \tilde{X}\).
Hagamos un Boxplot sin 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")
# 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.
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")
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")
# 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)
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
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
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
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.
# '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
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()
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)
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()
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
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')
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"))