INGENIERÍA EN ESTADÍSTICA
Realice los 13 ejercicios
propuestos en esta lectura:
Gráficos básicos: apply
Esta sección es una introducción a los gráficos básicos en R
orientada a la inspección visual y rápida de conjuntos de datos, que es
fundamental en todo proceso de análisis y, particularmente, en sus fases
iniciales.
No nos preocuparemos demasiado de los aspectos estéticos de estos
gráficos. En primer lugar, porque más adelante trataremos otros tipo de
gráficos más sofisticados y atractivos estéticamente. Pero también
porque los detalles sobre cómo modificar el aspecto de los gráficos es
tan prolijo y lleno de detalles que es mejor omitirlo en una primera
aproximación. Además, internet contiene seguramente la respuesta a
cualquier pregunta que se te ocurra sobre cómo modificar los valores por
defecto: ejes, orientación de etiquetas, etc. Es un campo amplio y lleno
de detalles pero que es más bien material de consulta puntual en un
momento de necesidad que de exposición exhaustiva en un texto
introductorio.
En particular, en esta sección trataremos la manera de
representar:
Una variable continua
Una variable categórica
La relación entre dos variables continuas
La relación entre una variable continua y otra
categórica
Representación gráfica de
variables continuas: histogramas
Nuestros datos pueden contener una columna como, por ejemplo, edad.
En apartados anteriores hemos aprendido:
Cómo inspeccionar los valores extremos de esa variable (p.e.,
ordenando la tabla por edad y mostrando las primeras y las últimas filas
con las funciones head y tail) por si, por ejemplo, existen edades
negativas;
Cómo obtener algunos estadísticos básicos de esa columna (usando
summary sobre la tabla).
EJERCICIO 1
Inspecciona la columna Temp (temperatura) del conjunto de datos
airquality de acuerdo con las sugerencias del párrafo anterior.
Sin embargo, es mucho más informativa una representación visual de
los datos. La manera más rápida (y recomendada) de hacerse una idea de
la distribución de los datos de una columna numérica es usando
histogramas. En R, para representar el histograma de la columna
Sepal.Width de iris se puede hacer:
hist(iris$Sepal.Width)
Esa es la orden básica. Pero los gráficos pueden ser modificados
para incluir títulos, etiquetas, colores, etc. Por ejemplo,
hist(iris$Sepal.Width, main = “iris: histograma de la anchura de los
sépalos”,
xlab = “anchura del sépalo”, ylab = “frecuencia”,
col = “steelblue”)
Los argumentos main, xlab, ylab y col12 se pueden aplicar también a
otros gráficos que veremos a continuación.
#EJERCICIO 1
hist(iris$Sepal.Width)

hist(iris$Sepal.Width, main = "iris: histograma de la anchura de los sépalos",
xlab = "anchura del sépalo", ylab = "frecuencia",
col = "steelblue")

EJERCICIO 2
Por defecto, el eje horizontal de un histograma muestra el número de
observaciones en cada bin. Examina la ayuda de hist para ver cómo
mostrar en, lugar de los números absolutos, la proporción.
#EJERCICIO 2
hist(iris$Sepal.Width, main = "iris: histograma de la anchura de los sépalos",
xlab = "anchura del sépalo",
ylab = "proporción",
col = "steelblue",
prob = T)

EJERCICIO 3
El número de bins también es parametrizable. Examina otra vez la
página de ayuda para modificar el valor por defecto.
hist(iris$Sepal.Width, freq = FALSE, main = "iris: histograma de la anchura de los sépalos",
xlab = "Anchura del sépalo", ylab = "Frecuencia",
col = "BLUE")

EJERCICIO 4
Estudia la distribución de las temperaturas en Nueva York (usa
airquality).
Para guardar el gráfico, puedes usar los menús de Rstudio. Pero
también puedes hacerlo programáticamente. En la página de ayuda de la
función png se explica cómo hacerlo13.
#EJERCICIO 4
tem_NewYork <- airquality[ ,"Temp"]
tem_NewYork
hist(tem_NewYork, main = "Cambiar color", ylab = "Frecuencia", col = "lightblue")
png("TempNewYork.png")
hist(tem_NewYork, main = "Cambiar color", ylab = "Frecuencia", col = "lightblue")
dev.off()
EJERCICIO 5
Usa las funciones png y jpeg para guardar alguno de los gráficos
anteriores en tu disco duro.
#EJERCICIO 5
hist(iris$Sepal.Width, main = "iris: histograma de la anchura de los sepalos",
xlab = "anchura del sepalo", ylab = "frecuencia",
col = "mediumaquamarine")
png("Anchura de los sepalos.png")
dev.off()
hist(iris$Sepal.Width, main = "iris: histograma de la anchura de los sepalos",
xlab = "anchura del sepalo", ylab = "frecuencia",
col = "rosybrown")
jpeg("Anchura de los sepalos.jpeg", quality = 100)
dev.off()
Representación gráfica de
variables categóricas: barras
En las tablas suelen coexistir variables continuas y categóricas.
Por ejemplo, es interesante conocer la distribución (o frecuencia) de
cada una de las categorías. Para eso se suelen usar los diagramas de
barras; en particular, la función barplot de R.
Esta función no muestra directamente las frecuencias de una variable
categórica. Es necesario calcular previamente dichas frecuencias, para
lo cual usaremos la función table que se tratará con más detalle
posteriormente.
Por ejemplo, la expresión siguiente muestra cómo en iris existe el
mismo número de observaciones de cada especie:
barplot(table(iris$Species))
EJERCICIO 6
Usa los parámetros main, xlab, ylab y col discutidos en la sección
anterior para mejorar el aspecto de este gráfico.
barplot(table(iris$Species), main = "iris: histograma de la anchura de los sepalos",
xlab = "anchura del sepalo", ylab = "frecuencia",
col = "mediumaquamarine")

EJERCICIO 7
Investiga el argumento horiz de barplot para crear un gráfico de
barras horizontales.
Los diagramas de barras también pueden usarse para mostrar datos
contenidos en vectores etiquetados. De hecho, table crea un vector
etiquetado: asocia a cada etiqueta su frecuencia en la columna. Algunas
tablas contienen un registro por etiqueta y entonces podemos usar
gráficos de barras para representar esa información. Por ejemplo:
barplot(VADeaths[, 2], xlab = “tramos de edad”, ylab = “tasa de
mortalidad”,
main = “Tasa de mortalidad en Virginia/rural”)
Los gráficos de barras son las representaciones más habituales para
mostrar la distribución de vectores (entre ellos, las frecuencias de
etiquetas). Sin embargo, existen alternativas modernas y superiores a
ellos en algunos aspectos. Por ejemplo, los gráficos de puntos,
implementados en R en la función dotchart.
#EJERCICIO 7
barplot(VADeaths[, 2], xlab = "tramos de edad", ylab = "tasa de mortalidad",
main = "Tasa de mortalidad en Virginia\nmujer/rural")

barplot(table(iris$Species),horiz = TRUE, main = "Especies", xlab = "Frecuencia",
ylab = "Tipo", col = "RED")

barplot(VADeaths[, 2], xlab = "tramos de edad", ylab = "tasa de mortalidad",
main = "Tasa de mortalidad en Virginia\nmujer/rural")

Representación de la relación
entre dos variables continuas: gráficos de dispersión
Los aspectos más interesantes de los datos se revelan no examinando
las variables independientemente sino en relación con otras. Los
gráficos de dispersión muestran la relación entre dos variables
numéricas. En el ejemplo siguiente serán la velocidad y la distancia de
frenado de un conjunto de coches recogidas en el conjunto de datos
cars:
El gráfico muestra cómo aumenta dist en función de speed.
EJERCICIO 8
Representa gráficamente la anchura del sépalo contra su longitud
(usando iris). Interpreta el gráfico.
#EJERCICIO 8
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
plot(iris$Sepal.Width, iris$Sepal.Length)

EJERCICIO 9
De nuevo, usa los parámetros main, xlab, ylab y col discutidos en la
sección anterior para mejorar el aspecto de los gráficos
anteriores.
En ocasiones, cuando una de las variables tiene un orden determinado
(por ejemplo, es una variable temporal) pueden utilizarse líneas para
unir los puntos de un diagrama de dispersión (o, más habitualmente,
reemplazarlos por ellas). Por ejemplo, utilizando el hecho de que las
observaciones de airquality están ordenadas temporalmente, podemos
representar la temperatura en periodo que comprende así:
plot(airquality$Temp, type = “l”)
Incluso, se pueden combinar varios elementos gráficos sobre la misma
representación gráfica: por ejemplo, combinar puntos y líneas como
aquí:
plot(airquality\(Temp)** ######
**lines(airquality\)Temp)
El anterior es un ejemplo de una característica de los gráficos
básicos de R: a un primer gráfico se le pueden añadir progresivamente
capas adicionales. En el caso anterior, a un gráfico de puntos se le han
añadido líneas. Pero podrían añadirse más elementos. Por ejemplo, al
gráfico anterior se le puede añadir un elemento más, una línea
horizontal roja a la altura de la temperatura media, usando la función
(muy útil) abline:
plot(airquality\(Temp)** ######
**lines(airquality\)Temp)
abline(h = mean(airquality$Temp), col = “red”)
#EJERCICIO 9
plot(airquality$Temp, type = "l")

plot(airquality$Temp)
lines(airquality$Temp)

plot(airquality$Temp)
lines(airquality$Temp)
abline(h = mean(airquality$Temp), col = "red")

#CAMBIAR PUNTOS Y LINEAS
plot(airquality$Temp)
lines(airquality$Temp)

plot(airquality$Temp)
lines(airquality$Temp)
abline(h = mean(airquality$Temp), col = "red")

#Representación de la relación entre una variable continua y otra categórica
boxplot(iris$Sepal.Width ~ iris$Species, col = "gray",
main = "Especies de iris\nsegún la anchura del sépalo")

EJERCICIO 10
Consulta la ayuda de la función abline y úsala para añadir líneas
(no solo horizontales) a alguno de los gráficos anteriores.
#EJERCICIO 10
plot(airquality$Temp, type = "l")
abline(v = mean(airquality$Temp),
h = mean(airquality$Temp),
col=c("blue","skyblue"))

EJERCICIO 11
Consulta ?par, una página de ayuda en R que muestra gran cantidad de
parámetros modificables en un gráfico. Investiga y usa col, lty y lwd.
Nota: casi nadie conoce estos parámetros y, menos, de memoria; pero está
bien saber que existen por si un día procede utilizarlos.
#EJERCICIO 11
#?par
plot(iris$Sepal.Width, iris$Sepal.Length,main = "Caracteristicas del Sepalo ", ylab = " ",
xlab = " ", col="darkgreen")
abline(h=c(5, -3), v=2,
col=c('red'), lwd=5, lty='dashed')

boxplot(iris$Sepal.Width ~ iris$Species, col = "gray",
main = "Especies de iris\nsegún la anchura del sépalo")

Representación de la relación
entre una variable continua y otra categórica: diagramas de caja
(boxplots)
Los diagramas de cajas (boxplot) estudian la distribución de una
variable continua en función de una variable categórica. Están
emparentados con los histogramas porque resumen la distribución de una
variable continua. Para ello utilizan una representación todavía mas
esquemática que la de un histograma: una caja y unos segmentos que
acotan las regiones donde la variable continua concentra el grueso de
las observaciones.
Por ejemplo, podemos estudiar la distribución de la anchura del
sépalo en iris en función de la especie usando diagramas de cajas
así:
boxplot(iris\(Sepal.Width ~
iris\)Species, col = “gray”,
main = “Especies de irisla anchura del
sépalo”)
La notación y ~ x es muy común en R y significa que vas a hacer algo
con y en función de x; en este caso, algo es un diagrama de cajas.
Cuando construyamos modelos, querremos entender la variable objetivo y
en función de una o más variables predictoras y volveremos a hacer uso
de esa notación14.
El gráfico anterior ilustra la potencia de los diagramas de caja.
Para las setosas, existe una observación atípica, mucho menor que el
resto, pero cuya atipicidad queda oculta por otras observaciones
normales correspondientes a virgínicas o versicolores. Esa observación
atípica no llamaría la atención si se representan gráficamente todos los
valores, independientemente de su tipo, pero se manifiesta claramente al
segmentar la representación por especie.
EJERCICIO 12
Identifica la observación atípica. ¿Es atípica también con respecto
a otras variables?
#EJERCICIO 12
boxplot(iris$Sepal.Width ~ iris$Species, col = "gray",
main = "Especies de iris\nsegún la anchura del sépalo")

boxplot(iris$Sepal.Length ~ iris$Species, col = "gray",
main = "Especies de iris\nsegún la longitud del sépalo")

boxplot(iris$Petal.Length ~ iris$Species, col = "gray",
main = "Especies de iris\nsegún la longitud del Pétalo")

boxplot(iris$Petal.Width ~ iris$Species, col = "gray",
main = "Especies de iris\nsegún la anchura del Pétalo")

EJERCICIO 13
Muestra la distribución de las temperaturas en Nueva York en función
del mes.
En el ejemplo anterior se ha usado el color steelblue. Si buscas en
internet encontrarás la lista completa de aquellos colores cuyos nombres
entiende R o cómo usar sus representaciones RGB u otras.↩︎
Seguro, entenderás mejor los ejemplos de esa página que el mismo
cuerpo de la documentación↩︎
En R existe un tipo de datos muy especial: formula; sirve para
especificar relaciones entre variables y aunque fue creado para
especificar modelos estadísticos, se utiliza frecuentemente en otros
contextos.↩︎
#EJERCICIO 13
boxplot(airquality$Temp ~ airquality$Month, col = "steelblue",
main = "Calidad del aire \nsegún la temperatura por mes", xlab = "Mes",
ylab = "Temperatura")
