-
Notifications
You must be signed in to change notification settings - Fork 20
/
04_graphs_cuali.Rmd
214 lines (153 loc) · 13.7 KB
/
04_graphs_cuali.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
# Gráficos para variables cualitativas {#cuali}
En este capítulo se presentan funciones para la creación de gráficos para variables cualitativas.
## Función `barplot` \index{gráfico de barras} \index{barplot}
Los gráficos de barras son útiles para representar las frecuencias absolutas o relativas asociadas a los niveles de una variable cualitativa y la función `barplot` se usa para obtener un gráfico de barras. La estructura de la función `barplot` con los argumentos más comunes de uso se muestra a continuación.
```{r, eval=F}
barplot(height, beside, horiz)
```
Los argumentos de la función `barplot` son:
- `height`: vector o matriz con la información de las frecuencias absolutas o relativas.
- `beside`: valor lógico para indicar si las barras deben estar al lado cuando la información ingresada es una matriz.
- `horiz`: valor lógico para indicar si el diagrama de barras debe ser horizontal, por defecto es `FALSE`.
La función `barplot` tiene otros parámetros que pueden ser consultados en la ayuda de la función por medio de la instrucción `?barplot`.
### Ejemplo {-}
Suponga que queremos construir un diagrama de barras para las frecuencias relativas de la variable estrato socioeconómico del apartamento de la base de datos sobre apartamentos usados en Medellín.
A continuación se muestra el código necesario para cargar la base de datos `aptos2015`. Antes de construir el diagrama de barras solicitado es necesario construir la tabla de frecuencias para la variable estrato, para esto se usa la función `table` y los resultados se almacenan en el objeto `tabla1` que contiene las frecuencias __absolutas__. Para obtener las frecuencias __relativas__ se usa luego la función `prop.table` sobre el objeto `tabla1`.
```{r}
url <- 'https://tinyurl.com/hwhb769'
datos <- read.table(file=url, header=T)
tabla1 <- table(datos$estrato)
tabla1 <- prop.table(tabla1)
tabla1
```
Una vez se tiene el objeto con la información de las frecuencias relativas se puede dibujar el diagrama de barras usando el siguiente código.
```{r barra1, fig.cap='Diagrama de barras para el estrato socioeconómico de los apartamentos usados.', fig.asp=0.6, fig.width =7}
barplot(tabla1, xlab='Estrato socioeconómico',
ylab='Frecuencia relativa', las=1)
```
En la Figura \@ref(fig:barra1) se presenta el diagrama de barras solicitado. Se observa que hay pocos apartamentos (1.15%) pertenecientes al estrato dos, los estratos tres, cuatro y cinco aportan porcentajes similares a la base de datos y que el estrato 6 es el que más apartamentos aporta a la base de datos, 34.87%.
Algunas veces se acostumbra a colocar las frecuencias relativas sobre la parte superior de las barras para facilitar la lectura. A continuación se presenta el código para replicar la Figura \@ref(fig:barra1) con las frecuencias relativas. Lo primero que se hace es dibujar el diagrama de barras y almacenar la información de él en el objeto `xx` para luego poder usar la ubicación de cada una de las barras. Note que se agregó también `ylim=c(0, 0.45)` para conseguir una ampliación del eje vertical, esto para lograr que se vea el número sobre la barra del estrato 6. Luego se usa la función `text` para incluir un texto en las coordenadas `x=xx` y `y=tabla1`, el parámetro `pos=3` coloca el texto en la parte superior de las coordenadas y el parámetro `label` sirve para indicar lo que se desea escribir en las coordenadas indicadas, en este caso son las frecuencias relativas almacenadas en `tabla1`.
```{r barra2, fig.cap='Diagrama de barras para el estrato socioeconómico de los apartamentos usados con las frecuencias relativas sobre las barras.', fig.asp=0.6, fig.width =7}
xx <- barplot(tabla1, ylim=c(0, 0.45), col=gray(0.9),
xlab='Estrato socioeconómico',
ylab='Frecuencia relativa', las=1)
text(x=xx, y=tabla1, pos=3, cex=0.8, col="red",
label=round(tabla1, 4))
```
En la Figura \@ref(fig:barra2) se muestra el diagrama de barras modificado. Note que si no se hubiese usado `ylim=c(0, 0.45)` al dibujar el diagrama, la marca sobre la última barra no se podría ver.
### Ejemplo {-}
Suponga que queremos construir un diagrama de barras para comparar la variable presencia de parqueadero con el estrato socioeconómico en la base de datos sobre apartamentos usados en Medellín.
La función `barplot` también puede ser usada para representar una tabla de frecuencia con dos variables. Para obtener la tabla de frecuencia para relacionar parqueadero con estrato se usa el siguiente código.
```{r}
tabla2 <- table(datos$parqueadero, datos$estrato)
tabla2
```
El anterior resultado es la tabla de contingencia entre las variables parqueadero y estrato, de esta tabla vemos que para estratos superiores el número de apartamentos que si tienen parqueadero es mayor que los apartamentos sin parqueadero. La tabla anterior se puede representar gráficamente usando el siguiente código.
```{r barra3, fig.cap='Diagrama I de barras la relación entre parqueadero y estrato.', fig.asp=0.6, fig.width =7}
barplot(tabla2)
```
En la Figura \@ref(fig:barra3) se muestra el gráfico de barras sin editar, el color negro representa la frecuencia de los apartamentos sin parqueadero (no) y el color gris representa los apartamentos con parqueadero (si), las barras están una encima de la otra y la comparación no es tan clara como debería. Para mejorar la comparación se usa el parámetro `besides=TRUE`, a continuación el código utilizado.
```{r barra4, fig.cap='Diagrama II de barras la relación entre parqueadero y estrato.', fig.asp=0.6, fig.width =7}
barplot(tabla2, beside=TRUE)
```
En la Figura \@ref(fig:barra4) está el gráfico de barras obtenido agregando `besides=TRUE` para que las barras se ubiquen una junto a la otra. Este gráfico se puede mejorar aún más colocando una leyenda para identificar las barras, nombrando los ejes y usando otros colores, a continuación el código utilizado.
```{r barra5, fig.cap='Relación entre la presencia de parqueadero y el estrato socioeconómico.', fig.asp=0.6, fig.width =7}
barplot(tabla2, beside = TRUE, las=1,
xlab='Estrato', ylab='Frecuencia',
col = c("lightblue", "mistyrose"),
ylim = c(0, 250))
legend('topleft', legend=rownames(tabla2), bty='n',
fill=c("lightblue", "mistyrose"))
```
En la Figura \@ref(fig:barra5) se observa el gráfico de barras solicitado, se observa claramente que en los estratos 4, 5 y 6 predominan los aparatamentos con parqueadero.
Es posible construir una tabla de contingencia de frecuencia relativa para ver cómo es el comportamiento de tener o no parquedadero dentro de cada estrato, el siguiente código construye la `tabla3` con la información necesaria. La función `prop.table` permite obtener la tabla de frecuencias __relativas__ a partir de una tabla de frecuencias absolutas, el parámetro `margin` sirve para indicar si las frecuencias __relativas__ se deben obtener por fila (`margin=1`) o por columnas (`margin=2`).
```{r}
tabla3 <- prop.table(tabla2, margin=2)
tabla3
```
De la anterior tabla se ve que el porcentaje de apartamentos con parqueadero supera enormemente el los apartamentos sin parqueadero para los estratos 6, 5 y 4. El código para generar un gráfico asociado a la `tabla3` se muestra a continuación.
```{r barra6, fig.cap='Relación entre la presencia de parqueadero y el estrato socioeconómico.', fig.asp=0.6, fig.width =7}
barplot(tabla3,
beside = TRUE, las=1,
xlab='Estrato', ylab='Frecuencia relativa',
col = c("lightblue", "mistyrose"),
ylim = c(0, 1))
legend('topleft', legend=rownames(tabla2), bty='n',
fill=c("lightblue", "mistyrose"))
```
¿Cuáles son las ventajas y/o desventajas de las figuras \@ref(fig:barra5) y \@ref(fig:barra6) al ser presentadas en un informe?
## Función `pie` \index{gráfico de pastel} \index{pie}
En R es posible construir gráficos de pastel para representar una tabla de frecuencia relativa o absoluta, sin embargo este tipo de gráficos no es recomendable y en la ayuda de la función se hace la siguiente advertencia:
```{block2, type='rmdwarning'}
Pie charts are a very bad way of displaying information. The eye is good at judging linear measures and bad at judging relative areas. A bar chart or dot chart is a preferable way of displaying this type of data.
```
La estructura de la función `pie` con los argumentos más comunes de uso se muestra a continuación.
```{r, eval=F}
pie(x, labels)
```
Los argumentos de la función `pie` son:
- `x`: vector con elementos no negativos que representan las frecuencias de los niveles de la variable cualitativa.
- `labels`: vector con los nombres a colocar en cada parte del pastel, por defecto se usan los nombres del vector `x`.
### Ejemplo {-}
Dibujar un gráfico de pastel para las frecuencias relativas de la variable estrato socioeconómico del apartamento de la base de datos sobre apartamentos usados en Medellín.
La `tabla1` construída en el primer ejemplo de `barplot` se utiliza para construir el gráfico solicitado. Abajo el código necesario para construir el gráfico.
```{r pie, fig.cap='Gráfico de pastel para las frecuencias relativas del estrato socioeconómico.', fig.asp=0.6, fig.width =7}
nombres <- paste('Estrato ', 2:6)
pie(x=tabla1, labels=nombres,
main='Gráfico de pastel NO recomendado!!!')
```
La Figura \@ref(fig:pie) presenta el gráfico de pastel construído con la instrucción anterior.
## Función `dotchart` \index{gráfico de puntos} \index{dotchart}
Los gráficos de puntos son útiles para representar tablas de frecuencia (de 1 o 2 vías) o tablas de resumen en relación a una o dos variables. La estructura de la función `dotchart` se muestra a continuación.
```{r, eval=F}
dotchart(x, labels=NULL, groups=NULL, gdata=NULL,
pt.cex, pch, color, lcolor, ...)
```
Los argumentos de la función `dotchart` son:
- `x`: vector o matriz con la información de las frecuencias o medida de resumen a representar. Si `x` es una matriz las columnas representarán agrupaciones.
- `labels`: vector con los nombres a usar para los puntos, por defecto toma los nombres de las filas de la matriz `x`.
- `groups`: vector con los nombres a usar para los grupos, por defecto toma los nombres de las columnas de la matriz `x`.
- `cex`: tamaño de los nombres a mostrar en los ejes.
- `pt.cex`: tamaño del punto.
- `pch`: tipo de punto a usar, las diferentes opciones para `pch` están disponibles en la Figura \@ref(fig:point1).
- `color`: tipo de color usar para los puntos.
- `lcolor`: color para la línea asociada a cada punto.
- `...`: otros parámetros gráficos que pueden ser pasados como argumentos.
### Ejemplo {-}
Suponga que queremos explorar el rendimiento de del combustible (`mpg`) para los 32 autos de la base de datos `mtcars` usando un diagrama de puntos.
A continuación se muestra el código necesario para crear el gráfico de puntos deseado.
```{r dotchart1, fig.cap='Gráfico de puntos para el rendimiento de combustible (`mpg`) en la base de datos `mtcars`.', fig.asp=0.7, fig.width=6, echo=TRUE}
mtcars <- mtcars[order(mtcars$mpg), ] # Para re-ordenar la base
dotchart(mtcars$mpg, labels=row.names(mtcars),
cex=0.6, xlab="mpg")
```
En la Figura \@ref(fig:dotchart1) se tiene el gráfico de puntos para la variable `mpg`, de esta figura se observa fácilmente que el Toyota Corolla tiene el mayor rendimiento de combustible y que el Cadillac Fleetwood el menor.
### Ejemplo {-}
Suponga que se tiene una tabla de contingencia con la información del número de hombres y mujeres que sufren de una enfermedad rara en cuatro ciudades importantes del mundo, a continuación la matriz `x` con la información recolectada.
```{r, eval=T}
x <- matrix(c(4, 6, 30, 18, 7, 13, 35, 20),
ncol=4, byrow=TRUE)
colnames(x) <- c('Madrid', 'Londres', 'Paris', 'Miami')
rownames(x) <- c('Hombre', 'Mujer')
x
```
En la salida anterior se presenta la matriz `x`, de esta matriz se observa que en Madrid hay 11 personas, 4 hombres y 7 mujeres que sufren de la enfermedad, las demás columnas se interpretan de forma similar.
Para construir un gráfico de puntos con el objetivo de presentar la información de la matriz `x` se utiliza el código mostrado abajo. En la Figura \@ref(fig:dotchart2) se presenta el gráfico de puntos obtenido y de esta figura se nota claramente que en París es donde hay más personas que sufren de la enfermedad.
```{r dotchart2, fig.cap='Gráfico de puntos para una tabla de contingencia de 2 variables.', fig.asp=0.7, fig.width=6, echo=TRUE}
dotchart(x=x)
```
El gráfico de puntos presentado en la Figura \@ref(fig:dotchart2) se puede mejorar usando los otros argumentos disponibles en la función `dotchart`, a continuación el código y en la Figura \@ref(fig:dotchart3) el resultado.
```{r dotchart3, fig.cap='Gráfico de puntos mejorado para una tabla de contingencia de 2 variables.', fig.asp=0.7, fig.width=6, echo=TRUE}
dotchart(x=x,
pt.cex=2, pch=c(8, 21), color=c('blue', 'red'),
lcolor='black',
xlab='Número de personas')
```
## EJERCICIOS {-}
Use funciones o procedimientos (varias líneas) de R para responder cada una de las siguientes preguntas.
Todas las preguntas siguientes están relacionadas con la base de datos sobre [apartamentos](https://raw.githubusercontent.com/fhernanb/datos/master/aptos2015) usados en la ciudad de Medellín.
1. Construya un diagrama de barras para representar las frecuencias ABSOLUTAS de la variable ubicación.
2. Vuelva a construir el mismo diagrama de barras anterior pero de forma horizontal y agregando números de color azul para indicar las frecuencias.
3. Construya una tabla de dos vías para las variables ubicación y parqueadero.
4. Construya una tabla de frecuencias relativas para ver cómo se comporta la variable parqueadero dentro de cada ubicación.
5. Dibuje un diagrama de barras para la tabla de frecuencias del punto anterior.