0% encontró este documento útil (0 votos)
405 vistas81 páginas

Creación de Gráficos con R

Este documento presenta una introducción al software estadístico R. Explica cómo descargar e instalar R, los tipos básicos de objetos en R como vectores, matrices y datos, y proporciona una guía de estilo para escribir código en R. Además, introduce los diferentes tipos de gráficos estadísticos que se pueden crear en R para variables cuantitativas y cualitativas.

Cargado por

DuvanMontoya
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
405 vistas81 páginas

Creación de Gráficos con R

Este documento presenta una introducción al software estadístico R. Explica cómo descargar e instalar R, los tipos básicos de objetos en R como vectores, matrices y datos, y proporciona una guía de estilo para escribir código en R. Además, introduce los diferentes tipos de gráficos estadísticos que se pueden crear en R para variables cuantitativas y cualitativas.

Cargado por

DuvanMontoya
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Juan Carlos Correa Morales

Freddy Hernndez Barajas

Grficos con R

Gracias a Dios por todo lo que me ha dado!

ndice general

ndice de cuadros

ndice de figuras

VII

Prefacio

IX

Sobre los autores

XIII

1. Introduccin
1.1. Orgenes . . . . . . . . . . . . . . . . .
1.2. Descarga e instalacin . . . . . . . . . .
1.3. Apariencia del programa . . . . . . . .
1.4. Tipos de objetos . . . . . . . . . . . . .
1.4.1. Vectores . . . . . . . . . . . . . .
1.4.2. Matrices . . . . . . . . . . . . . .
1.4.3. Arreglos . . . . . . . . . . . . . .
1.4.4. Marco de datos . . . . . . . . . .
1.4.5. Listas . . . . . . . . . . . . . . .
1.5. Gua de estilo para la escritura en R . .
1.5.1. Nombres de los archivos . . . . .
1.5.2. Nombres de los objetos . . . . .
1.5.3. Longitud de una lnea de cdigo
1.5.4. Espacios . . . . . . . . . . . . . .
1.5.5. Asignacin . . . . . . . . . . . .
1.5.6. Punto y coma . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

1
1
2
3
4
5
6
6
7
8
9
9
9
10
10
12
12

2. Grficos para una variable cuantitativa


2.1. Funcin stem . . . . . . . . . . . . . . .
2.2. Funcin boxplot . . . . . . . . . . . . .
2.3. Funcin hist . . . . . . . . . . . . . . .
2.4. Funcin qqnorm y qqplot
. . . . . . .
2.5. Funcin density . . . . . . . . . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

15
15
16
18
22
25

variables cuantitativas
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .

31
31
34
38

3. Grficos para varias


3.1. Funcin plot .
3.2. Funcin persp .
3.3. Funcin pairs .

iii

iv

Contents
3.4. Funcin contour

. . . . . . . . . . . . . . . . . . . . . . . .

46

4. Grficos para variables cualitativas


4.1. Funcin barplot . . . . . . . . . . . . . . . . . . . . . . . .
4.2. Funcin pie . . . . . . . . . . . . . . . . . . . . . . . . . . .

47
47
54

5. Funcin par
5.1. Funcin par

57
57

. . . . . . . . . . . . . . . . . . . . . . . . . . .

6. Funciones auxiliares
6.1. Funcin abline .
6.2. Funcin legend .
6.3. Funcin text . .
6.4. Funcin lines . .
6.5. Funcin points .
6.6. Funcin identify
6.7. Funcin locator
6.8. Funcin axes . .
6.9. Funcin title . .
6.10. Funcin mtext . .
6.11. Funcin curve . .
6.12. Funcin rug . . .

.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

59
59
60
60
60
60
60
60
60
60
60
60
60

7. Funciones geomtricas
7.1. Funcin arrows . .
7.2. Funcin segments
7.3. Funcin rect . . .
7.4. Funcin polygon .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

61
61
61
61
61

.
.
.
.
.

Apndice

63

A. More to Say

63

Bibliografa

65

ndice alfabtico

67

ndice de cuadros

ndice de figuras

1.1. Robert Gentleman (izquierda) y Ross Ihaka (derecha) creadores


de R. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Pgina del Cran. . . . . . . . . . . . . . . . . . . . . . . . . .
1.3. Pgina de instalacin para la primera ocasin. . . . . . . . . .
1.4. Pgina de descarga. . . . . . . . . . . . . . . . . . . . . . . .
1.5. Apariencia del acceso directo para ingresar a R. . . . . . . . .
1.6. Apariencia de R. . . . . . . . . . . . . . . . . . . . . . . . . .

2
2
3
3
4
4

2.1. Boxplot para la variable altura. . . . . . . . . . . . . . . . . .


2.2. Histogramas para el tiempo en la media maratn de CONAVI.
A: histograma con dos intervalos, B: histograma con cuatro
intervalos, C: histograma con seis intervalos, C: histograma con
18 intervalos. . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3. Histogramas para el tiempo en la media maratn de CONAVI.
A: histograma con dos intervalos, B: histograma con cuatro
intervalos, C: histograma con diez intervalos, C: histograma
con veinte intervalos. . . . . . . . . . . . . . . . . . . . . . . .
2.4. Grfico cuantil cuantil para una muestra generada de una poblacin normal. . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5. Grfico cuantil cuantil para una muestra generada de una poblacin Weibull. . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6. Densidad para una muestra aleatoria de una N(0, 1) cambiando
el ncleo de la densidad. . . . . . . . . . . . . . . . . . . . . .
2.7. Densidad para una muestra aleatoria de una N(0, 1) cambiando
el ancho de banda. . . . . . . . . . . . . . . . . . . . . . . . .
2.8. Densidad para la variable peso en la izquierda, densidad para
el peso diferenciando por sexo a la derecha. . . . . . . . . . .

18

3.1. Efecto del parmetro type en la funcin plot. . . . . . . . .


3.2. Diagrama de dispersin del precio del apartamento versus rea
del apartamento. A la izquierda el diagrama de dispersin sin
editar y a la derecha el diagrama de dispersin mejorado . . .
3.3. Ilustracin de los angulos theta y phi para la funcin persp. Figura tomada de [Link] . . . . . . . . . . . . . . . .

33

21

23
24
25
27
28
29

34

35

vii

viii

ndice de figuras

3.4. Superficie generada con persp y diferentes valores de theta y


phi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5. Distribucin normal bivariada. . . . . . . . . . . . . . . . . .
3.6. Ilustracin de una matriz de dispersin. . . . . . . . . . . . .
3.7. Matriz de dispersin para las variables precio, rea, nmero de
alcobas y nmero de baos de la base de datos sobre apartamentos en Medelln. . . . . . . . . . . . . . . . . . . . . . . .
3.8. Matriz de dispersin modificando los parmetros adicionales de
la funcin pairs. . . . . . . . . . . . . . . . . . . . . . . . . . .
3.9. Matriz de dispersin con un subconjunto de los datos y con
colores para identificar los puntos. . . . . . . . . . . . . . . .
3.10. Matriz de dispersin con leyenda. . . . . . . . . . . . . . . . .
3.11. Matriz de dispersin con pneles modificados. . . . . . . . . .
3.12. Matriz de dispersin usando la funcin [Link]. . . . . .
4.1. Diagrama de barras para el estrato socioeconmico de los apartamentos usados. . . . . . . . . . . . . . . . . . . . . . . . . .
4.2. Diagrama de barras para el estrato socioeconmico de los apartamentos usados con las frecuencias relativas sobre las barras.
4.3. Diagrama I de barras la relacin entre parqueadero y estrato.
4.4. Diagrama II de barras la relacin entre parqueadero y estrato.
4.5. Relacin entre la presencia de parqueadero y el estrato socioeconmico. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6. Relacin entre la presencia de parqueadero y el estrato socioeconmico. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7. Grfico de pastel para las frecuencias relativas del estrato socioeconmico. . . . . . . . . . . . . . . . . . . . . . . . . . . .

36
37
38

40
41
42
43
45
46
48
49
51
51
52
53
55

Prefacio

Este libro fue creado con la intencin de ayudar a los estudiantes de pregrado,
especializacin, maestra e investigadores a crear grficos estadsticos con las
herramientas bsicas de R. Como complemento, recomendamos a los lectores
el libro Hernndez (2018) que muestra cmo usar R para realizar diversos
procedimiento estadsticos.

Por qu leer este libro?


Este libro es importante porque

Estructura del libro


En el captulo 1 se presenta una introduccin breve de R, sus orgenes, la
instalacin, tipos de objetos y una gua de estilo para escribir en R.

Software information and conventions


Para realizar este libro usamos los paquetes knitr (Xie, 2015) y bookdown
(Xie, 2016).
Package names are in bold text (e.g., rmarkdown), and inline code and filenames are formatted in a typewriter font (e.g., knitr::knit('[Link]')). Function names are followed by parentheses (e.g., bookdown::render_book()).
En todo el libro se presentarn cdigos que el lector puede copiar y pegar
ix

Prefacio

en su consola de R para obtener los mismos resultados aqu presentados. Los


cdigos se destacan en una caja de color beis (o beige) similar a la mostrada
a continuacin.
4 + 6
a <- c(1, 5, 6)
5 * a
1:10
Los resultados o salidas obtenidos de cualquier cdigo se destacan con dos
smbolos de nmeral (##) al inicio de cada lnea o rengln, esto quiere decir
que todo lo que inicie con ## son resultados obtenidos y NO los debe copiar.
Abajo se muestran los resultados obtenidos luego de correr el cdigo anterior.
## [1] 10
## [1]
##

[1]

5 25 30
1

9 10

Bloques informativos
En varias partes del libro usaremos bloques informativos para resaltar algn
aspecto importante. Abajo se encuentra un ejemplo de los bloques y su significado.
Este bloque sirve para una nota aclaratoria.

Este bloque sirve para una sugerencia.

Este bloque sirve para una advertencia.

Prefacio

xi

Agradecimientos
Agradecemos a nuestros estudiantes, profesores y colegas que han ledo el
manuscrito y se han tomado el trabajo de escribirnos dndonos sus sugerencias
y comentarios para mejorar continuamente este material.
Juan Carlos Correa Morales
Freddy Hernndez Barajas

Sobre los autores

Juan Carlos Correa Morales es profesor asociado de la Universidad Nacional


de Colombia adscrito a la Escuela de Estadstica de la Facultad de Ciencias.
[email protected]
Freddy Hernndez Barajas es profesor asistente de la Universidad Nacional de
Colombia adscrito a la Escuela de Estadstica de la Facultad de Ciencias.
fhernanb@[Link].co2

1 [Link]
2 [Link]

xiii

1
Introduccin

1.1.

Orgenes

R es un lenguaje de programacin usado para realizar procedimientos estadsticos y grficos de alto nivel, este lenguaje fue creado en 1993 por los profesores
e investigadores Robert Gentleman y Ross Ihaka. Inicialmente el lenguaje se
us para apoyar los cursos que tenan a su cargo los profesores, pero luego de
ver la utilidad de la herramienta desarrollada, decidieron colocar copias de R
en StatLib. A partir de 1995 el cdigo fuente de R est disponible bajo licencia GNU GPL para sistemas operativos Windows, Macintosh y distribuciones
Unix/Linux. La comunidad de usuarios de R en el mundo es muy grande y los
usuarios cuentan con diferentes espacios para interactuar, a continuacin una
lista no exhaustiva de los sitios ms populares relacionados con R:
Rbloggers1 .
Comunidad hispana de R2 .
Nabble3 .
Foro en portugus4 .
Stackoverflow5 .
Cross Validated6 .
R-Help Mailing List7 .
Revolutions8 .
R-statistics blog9 .
RDataMining10 .
1 [Link]
2 [Link]
3 [Link]
4 [Link]
5 [Link]
6 [Link]
7 [Link]
8 [Link]
9 [Link]
10 [Link]

1 Introduccin

Figura 1.1: Robert Gentleman (izquierda) y Ross Ihaka (derecha) creadores


de R.

Figura 1.2: Pgina del Cran.

1.2.

Descarga e instalacin

Para realizar la instalacin de R usted debe visitar la pgina del CRAN (Comprehensive R Archive Network) disponible en este enlace11 . Una vez ingrese
a la pgina encontrar un cuadro similar al mostrado en la Figura 1.2 donde
aparecen los enlaces de la instalacin para los sistemas operativos Linux, Mac
y Windows.
Supongamos que se desea instalar R en Windows, para esto se debe dar clic
sobre el hiperenlace Download R for Windows de la Figura 1.2. Una vez hecho
esto se abrir una pgina con el contenido mostrado en la Figura 1.3. Una vez
ingrese a esa nueva pgina usted debe dar clic sobre el hiperenlace install R
for the first time como es sealado por la flecha roja en la Figura 1.3.
Luego de esto se abrir otra pgina con un encabezado similar al mostrado en
la Figura 1.4, al momento de capturar la figura la versin actual de R era 3.2.5
pero seguramente en este momento usted tendr disponible una versin actua11 [Link]

1.3 Apariencia del programa

Figura 1.3: Pgina de instalacin para la primera ocasin.

Figura 1.4: Pgina de descarga.


lizada. Una vez all uste debe dar clic sobre Download R 3.2.5 for Windows
como es sealado por la flecha verde. Luego de esto se descargar el instalador
R en el computador el cual deber ser instalado con las opciones que vienen
por defecto.
Se recomienda observar el siguiente video didctico de instalacin de R disponible en este enlace12 para facilitar la tarea de instalacin.

1.3.

Apariencia del programa

Una vez que est instalado R en su computador, usted podr acceder a l por
la lista de programas o por medio del acceso directo que qued en el escritorio,
en la Figura 1.5 se muestra la apariencia del acceso directo para ingresar a R.
Al abrir R aparecer en la pantalla de su computador algo similar a lo que est
en la Figura 1.6. La ventana izquierda se llama consola y es donde se ingresan
las instrucciones, una vez que se construye un grfico se activa otra ventana
llamada ventana grfica. Cualquier usuario puede modificar la posicin y tamaos de estas ventanas, puede cambiar el tipo y tamao de las letras en la
12 [Link]

1 Introduccin

Figura 1.5: Apariencia del acceso directo para ingresar a R.

Figura 1.6: Apariencia de R.


consola, para hacer esto se deben explorar las opciones de editar en la barra
de herramientas.

1.4.

Tipos de objetos

En R existen varios tipos de objectos que permiten que el usuario pueda almacenar la informacin para realizar procedimientos estadsticos y grficos.
Los principales objetos en R son vectores, matrices, arreglos, marcos de datos
y listas. A continuacin se presentan las caractersticas de estos objetos y la
forma para crearlos.

1.4 Tipos de objetos

1.4.1.

Vectores

Los vectores son arreglos ordenados en los cuales se puede almacenar informacin de tipo numrico (variable cuantitativa), alfanumrico (variable cualitativa) o lgico (TRUE o FALSE), pero no mezclas de stos. La funcin de R
para crear un vector es c() y que significa concatenar; dentro de los parntesis
de esta funcin se ubica la informacin a almacenar. Una vez construdo el
vector se acostumbra a etiquetarlo con un nombre corto y representativo de
la informacin que almacena, la asignacin se hace por medio del operador <entre el nombre y el vector.
A continuacin se presenta un ejemplo de cmo crear tres vectores que contienen las respuestas de cinco personas a tres preguntas que se les realizaron.
edad <- c(15, 19, 13, NA, 20)
deporte <- c(TRUE, TRUE, NA, FALSE, TRUE)
[Link] <- c(NA, 'Superman', 'Batman', NA, 'Batman')
El vector edad es un vector cuantitativo y contiene las edades de las 5 personas. En la cuarta posicin del vector se coloc el smbolo NA que significa Not
Available debido a que no se registr la edad para esa persona. Al hacer una
asignacin se acostumbra a dejar un espacio antes y despus del operador <de asignacin. El segundo vector es llamado deporte y es un vector lgico que
almacena las respuestas a la pregunta de si la persona practica deporte, nuevamente aqu hay un NA para la tercera persona. El ltimo vector [Link]
contiene la informacin del cmic favorito de cada persona, como esta variable
es cualitativa es necesario usar las comillas ' ' para encerrar las respuestas.
Cuando se usa NA para representar una informacin Not Available no se
deben usar comillas.

Es posible usar comillas sencillas 'foo' o comillas dobles "foo" para ingresar valores de una variable cualitativa.
Si se desea ver lo que est almacenado en cada uno de estos vectores, se debe
escribir en la consola de R el nombre de uno de los objetos y luego se presiona la
tecla enter o intro, al realizar esto lo que se obtiene se muestra a continuacin.
edad
## [1] 15 19 13 NA 20

1 Introduccin

deporte
## [1]

TRUE

TRUE

NA FALSE

TRUE

[Link]
## [1] NA
## [5] "Batman"

1.4.2.

"Superman" "Batman"

NA

Matrices

Las matrices son arreglos rectangulares de filas y columnas con informacin


numrica, alfanumrica o lgica. Para construir una matriz se usa la funcin
matrix( ). Por ejemplo, para crear una matriz de 4 filas y 5 columnas (de
dimensin 4 5) con los primeros 20 nmeros positivos se escribe el cdigo
siguiente en la consola.
mimatriz <- matrix(data=1:20, nrow=4, ncol=5, byrow=FALSE)
El argumento data de la funcin sirve para indicar los datos que se van a
almacenar en la matriz, los argumentos nrow y ncol sirven para definir la
dimensin de la matriz y por ltimo el argumento byrow sirve para indicar si
la informacin contenida en data se debe ingresar por filas o no. Para observar
lo que qued almacenado en el objeto mimatriz se escribe en la consola el
nombre del objeto seguido de la tecla enter o intro.
mimatriz
##
##
##
##
##

[1,]
[2,]
[3,]
[4,]

1.4.3.

[,1] [,2] [,3] [,4] [,5]


1
5
9
13
17
2
6
10
14
18
3
7
11
15
19
4
8
12
16
20

Arreglos

Un arreglo es una matriz de varias dimensiones con informacin numrica,


alfanumrica o lgica. Para construir una arreglo se usa la funcin array( ).
Por ejemplo, para crear un arreglo de 3 4 2 con las primeras 24 letras
minsculas del alfabeto se escribe el siguiente cdigo.

1.4 Tipos de objetos

miarray <- array(data=letters[1:24], dim=c(3, 4, 2))


El argumento data de la funcin sirve para indicar los datos que se van a
almacenar en el arreglo y el argumento dim sirve para indicar las dimensiones
del arreglo. Para observar lo que qued almacenado en el objeto miarray se
escribe en la consola lo siguiente.
miarray
##
##
##
##
##
##
##
##
##
##
##
##
##

, , 1
[,1]
[1,] "a"
[2,] "b"
[3,] "c"

[,2]
"d"
"e"
"f"

[,3]
"g"
"h"
"i"

[,4]
"j"
"k"
"l"

[,2]
"p"
"q"
"r"

[,3]
"s"
"t"
"u"

[,4]
"v"
"w"
"x"

, , 2
[,1]
[1,] "m"
[2,] "n"
[3,] "o"

1.4.4.

Marco de datos

El marco de datos o data frame es uno de los objetos ms utilizados porque


permite agrupar vectores con informacin de diferente tipo (numrica, alfanumrica o lgica) en un mismo objeto, la nica restriccin es que los vectores
deben tener la misma longitud. Para crear un marco de datos se usa la funcin [Link]( ), como ejemplo vamos a crear un marco de datos con los
vectores edad, deporte y [Link] definidos anteriormente.
mimarco <- [Link](edad, deporte, [Link])
Una vez creado el objeto mimarco podemos ver el objeto escribiendo su nombre
en la consola, a continuacin se muestra lo que se obtiene.
mimarco
##
edad deporte [Link]
## 1
15
TRUE
<NA>
## 2
19
TRUE Superman

1 Introduccin

## 3
## 4
## 5

13
NA
20

NA
FALSE
TRUE

Batman
<NA>
Batman

De la salida anterior vemos que el marco de datos tiene 3 variables (columnas)


cuyos nombres coinciden con los nombres de los vectores creados anteriormente, los nmeros consecutivos al lado izquierdo son slo de referencia y permiten
identificar la informacin para cada persona en la base de datos.

1.4.5.

Listas

Las listas son otro tipo de objeto muy usado para almacenar objetos de diferente tipo. La instruccin para crear una lista es list( ). A continuacin
vamos a crear una lista que contiene tres objetos: un vector con 5 nmeros
aleatorios llamado mivector, una matriz de dimensin 6 2 con los primeros doce nmeros enteros positivos llamada matriz2 y el tercer objeto ser
el marco de datos mimarco creado en el apartado anterior. Las instrucciones
para crear la lista requerida se muestran a continuacin.
[Link](12345)
mivector <- runif(n=5)
matriz2 <- matrix(data=1:12, ncol=6)
milista <- list(E1=mivector, E2=matriz2, E3=mimarco)
La funcin [Link] de la lnea nmero 1 sirve para fijar la semilla de tal manera que los nmeros aleatorios generados en la segunda lnea con la funcin
runif sean siempre los mismos. En la ltima lnea del cdigo anterior se construye la lista, dentro de la funcin list se colocan los tres objetos mivector,
matriz2 y mimarco. Es posible colocarle un nombre especial a cada uno de
los elementos de la lista, en este ejemplo se colocaron los nombres E1, E2 y
E3 para cada uno de los tres elementos. Para observar lo que qued almacenado en la lista se escribe milista en la consola y el resultado se muestra a
continuacin.
milista
##
##
##
##
##
##
##
##

$E1
[1] 0.7209 0.8758 0.7610 0.8861 0.4565
$E2
[1,]
[2,]

[,1] [,2] [,3] [,4] [,5] [,6]


1
3
5
7
9
11
2
4
6
8
10
12

1.5 Gua de estilo para la escritura en R


##
##
##
##
##
##
##

$E3
edad deporte [Link]
1
15
TRUE
<NA>
2
19
TRUE Superman
3
13
NA
Batman
4
NA
FALSE
<NA>
5
20
TRUE
Batman

1.5.

Gua de estilo para la escritura en R

As como en el espaol existen reglas ortogrficas, la escritura de cdigos en


R tambin tiene unas reglas que se recomienda seguir para evitar confusiones.
Tener una buena gua de estilo es importante para que el cdigo creado por
usted sea fcilmente entendido por sus lectores Wickham (2015). No existe una
nica y mejor gua de estilo para escritura en R, sin embargo aqu vamos a
mostrar unas sugerencias basadas en la gua llamada Googles R style guide13 .

1.5.1.

Nombres de los archivos

Se sugiere que el nombre usado para nombrar un archivo tenga sentido y que
termine con extensin .R. A continuacin dos ejemplos de como nombrar mal
y bien un archivo.
Mal: hola.R
Bien: analisis_icfes.R

1.5.2.

Nombres de los objetos

Se recomienda no usar los smbolos _ y - dentro de los nombres de objetos.


Para las variables es preferible usar letras minsculas y separar las palabras
con puntos ([Link]) o utilizar la notacin camello iniciando en minscula (pesoMaiz). Para las funciones se recomienda usar la notacin camello
iniciando todas la palabras en mayscula (PlotRes). Para los nombres de las
constantes se recomienda que inicien con la letra k (kPrecioBus). A continuacin ejemplos de buenas y malas prcticas.
Para variables:
13 [Link]

10

1 Introduccin
Bien: [Link]
Aceptable: avgClicks
Mal: avg_Clicks

Para funciones:
Bien: CalculateAvgClicks
Mal: calculate_avg_clicks , calculateAvgClicks

1.5.3.

Longitud de una lnea de cdigo

Se recomienda que cada lnea tenga como mximo 80 caracteres. Si una lnea
es muy larga se debe cortar siempre por una coma.

1.5.4.

Espacios

Use espacios alrededor de todos los operadores binarios (=, +, -, <-, etc.).
Los espacios alrededor del smbolo = son opcionales cuando se usan para
ingresar valores dentro de una funcin. As como en espaol, nunca coloque
espacio antes de una coma, pero siempre use espacio luego de una coma. A
continuacin ejemplos de buenas y malas prcticas.
tab <- table(df[df$days < 0, 2])
tot <- sum(x[, 1])
tot <- sum(x[1, ])
tab <- table(df[df$days<0, 2])
tab <- table(df[df$days < 0,2])
tab <- table(df[df$days < 0 , 2])
tab<- table(df[df$days < 0, 2])
tab<-table(df[df$days < 0, 2])
tot <- sum(x[,1])
tot <- sum(x[1,])

#
#
#
#
#
#
#
#
#
#

Bien
Bien
Bien
Faltan espacios alrededor '<'
Falta espacio luego de coma
Sobra espacio antes de coma
Falta espacio antes de '<-'
Falta espacio alrededor de '<-'
Falta espacio luego de coma
Falta espacio luego de coma

Otra buena prctica es colocar espacio antes de un parntesis excepto cuando


se llama una funcin.
if (debug)
if(debug)
colMeans (x)

# Correcto
# Funciona pero no se recomienda
# Funciona pero no se recomienda

1.5 Gua de estilo para la escritura en R

11

Espacios extras pueden ser usados si con esto se mejora la apariencia del
cdigo, ver el ejemplo siguiente.
plot(x
y
ylim
xlab
ylab
main

=
=
=
=
=
=

[Link],
[Link][, MakeColName(metric, ptiles[1], "roiOpt")],
ylim,
"dates",
metric,
(paste(metric, " for 3 samples ", sep = "")))

No coloque espacios alrededor del cdigo que est dentro de parntesis ( )


o corchetes [ ], la nica excepcin es luego de una coma, ver el ejemplo
siguiente.
if (condicion)
x[1, ]
if ( condicion )
x[1,]

#
#
#
#

Correcto
Correcto
Sobran espacios alrededor de condicion
Se necesita espacio luego de coma

Los signos de agrupacin llaves { } se utilizan para agrupar bloques de cdigo


y se recomienda que nunca una llave abierta { est sola en una lnea; una llave
cerrada } si debe ir sola en su propia lnea. Se pueden omitir las llaves cuando
el bloque de instrucciones est formado por una sola lnea pero esa lnea de
cdigo NO debe ir en la misma lnea de la condicin. A continuacin dos
ejemplos de lo que se recomienda.
if ([Link](ylim)) {
ylim <- c(0, 0.06)
}

# Correcto

if ([Link](ylim))
ylim <- c(0, 0.06)

# Correcto

if ([Link](ylim)) ylim <- c(0, 0.06)

# Aceptable

if ([Link](ylim))
{
ylim <- c(0, 0.06)
}

# No se recomienda

if ([Link](ylim)) {ylim <- c(0, 0.06)}

# Frente a la llave { no debe ir nada


# la llave de cierre } debe ir sola

La sentencia else debe ir siempre entre llaves } {, ver el siguiente ejemplo.

12

1 Introduccin

if (condition) {
one or more lines
} else {
one or more lines
}

if (condition) {
one or more lines
}
else {
one or more lines
}

if (condition)
one line
else
one line

1.5.5.

# Correcto

# Incorrecto

# Incorrecto

Asignacin

Para realizar asignaciones se recomienda usar el smbolo <-, el smbolo de


igualdad = no se recomienda usarlo para asignaciones.
x <- 5
x = 5

# Correcto
# No recomendado

Para una explicacin ms detallada sobre el smbolo de asignacin se recomienda visitar este enlace14 .

1.5.6.

Punto y coma

No se recomienda colocar varias instrucciones separadas por ; en la misma


lnea, aunque funciona dificulta la revisin del cdigo.
n <- 100; y <- rnorm(n, mean=5); hist(y)

# No se recomienda

14 [Link]

1.5 Gua de estilo para la escritura en R


n <- 100
y <- rnorm(n, mean=5)
hist(y)

13
# Correcto

A pesar de la anterior advertencia es posible que en este libro usemos el ; en


algunas ocasiones, si lo hacemos es para ahorrar espacio en la presentacin del
cdigo.

2
Grficos para una variable cuantitativa

En este captulo se presentan funciones para la creacin de grficos con una


sola variable cuantitativa.

2.1.

Funcin stem

Nos permite obtener el grfico llamado de tallo y hoja debido a su apariencia.


Este grfico fue propuesto por Tukey (1977) y a pesar de no ser un grfico para
presentacin definitiva se utiliza a la vez que el analista recoge la informacin
para ver rpidamente la distribucin de los datos.
Qu muestra este grfico?
1. El centro de la distribucin.
2. La forma general de la distribucin:
Simtrica: Si las porciones a cada lado del centro son imgenes
espejos de las otras.
Sesgada a la izquierda: Si la cola izquierda (los valores menores)
es mucho ms larga que los de la derecha (los valores mayores).
Sesgada a la derecha: Opuesto a la sesgada a la izquierda.
3. Desviaciones marcadas de la forma global de la distribucin.
Outliers: Observaciones individuales que caen muy por fuera
del patrn general de los datos.
Gaps: Huecos en la distribucin
Ventajas del grfico:
1. Muy fcil de realizar y puede hacerse a mano.
2. Fcil de entender.
Desventajas del grfico:
1. El grfico es tosco y no sirve para presentaciones definitivas.
15

16

2 Grficos para una variable cuantitativa


2. Funciona cuando el nmero de observaciones no es muy grande.
3. No permite comparar claramente diferentes poblaciones

Ejemplo
Como ilustracin vamos a crear el grfico de tallo y hoja para la variable
altura (cm) de un grupo de estudiantes de la universidad. Primero se leern
los datos disponibles en github y luego se usar la funcin stem para obtener
el grfico. A continuacin el cdigo usado.
url <- '[Link]
datos <- [Link](file=url, header=T)
stem(datos$altura)
##
##
##
##
##
##
##
##
##
##
##
##
##

The decimal point is 1 digit(s) to the right of the |


14
15
15
16
16
17
17
18
18
19

|
|
|
|
|
|
|
|
|
|

7
3
679
0001
68888
001334
5678899
000033
88
1

De este grfico sencillo se puede ver que la variable presenta una mayor frecuencia para alturas ente 170 y 179 cm y que no tiene una distribucin simtrica.

2.2.

Funcin boxplot

La funcin boxplot sirve para crear un diagrama de cajas y bigote para una
variable cuantitativa. La estructura de la funcin boxplot con los argumentos
ms comunes de uso se muestran a continuacin.

2.2 Funcin boxplot

17

boxplot(x, formula, data, subset, [Link],


range, width, varwidth, notch, names,
plot, col, log, horizontal, add, ...)
Los argumentos de la funcin boxplot son:
x: vector numrico con los datos para crear el boxplot.
formula: frmula con la estructura x ~ g para indicar que las observaciones
en el vector x van a ser agrupadas de acuerdo a los niveles del factor g.
data: marco de datos con las variables.
subset: un vector opcional para especificar un subconjunto de observaciones
a ser usadas en el proceso de ajuste.
[Link]: una funcin la cual indica lo que debera pasar cuando los datos
contienen NAs.
range: valor numrico que indica la extensin de los bigotes. Si es positivo,
los bigotes se extendern hasta el punto ms extremo de tal manera que el
bigote no supere range veces el rango intercuatlico (IQ). Un valor de cero
hace que los bigotes se extiendan hasta los datos extremos.
width: un vector con los anchos relativos de las cajas.
varwidth: Si es TRUE, las cajas son dibujadas con anchos proporcionales a
las races cuadradas del nmero de observaciones en los grupos.
notch: si es TRUE, una cua es dibujada a cada lado de las cajas. Cuando
las cuas de dos grficos de caja no se traslapan, entonces las medianas son
significativamente diferentes a un nivel del 5 %.
names: un con las etiquetas a ser impresas debajo de cada boxplot.
plot: si es TRUE (por defecto) entonces se produce el grfico, de lo contrario,
se producen los resmenes de los boxplots.
col: vector con los colores a usar en el cuerpo de las cajas.
log: para indicar si las coordenadas x o y o sern graficadas en escala logartmica.
...: otros parmetros grficos que pueden ser pasados como argumentos
para el boxplot.

Ejemplo
Como ilustracin vamos a crear tres boxplot para la variable altura (cm) de
un grupo de estudiantes de la universidad, el primer boxplot ser sobre la
variable altura, el segundo ser un boxplot para altura diferenciando por sexo
y el tercer boxplot ser igual que el primero pero modificando los nombres
a imprimir en el eje horizontal. Primero se leern los datos disponibles en
github y luego se usar la funcin boxplot para obtener ambos grfico. A
continuacin el cdigo usado.

18

2 Grficos para una variable cuantitativa

url <- '[Link]


datos <- [Link](file=url, header=T)
par(mfrow=c(1, 3))
boxplot(x=datos$altura, ylab='Altura (cm)')
boxplot(altura ~ sexo, data=datos,
xlab='Sexo', ylab='Altura (cm)')

Mujer
Sexo

Masculino

Gnero
Hombre

Femenino

190
180
170

Altura (cm)

150

160

170
160
150

Altura (cm)

180

190

boxplot(altura ~ sexo, data=datos, horizontal=TRUE,


ylab='Gnero', xlab='Altura (cm)',
names=c('Masculino', 'Femenino'))

150

160

170

180

190

Altura (cm)

Figura 2.1: Boxplot para la variable altura.


En la Figura 2.1 se presentan los boxplots obtenidos con las instrucciones
anteriores. El segundo y tercer boxplot son el mismo, lo nico que se modific
fueron los nombres o etiquetas a colocar debajo de cada boxplot por medio
del argumento names y la orientacin.

2.3.

Funcin hist

La funcin hist sirve para crear el histograma para una variable cuantitativa.
Como argumentos esta funcin recibe un vector con los datos y opcionalmente
puede ingresarse como argumento el nmero de intervalos a ser graficados o
en su defecto el nmero de clases se determina con la frmula de Sturges.
Nota: los programas de computador usualmente construyen los histogramas

2.3 Funcin hist

19

automticamente, sin embargo, un buen programa debe permitirnos elegir el


nmero de intervalos del histograma. Si usted posee un programa que no le
permite hacer cambios, cambie de programa.
La estructura de la funcin hist con los argumentos ms comunes de uso se
muestran a continuacin.
x: vector numrico de valores para construir el histograma.
breaks: puede ser un nmero entero que indica el nmero aproximado de
clases o un vector cuyos elementos indican los lmites de los intervalos.
freq: argumento lgico; si se especifica como TRUE, el histograma presentar
frecuencias absolutas o conteo de datos para cada intervalo; si se especifica
como FALSE el histograma presentar las frecuencias relativas (en porcentaje).
Por defecto, este argumento toma el valor de TRUE siempre y cuando los
intervalos sean de igual ancho.
[Link]: argumento lgico; si se especifica como TRUE, un x[i]
igual a los equal a un valor breaks se incluir en la primera barra, si el
argumento right = TRUE, o en la ltima en caso contrario.
right: argumento lgico; si es TRUE, los intervalos son abiertos a la izquierda y cerrados a la derecha (a, b]. Para la primera clase o intervalo
si [Link]=TRUE el valor ms pequeo de los datos ser incluido
en ste. Si es FALSE los intervalos sern de la forma [a, b) y el argumento
[Link]=TRUE tendr el significado de incluir el ms alto.
col: para definir el color de las barras. Por defecto, NULL produce barras sin
fondo.
border: para definir el color de los bordes de las barras.
plot: argumento lgico. Por defecto es TRUE, y el resultado es el grfico del
histograma; si se especifica como FALSE el resultado es una lista de conteos
por cada intervalo.
labels: argumento lgico o carcter. Si se especifica como TRUE coloca etiquetas arriba de cada barra.
...: parmetros grficos adicionales a title y axis.

Ejemplo
Vamos a construir varios histogramas para los tiempos de 180 corredores de
la media maratn de CONAVI realizada hace algunos aos. A continuacin
se muestra la forma de ingresar los 180 datos.
maraton <- c(
10253, 10302,
10452, 10504,
10646, 10648,
10833, 10843,

10307,
10517,
10655,
10920,

10309,
10530,
10707,
10938,

10349,
10540,
10726,
10949,

10353,
10549,
10731,
10954,

10409,
10549,
10737,
10956,

10442,
10606,
10743,
10958,

10447,
10612,
10808,
11004,

20
11009,
11207,
11405,
11544,
11746,
11940,
12309,
12617,
13019,
13228,
13456,
13730,
13920,
14455,
15528,
20416,

2 Grficos para una variable cuantitativa


11024,
11215,
11413,
11549,
11800,
11947,
12327,
12640,
13040,
13307,
13536,
13747,
14000,
14509,
15549,
20520,

11037,
11226,
11438,
11559,
11814,
11952,
12341,
12700,
13110,
13316,
13608,
13810,
14010,
14552,
15644,
20600,

11045,
11233,
11453,
11612,
11828,
12005,
12413,
12706,
13114,
13335,
13612,
13850,
14025,
14652,
15758,
20732,

11046,
11239,
11500,
11617,
11832,
12044,
12433,
12727,
13122,
13420,
13620,
13854,
14152,
15009,
15837,
20748,

11049,
11307,
11501,
11635,
11841,
12113,
12440,
12840,
13155,
13425,
13646,
13901,
14208,
15026,
15916,
20916,

11104,
11330,
11502,
11655,
11909,
12209,
12447,
12851,
13205,
13435,
13705,
13905,
14230,
15242,
15926,
21149,

11127,
11342,
11503,
11731,
11926,
12230,
12530,
12851,
13210,
13435,
13730,
13907,
14344,
15406,
15948,
21714,

11205,
11351,
11527,
11735,
11937,
12258,
12600,
12937,
13220,
13448,
13730,
13912,
14400,
15409,
20055,
23256)

Los datos estn codificados como por seis nmeros en el formato hmmss, donde
h corresponde a las horas, mm a los minutos y ss a los segundos necesarios
para completar la maratn. Antes de construir los histogramas es necesario
convertir los tiempos anteriores almacenados en maraton a horas, para esto
se utiliza el siguiente cdigo.
horas <- maraton %/% 10000
min <- (maraton - horas * 10000) %/% 100
seg <- maraton - horas * 10000 - min * 100
Tiempos <- horas + min / 60 + seg / 3600
A continuacin se muestra el cdigo para construir cuatro histogramas con 2,
4, 8 y 16 intervalos para los tiempos a partir de la variable Tiempos.
par(mfrow=c(2,2))
hist(x=Tiempos, breaks=2, main="", xlab="Tiempo (horas)",
ylab="Frecuencias", las=1)
mtext("(A)", side=1, line=4, font=1)
hist(x=Tiempos, breaks=4, main="", xlab="Tiempo (horas)",
ylab="Frecuencias", las=1)
mtext("(B)", side=1, line=4, font=1)
hist(x=Tiempos, breaks=8, main="", xlab="Tiempo (horas)",
ylab="Frecuencias")

2.3 Funcin hist

21

mtext("(C)", side=1, line=4, font=1)

150

Frecuencias

Frecuencias

hist(x=Tiempos, breaks=16, main="", xlab="Tiempo (horas)",


ylab="Frecuencias")
mtext("(D)", side=1, line=4, font=1)

100
50
0
1.0

1.5

2.0

2.5

100
80
60
40
20
0

3.0

1.0

Tiempo (horas)

2.0

2.5

3.0

Tiempo (horas)

40

20
0

10 20 30

(B)

Frecuencias

(A)

Frecuencias

1.5

1.0

1.5

2.0

Tiempo (horas)

(C)

2.5

1.0

1.5

2.0

2.5

Tiempo (horas)

(D)

Figura 2.2: Histogramas para el tiempo en la media maratn de CONAVI.


A: histograma con dos intervalos, B: histograma con cuatro intervalos, C:
histograma con seis intervalos, C: histograma con 18 intervalos.
En la Figura 2.2 se presentan los cuatro histogramas. El histograma C, con 8
barras, muestra ms claramente la asimetra (este es el que la mayora de los
programas produce por defecto, ya que la regla de Sturges para este conjunto
de datos aproxima a 8 barras). Si consideramos ms barras por ejemplo 16,
como tenemos en D, se refina ms la informacin y empezamos a notar multimodalidad. En el cdigo anterior se incluy las = 1 para conseguir que los
nmero del eje Y queden escritos de forma horizontal, ver A y B en Figura
2.2.
A continuacin vamos a construir cuatro histogramas: el primero con dos
intervalos intervalos y puntos de corte dados por el mnimo, la mediana y el
mximo; el segundo con tres intervalos y puntos de corte dados por el mnimo,
cuartiles 1, 2, 3 y mximo; el cuarto con diez intervalos y puntos de corte
dados por los deciles; y el ltimo con veinte intervalos y puntos de corte dados

22

2 Grficos para una variable cuantitativa

por cuantiles 5, 10, . . ., 95. En el cdigo mostrado a continuacin se presenta


la creacin de los puntos de corte y los cuatro histogramas.
puntos1
puntos2
puntos3
puntos4

<<<<-

c(quantile(Tiempos,
c(quantile(Tiempos,
c(quantile(Tiempos,
c(quantile(Tiempos,

probs=c(0, 0.5, 1)))


probs=c(0, 0.25, 0.5, 0.75, 1)))
probs=seq(0, 1, by=0.1)))
probs=seq(0, 1, by=0.05)))

par(mfrow=c(2, 2))
hist(Tiempos, breaks=puntos1, freq=FALSE,
main="", ylab="Densidad")
mtext("(A)", side=1, line=4, font=1)
hist(Tiempos, breaks=puntos2, freq=FALSE,
main="", ylab="Densidad")
mtext("(B)", side=1, line=4, font=1)
hist(Tiempos, breaks=puntos3, freq=FALSE,
main="", ylab="Densidad")
mtext("(C)", side=1, line=4, font=1)
hist(Tiempos, breaks=puntos4, freq=FALSE,
main="", ylab="Densidad")
mtext("(D)", side=1, line=4, font=1)

ylim=c(0,2), labels=TRUE,

ylim=c(0,2), labels=TRUE,

ylim=c(0,2),

ylim=c(0,2),

Nota: En estos histogramas, las alturas corresponden a las intensidades (frec.


relativa/long. intervalo). Por tanto, el rea de cada rectngulo da cuenta de
las frecuencias relativas. Para el caso (A) ambos intervalos tienen igual rea
y cada uno contiene 50 % de los datos. esto puede verificarse as:
Intensidad primera clase = 1.4869888 = 0.5 / (1.384306 - 1.048056)
Intensidad segunda clase = 0.4293381 = 0.5 / (2.548889 - 1.384306)

2.4.

Funcin qqnorm y qqplot

Los grficos cuantil cuantil (quantile-quantile plot) son una ayuda para explorar si un conjunto de datos o muestra proviene de una poblacin con cierta
distribucin.
La funcin qqnorm sirve para explorar la normalidad de una muestra mientras
que la funcin qqplot es de propsito ms general, sirve para crear el grfico
cuantil cuantil para cualquier distribucin.
La estructura de las funciones con los argumentos ms comunes de uso se
muestran a continuacin.

Densidad

1.0

1.487

1.062
0.265

0.0

0.429

1.626
1.37

1.0

2.0

23

0.0

Densidad

2.0

2.4 Funcin qqnorm y qqplot

1.0

1.5

2.0

2.5

1.0

1.5

Tiempos

2.5

Tiempos

1.0
0.0

0.0

1.0

Densidad

2.0

(B)

2.0

(A)

Densidad

2.0

1.0

1.5

2.0
Tiempos

(C)

2.5

1.0

1.5

2.0

2.5

Tiempos

(D)

Figura 2.3: Histogramas para el tiempo en la media maratn de CONAVI.


A: histograma con dos intervalos, B: histograma con cuatro intervalos, C:
histograma con diez intervalos, C: histograma con veinte intervalos.

qqnorm(y, ...)
qqplot(y, x, ...)
La funcin qqnorm slo necesita que se le ingrese el vector con la muestra
por medio del parmetro y, la funcin qqplot necesita de la muestra en el
parmetro y y que se ingrese en el parmetro x los cuantiles de la poblacin
candidata.
Existe otra funcin til y es qqline, esta funcin sirve para agregar una lnea
de referencia al grfico cuantil cuantil obtenido con qqnorm.

Ejemplo
Simular 30 observaciones de una distribucin N ( = 10, = 4) y construir el
grfico cuantil cuantil.
El cdigo para simular la muestra y crear el grfico cuantil cuantil se muestra
a continuacin.

24

2 Grficos para una variable cuantitativa

muestra <- rnorm(n=30, mean=10, sd=4)


par(mfrow=c(1, 2))
qqnorm(y=muestra)
qqline(y=muestra)
qqnorm(y=muestra, main='', ylab='Cuantiles muestrales',
xlab='Cuantiles tericos', las=1)
qqline(y=muestra, col='blue', lwd=2, lty=2)

Cuantiles muestrales

20
5 10
0

Sample Quantiles

Normal Q-Q Plot

-2

-1

20
15
10
5
0
-2

Theoretical Quantiles

-1

Cuantiles tericos

Figura 2.4: Grfico cuantil cuantil para una muestra generada de una poblacin normal.
En la izquierda de la Figura 2.4 est el grfico cuantil cuantil sin editar, en
la derecha se encuentra el grfico luego de modificar los nombres de los ejes,
grosor y color de la lnea de referencia.

Ejemplo
Simular 100 observaciones de una distribucin W eibull(1, 1) y construir dos
grficos cuantil cuantil, el primero tomando como referencia los cuantiles de
una N (0, 1) y el segundo tomando los cuantiles de la W eibull(1, 1).
El cdigo para simular la muestra y crear los grficos cuantil cuantil se muestra
a continuacin.
n <- 100
muestra <- rweibull(n=n, shape=1, scale=1)

2.5 Funcin density

25

4
3
0

muestra

3
2
0

muestra

par(mfrow=c(1, 2))
qqplot(y=muestra, x=qnorm(ppoints(n)))
qqplot(y=muestra, x=qweibull(ppoints(n), shape=1, scale=1))

-2

-1

qnorm(ppoints(n))

qweibull(ppoints(n), shape = 1, scale = 1)

Figura 2.5: Grfico cuantil cuantil para una muestra generada de una poblacin Weibull.
En la Figura 2.5 estn los grficos cuantil cuantil solicitados. Del pnel izquierdo de la figura vemos que los puntos NO estn alineados, esto indica que la
muestra no proviene de la distribucin N (0, 1), esto es un resultado esperado
ya que sabamos que la muestra no fue generada de una normal. En el pnel
derecho de la misma figura vemos que los puntos SI estn alineados, esto indica que la muestra generada puede provenir de una poblacin W eibull(1, 1).
Los nombres de los ejes en la Figura 2.5 pueden ser editados para presentar
una figura con mejor apariencia.

2.5.

Funcin density

Los grficos de densidad son muy tiles porque permiten ver el(los) intervalo(s)
donde una variable cuantitativa puede ocurrir con mayor probabilidad.
La funcin density crea la informacin de la densidad y la funcin plot
dibuja la densidad.
La estructura de la funcin density con los argumentos ms comunes de uso
se muestra a continuacin.

26

2 Grficos para una variable cuantitativa

density(x, bw, adjust=1, kernel='gaussian', [Link]=FALSE)


Los argumentos de la funcin density son:
x: vector con los datos para los cuales se quiere la densidad.
bw: ancho de banda.
kernel: ncleo de suavizacin a usar, los posibles valores son gaussian,
rectangular, triangular, epanechnikov, biweight, cosine o optcosine,
el valor por defecto es gaussian.
[Link]: valor lgico, si es TRUE se eliminan los valores con NA para construir
la densidad, el valor por defecto es FALSE.

Ejemplo
Simular mil observaciones de una N (0, 1), aplicar la funcin density al vector
y explorar el contenido de la salida.
Primero se generan las observaciones y se almacenan en el objeto y, luego
se aplica la funcin density y el resultado se guarda en el objeto res, para
explorar lo que almacena res se usa la funcin names. A continuacin el cdigo
utilizado.
y <- rnorm(n=1000)
res <- density(y)
names(res)
## [1] "x"
## [5] "call"

"y"
"bw"
"[Link]" "[Link]"

"n"

De la salida anterior se observa que la lista res tiene 7 elementos, los dos
primeros son los vectores con las coordenadas para dibujar la densidad, los
restantes elementos con informacin adicional.

Ejemplo
Con los datos generados en el ejemplo anterior construir la densidad para
varios ncleo y para varios valores de ancho de banda.
En el siguiente cdigo se construyen 4 densidades para diferentes ncleos.
par(mfrow=c(2, 2))
plot(density(y, kernel='gaussian'))

2.5 Funcin density

27

plot(density(y, kernel='triangular'))
plot(density(y, kernel='cosine'))
plot(density(y, kernel='rectangular'))

0.2
0.0

0.2

Density

[Link](x = y, kernel = "triangular")

0.0

Density

[Link](x = y, kernel = "gaussian")

-4

-2

-4

-2

N = 1000 Bandwidth = 0.2241

[Link](x = y, kernel = "cosine")

[Link](x = y, kernel = "rectangular")

0.2

Density

0.0

0.2
0.0

Density

0.4

N = 1000 Bandwidth = 0.2241

-4

-2

N = 1000 Bandwidth = 0.2241

-4

-2

N = 1000 Bandwidth = 0.2241

Figura 2.6: Densidad para una muestra aleatoria de una N(0, 1) cambiando
el ncleo de la densidad.
En la Figura 2.6 se muestran las densidades para 4 elecciones del ncleo. En la
prctica se usa el ncleo que est por defecto (gaussian) ya que el objetivo de
una densidad es ver la zonas donde es ms probable encontrar observaciones
de la variable.
En el siguiente cdigo se construyen 4 densidades para diferentes anchos de
banda.
par(mfrow=c(2, 2))
plot(density(y, bw=0.1))
plot(density(y, bw=0.2241))
plot(density(y, bw=0.5))
plot(density(y, bw=1))

# bw obtenido antes

En la Figura 2.7 se muestran las densidades para 4 elecciones del parmetro


ancho de banda bw, el valor de 0.2241 fue el valor calculado automticamente
por R y fue obtenido de la Figura 2.6, los otros valores fueron elegidos arbitrariamente para ver los cambios en la densidad. El usar un ancho de banda

28

2 Grficos para una variable cuantitativa


[Link](x = y, bw = 0.2241)

-2

-4

-2

[Link](x = y, bw = 0.5)

[Link](x = y, bw = 1)

0.00

0.20

0.15

N = 1000 Bandwidth = 0.2241

Density

N = 1000 Bandwidth = 0.1

0.00

Density

0.2

Density

0.0

0.2
0.0

Density

0.4

[Link](x = y, bw = 0.1)

-4

-2

N = 1000 Bandwidth = 0.5

-6

-4

-2

N = 1000 Bandwidth = 1

Figura 2.7: Densidad para una muestra aleatoria de una N(0, 1) cambiando
el ancho de banda.
pequeo la densidad queda muy rugosa y usar un valor muy grande la suaviza,
se recomienda usar el valor automtico.

Ejemplo
Construir un grfico de densidad para la variable peso corporal de la base de
datos medidas_cuerpo, luego construir la densidad para la misma variable
pero diferenciando por sexo.
url <- '[Link]
datos <- [Link](file=url, header=T)
par(mfrow=c(1, 2))
plot(density(datos$peso), main='Densidad para el peso corporal',
xlab='Peso corporal (kg)', ylab='Densidad', lwd=4)
[Link] <- with(datos, density(peso[sexo == 'Hombre']))
[Link] <- with(datos, density(peso[sexo == 'Mujer']))
plot([Link], xlim=c(20, 120),
main='Densidad para el peso corporal', ylab='Densidad',
xlab='Peso corporal (kg)', lwd=4, col='blue')

2.5 Funcin density

29

lines([Link], lwd=4, col='red')


legend('topright', legend=c('Hombres', 'Mujeres'), bty='n',
lwd=3, col=c('blue', 'red'))

Densidad para el peso corporal

Densidad

0.03

0.04

Hombres
Mujeres

0.00

0.000

0.01

0.02

0.015
0.010
0.005

Densidad

0.020

Densidad para el peso corporal

20

40

60

80

Peso corporal (kg)

100

120

20

40

60

80

100

120

Peso corporal (kg)

Figura 2.8: Densidad para la variable peso en la izquierda, densidad para el


peso diferenciando por sexo a la derecha.
En el panel izquierdo de la Figura 2.8 se muestra la densidad para la variable peso, de esta figura se observa que tiene dos sectores de mayor densidad,
alrededor de 50 kg y alrededor de 80 kg. En el panel izquierdo estn la densidades del peso corporal para hombres y mujeres, aqu se observa claramente
la diferencia entre los pesos de hombres y mujeres.

3
Grficos para varias variables cuantitativas

En este captulo se presentan funciones para la creacin de grficos que involucran varias variables.

3.1.

Funcin plot

Los grficos de dispersin son muy tiles porque permiten ver la relacin que
existe entre dos variables cuantitativas, la funcin plot permite crear este tipo
de grficos. La estructura de la funcin plot con los argumentos ms usuales
se muestran a continuacin
plot(x, y, type, main, sub, xlab, ylab)
Los argumentos de la funcin plot son:
x: vector numrico con las coordenadas del eje horizontal.
y: vector numrico con las coordenadas del eje vertical
type: tipo de grfico a dibujar. Las opciones son:
'p' para obtener puntos, esta es la opcin por defecto.
'l' para obtener lneas.
'b' para obtener los puntos y lneas que unen los puntos.
'c' para obtener slo las lneas y dejando los espacios donde estaban
los puntos obtenidos con la opcin 'b'.
'o' para obtener los puntos y lineas superpuestas.
'h' para obtener lneas verticales desde el origen hasta el valor yi de
cada punto, similar a un histograma.
's' para obtener escalones.
'S' similar al anterior.
'n' para que no dibuje.
...: otros parmetros grficos que pueden ser pasados como argumentos
para plot.

31

32

3 Grficos para varias variables cuantitativas

Ejemplo
Crear 16 parejas de puntos tales que x = 5, 4, . . . , 9, 10 con y = 10 + (x
3)2 , dibujar los nueve diagramas de dispersin de y contra x usando todos los
valores posibles para el parmetro type.
A continuacin se muestra el cdigo para crear las 16 parejas de x e y. Los
nueve diagramas de dispersin se observan en la Figura 3.1, de esta figura se
observa claramente el efecto que tiene el parmetro type en la construccin
del diagrama de dispersin.
x <- -5:10
y <- -10 + (x-3)^2
par(mfrow=c(3, 3))
plot(x=x, y=y, type='p',
plot(x=x, y=y, type='l',
plot(x=x, y=y, type='b',
plot(x=x, y=y, type='c',
plot(x=x, y=y, type='o',
plot(x=x, y=y, type='h',
plot(x=x, y=y, type='s',
plot(x=x, y=y, type='S',
plot(x=x, y=y, type='n',

main="con
main="con
main="con
main="con
main="con
main="con
main="con
main="con
main="con

type='p'")
type='l'")
type='b'")
type='c'")
type='o'")
type='h'")
type='s'")
type='S'")
type='n'")

Ejemplo
Como ilustracin vamos a crear un diagrama de dispersin entre el precio de
apartamentos usados en la ciudad de Medelln y el rea de los apartamentos.
El cdigo necesario para cargar la base de datos y construir el diagrama de
dispersin se muestra a continuacin.
url <- '[Link]
datos <- [Link](file=url, header=T)
par(mfrow=c(1, 2))
plot(x=datos$mt2, y=datos$precio)
plot(x=datos$mt2, y=datos$precio, pch='.',
xlab='rea del apartamento (m2)', ylab='Precio (millones de pesos)')
En la Figura 3.2 se presenta el diagrama de dispersin entre precio y rea de
los apartamentos, de este diagrama se observa claramente que a medida que los
apartamentos tienen mayor rea el precio promedio y la variabilidad del precio
aumentan. Para el diagrama de dispersin de la derecha se us el parmetro

3.1 Funcin plot

33

20 40
-10

20 40

10

-5

10

-5

10

con type='c'

con type='o'

con type='h'

10

-10

-10

y
-5

20 40

20 40

20 40

-10

-5

10

-5

10

con type='s'

con type='S'

con type='n'

5
x

10

-10

-10

-10
-5

20 40

20 40

20 40

-5

con type='b'

-10

20 40

con type='l'

-10

con type='p'

-5

10

-5

Figura 3.1: Efecto del parmetro type en la funcin plot.

5
x

10

100

300

500

datos$mt2

1000
0

Precio (millones de pesos)

1000

3 Grficos para varias variables cuantitativas

datos$precio

34

100

300

500

rea del apartamento (m2)

Figura 3.2: Diagrama de dispersin del precio del apartamento versus rea
del apartamento. A la izquierda el diagrama de dispersin sin editar y a la
derecha el diagrama de dispersin mejorado
pch='.' con el objetivo de obtener pequeos puntos que representen cada
apartamento y que no se traslapen debido a que se tienen 694 observaciones
en la base de datos.

3.2.

Funcin persp

La funcin persp dibuja superfices en tres dimensiones y es posible rotar la


superficie para obtener una perpectiva apropiada. La estructura de la funcin
persp con los argumentos ms usuales se muestran a continuacin.
persp(x, y, z, main, sub, theta, phi, r, col, border, box, axes, nticks)
Los argumentos de la funcin plot son:
x: vector numrico con los valores de x donde fue evaluada la funcin o
superficie.
y: vector numrico con los valores de y donde fue evaluada la funcin o
superficie.
z: matriz que contiene las alturas z de la supercifie para cada combinacin
de x e y.
main: vector numrico con las coordenadas del eje vertical.
sub: vector numrico con las coordenadas del eje vertical.

3.2 Funcin persp

35

Figura 3.3: Ilustracin de los angulos theta y phi para la funcin persp.
Figura tomada de [Link]
theta, phi: ngulo para la visin de la superficie, theta para la direccin
azimutal y phi para latitud. Ver Figura 3.3 para una ilustracin de los
ngulos.
r: distancia entre el centro de la caja de dibujo al punto de vista.
col: color de la superficie.
border: color para el borde de la superficie.
box: valor lgico para indicar si se quiere dibujar la caja que contiene la
superficie, por defecto es TRUE.
axes: valor lgico para indicar si se desean marcas en los ejes y nombres de
los ejes, por defecto es TRUE. Si box='FALSE' no aparecen marcas ni nombres
de los ejes.
expand: factor de expansin aplicado a los valores en el eje z.
ticktype: tipo de marcas a colocar en los ejes, simple no dibuja nada y
detailed coloca nmeros a los ejes.
nticks: nmero aproximado de marcas en los ejes.

Ejemplo
Dibujar la superficie asociada a la funcin f (x, y) = sen(x2 + y 2 ) para 2
x 2 y 2 y 2. Usar 4 combinaciones de los parmetros theta y phi
para obtener un buen punto de vista de la superficie.
Lo primero que se debe hacer es crear la funcin f (x, y) la cual se va a llamar
fun. Luego se definen los vectores x e y tomando por ejemplo 25 puntos
equiespaciados en el intervalo [2, 2]. Luego se usa la funcin outer para crear
la rejilla o matriz que contiene los valores de f (x, y) para cada combinacin
de x e y, los resultados se almacenan en el objeto z. Por ltimo se dibujan 4
perspectivas de la funcin variando los parmetros theta y phi de la funcin
persp. A continuacin el cdigo utilizado.
fun <- function(x, y)
sin(x^2 + y^2)
x <- seq(from=-2, to=2, [Link]=25)
y <- seq(from=-2, to=2, [Link]=25)

36

3 Grficos para varias variables cuantitativas

z <- outer(x, y, fun)


par(mfrow=c(2, 2), mar=c(1, 1, 2, 1))
persp(x, y, z, zlim=c(-1, 1.5), theta=0, phi=0, col='aquamarine',
main='(A) theta=0, phi=0')
persp(x, y, z, zlim=c(-1, 1.5), theta=15, phi=15, col='lightpink',
main='(B) theta=15, phi=15')
persp(x, y, z, zlim=c(-1, 1.5), theta=45, phi=30, col='yellow1',
main='(c) theta=45, phi=30')
persp(x, y, z, zlim=c(-1, 1.5), theta=60, phi=50, col='lightblue',
main='(D) theta=60, phi=50')
(A) theta=0, phi=0

(B) theta=15, phi=15

x
x

(c) theta=45, phi=30

(D) theta=60, phi=50

Figura 3.4: Superficie generada con persp y diferentes valores de theta y


phi.
En la Figura 3.4 se presentan las 4 perspectivas de la funcin f (x, y) = sen(x2 +
y 2 ). De los 4 pneles se nota que (C) y (D) muestran mejor la superficie de
inters.
Al aumentar el valor del parmetro [Link] en la creacin de los vectores
x e y se obtendr una rejilla ms tupida, se recomienda modificar este valor
para obtener una superficie apropiada.

Ejemplo
Dibujar la superficie de una distribucin normal bivariada con vector de medias = (5, 12) , varianzas unitarias y covarianza con valor de -0.8. Explorar
el efecto de los parmetros ticktype, nticks, expand, axes y box.

3.3 Funcin persp

37

Primero se define el vector de medias y la matriz de varianzas y covarianzas,


luego se carga el paquete mvtnorm que contiene la funcin dmvnorm que calcula
la densidad dado el vector de medias y la matriz de varianzas y covarianzas.
Se construye la funcin fun y se vectoriza para luego obtener las alturas de
la superficie con la ayuda de outer. Por ltimo se dibujan tres perspectivas
diferentes para la densidad modificando los parmetros ticktype, nticks,
expand, axes y box, a continuacin el cdigo usado.
media <- c(5, 12)
varianza <- matrix(c(1, -0.8, -0.8, 1), ncol=2)
require(mvtnorm)
fun <- function(x, y) dmvnorm(c(x, y), mean=media, sigma=varianza)
fun <- Vectorize(fun)
x <- seq(from=2, to=8, [Link]=30)
y <- seq(from=9, to=15, [Link]=30)
z <- outer(x, y, fun)
par(mfrow=c(1,
persp(x, y, z,
persp(x, y, z,
persp(x, y, z,

3), mar=c(1, 1, 2, 1))


theta=30, phi=30, ticktype = "detailed", nticks=4)
theta=30, phi=30, col='salmon1', expand=0.5, axes=FALSE)
theta=30, phi=30, col='springgreen1', expand=0.2, box=FALSE)

0.2

0.1

14
0.0
2

12
4

10

Figura 3.5: Distribucin normal bivariada.


En la Figura 3.5 se presentan las 3 perspectivas para la densidad. Note los
efectos que ticktype, nticks, expand, axes y box tienen sobre los dibujos
de las perspectivas.

38

3 Grficos para varias variables cuantitativas

3.3.

Funcin pairs

Las matrices de dispersin obtenidas con la funcin pairs proporcionan un


mtodo simple de presentar las relaciones entre pares de variables cuantitativas y son la versin mltiple de la funcin plot. Este grfico consiste en
una matriz donde cada entrada presenta un grfico de dispersin sencillo. Un
inconveniente es que si tenemos muchas variables el tamao de cada entrada
se reduce demasiado impidiendo ver con claridad las relaciones entre los pares
de variables. La celda (i, j) de una matriz de dispersin contiene el grfico de
dispersin de la columna i versus la columna j de la matriz de datos.
En la Figura 3.6 se muestra un ejemplo de una matriz de dispersin para un
conjunto de datos, en la diagonal estn los nombres de las variables y por
fuera de la diagonal estn los diagramas de dispersin para cada combinacin
de variables.

6 7 8 9
6.0 7.5 9.0

5 6 7 8 9

INTG

7.5

DMNR

10

6.0

DECI

CONT

PREP
6.0

7.5

9.0

6.0 7.0 8.0

Figura 3.6: Ilustracin de una matriz de dispersin.


La estructura de la funcin pairs con los argumentos ms usuales se muestran
a continuacin.

3.3 Funcin pairs

39

pairs(x, labels, panel = points, ...,


horInd = 1:nc, verInd = 1:nc,
[Link] = panel, [Link] = panel,
[Link] = NULL, [Link] = textPanel,
[Link] = 0.5 + [Link]/3, [Link] = 3,
[Link] = NULL, [Link] = 1,
row1attop = TRUE, gap = 1, log = "")
Los argumentos de la funcin pairs son:
x: matriz o marco de datos con la informacin de las variables cuantitativas
a incluir en la matriz de dispersin.
labels: vector opcional con los nombres a colocar en la diagonal, por defecto
se usan los nombres de columnas del objeto x.
panel: funcin usual de la forma function(x,y,...) a ser usada para determinar el contenido de los pneles. Por defecto es points, indicando que
se graficarn los puntos de los pares de variables. Es posible utilizar aqu
otras funciones diseadas por el usuario.
...: Indica que es posible agregar otros parmetros grficos, tales como pch
y col, con los cuales puede especificarse un vector de smbolos y colores a
ser usados en los scatterplots.
[Link], [Link]: funcin usual de la forma function(x,y,...)
para definir lo que se desea dibujar en los paneles abajo y arriba de la
diagonal.
[Link]: funcin usual de la forma function(x,y,...) para definir lo
que se desea dibujar en la diagonal.
[Link]: Es opcional. Permite que una funcin: function(x, y,
labels, cex, font, ...) sea aplicada a los paneles de la diagonal.
[Link]: Para especificar la posicin y de las etiquetas en el text panel.
[Link], [Link]: Parmetros para la expansin de caracteres y
fuentes a usar en las etiquetas de las variables.
row1attop: Parmetro lgico con el cual se especifica si el grfico para especificar si el diseo lucir como una matriz con su primera fila en la parte
superior o como un grfico con fila uno en la base. Por defecto es lo primero.

Ejemplo
Dibujar una matriz de dispersin para las variables precio, rea, nmero de
alcobas y nmero de baos de la base de datos sobre apartamentos en Medelln.
A continuacin se muestra el cdigo usado para crear el grfico solicitado. El
objeto datos corresponde a la base de datos completa mientras que [Link]
es el marco de datos slo con las variables de inters precio, rea, nmero de
alcobas y nmero de baos.

40

3 Grficos para varias variables cuantitativas

url <- '[Link]


datos <- [Link](file=url, header=T)
[Link] <- datos[, c('precio', 'mt2', 'alcobas', 'banos')]
pairs([Link])

300

500

6
1500

100

300

500

0 500

precio

10 14

100

mt2

alcobas

banos
0

500

1500

2 4 6 8

12

Figura 3.7: Matriz de dispersin para las variables precio, rea, nmero de
alcobas y nmero de baos de la base de datos sobre apartamentos en Medelln.
En la Figura 3.7 se muestra la matriz de dispersin para las variables del
marco de datos [Link].

Ejemplo
Volver a construir la Figura 3.7 editando los nombres de las variables, usando
cruces rojas en lugar de puntos, en escala logaritmica, con marcas horizontales
en el eje vertical y eliminando los diagramas de dispersin abajo de la diagonal.
Para obtener la nueva matriz de dispersin con los cambios solicitados se usa
el siguiente cdigo. En la Figura 3.8 se presenta la nueva matriz de dispersin.

3.3 Funcin pairs

41

pairs([Link], [Link]=NULL, [Link]=1.5, log='xy',


main='Matriz de dispersin', las=1,
labels=c('Precio', 'rea', 'Num alcobas', 'Num baos'),
pch=3, cex=0.6, col='red')

Matriz de dispersin
50
2000
1000
500
200
100
50

200

1000

50

200

500 1

10

3 4

6
2000
1000
500
200
100
50

Precio

500
200
100
50

rea

10
5

Num alcobas

2
1
6
5
4
3
2

Num baos

1
1

3 4

Figura 3.8: Matriz de dispersin modificando los parmetros adicionales de


la funcin pairs.

Ejemplo
Construir una matriz de dispersin con las variables precio, rea y avaluo para
apartamentos que cumplan la condicin 100m2 < area < 130m2 . Adicionalmente, se deben diferenciar los apartamentos sin parqueadero con color rojo
y los apartamentos con parqueadero con color verde.
Para crear una matriz de dispersin se puede tambien usar la base de datos
original llamada datos que contiene todas las variables y usar una frmula
con la ayuda del operador ~ para indicar las variables de inters. La frmula
NO debe contener nada del lado izquierdo mientras que en el lado derecho se

42

3 Grficos para varias variables cuantitativas

colocan todas las variables a considerar en la matriz de dispersin, por esta


razn es que en el cdido mostrado abajo se inicia con la instruccin ~ precio
+ mt2 + avaluo. Para incluir condiciones se usa el parmetro subset de la
siguiente manera: subset=mt2 > 100 & mt2 < 130. A continuacin el cdigo
completo para construir la matriz de dispersin solicitada.
col1 <- ifelse(datos$parqueadero == 'no', 'red', 'green3')
pairs(~ precio + mt2 + avaluo, data=datos,
[Link]=NULL, col=col1,
subset=mt2 > 100 & mt2 < 130, pch=19, cex=0.8,
main="Matriz de dispersin para aptos con
100 < rea < 130 mt2")

Matriz de dispersin para aptos con


100 < rea < 130 mt2
300

400

500 100

110

120

130 0 50

150

250

350

300
120

130

100

precio

100

300

500

200

500

100

250

100

110

mt2

100

avaluo
0 50

150

250

350

Figura 3.9: Matriz de dispersin con un subconjunto de los datos y con


colores para identificar los puntos.
En la Figura 3.9 se presenta la matriz de dispersin solicitada, los puntos rojos
representan los apartamento sin parqueadero mientras que los puntos verdes
son los apartamento que si tienen parqueadero.

3.3 Funcin pairs

43

Ejemplo
Es posible agregar una leyenda a una matriz de dispersin?
Claro que es posible, se construye la matriz de dispersin y se deja en el lienzo
del dibujo un espacio para colocar la leyenda. A continuacin se muestra un
ejemplo disponible en Stackoverflow1 . A continuacin se muestra el cdigo
para el ejemplo y en la Figura 3.10 se presenta el resultado.
pairs(iris[1:4], main="Anderson's Iris Data -- 3 species",
pch=21, bg=c("red", "green3", "blue")[iris$Species],
oma=c(4, 4, 6, 12))
par(xpd=TRUE)
legend(0.85, 0.7, [Link](unique(iris$Species)), bty='n',
fill=c("red", "green3", "blue"))

Anderson's Iris Data -- 3 species


3.0

4.0

0.5

1.5

2.5
7.5

2.0

4.5

6.0

[Link]

4.0

setosa

3.0

[Link]

versicolor

2.0

virginica

1.5

2.5

[Link]

0.5

[Link]

4.5

6.0

7.5

Figura 3.10: Matriz de dispersin con leyenda.


1 [Link]

44

3 Grficos para varias variables cuantitativas

Ejemplo
Es posible modificar el contenido de los pneles de una matriz de dispersin?
Claro que es posible, para hacer esto se definen funciones que hagan lo que se
desea ver tanto en la diagonal como arriba y abajo de la misma.
Como ejemplo vamos a construir una matriz de dispersin que cumpla:
sobre la diagonal un diagrama de dispersin para las variables involucradas
y la recta de regresin ajustada,
en la diagonal un histograma para la variable,
debajo de la diagonal el coeficiente de correlacin entre las variables involucradas y usando un tamao de fuente proporcional a la fuerza de correlacin.
Para obtener esta matriz de dispersin especial se definen a continuacin las
funciones [Link], [Link] y [Link], a continuacin el cdigo utilizado. Luego se usa la funcin pairs y se indica qu funcin debe actuar en
cada uno de los parmetros [Link], [Link] y [Link].
# Funcin para dibujar los puntos y agregar la recta de regresin
[Link] <- function (x, y)
{
points(x, y, pch=20)
abline(lm(y ~ x), lwd=2, col='dodgerblue2')
}
# Funcin para crear el histograma
[Link] <- function(x, ...)
{
usr <- par("usr"); [Link](par(usr))
par(usr = c(usr[1:2], 0, 1.5) )
h <- hist(x, plot = FALSE)
breaks <- h$breaks; nB <- length(breaks)
y <- h$counts; y <- y/max(y)
rect(breaks[-nB], 0, breaks[-1], y, col="dodgerblue2", ...)
}
# Funcin para obtener la correlacin
[Link] <- function(x, y, digits=2, prefix="", [Link])
{
usr <- par("usr"); [Link](par(usr))
par(usr = c(0, 1, 0, 1))
r <- abs(cor(x, y))
txt <- format(c(r, 0.123456789), digits=digits)[1]
txt <- paste(prefix, txt, sep="")

3.3 Funcin pairs

45

if(missing([Link])) cex <- 0.8/strwidth(txt)


text(0.5, 0.5, txt, cex = cex * r)
}
pairs([Link],
[Link] = [Link],
[Link] = [Link],
[Link] = [Link])

100

300

500

100

300

0.86

mt2

10 14

500

0 500

1500

precio

0.63

0.67

0.31

alcobas
0.19

banos
0.35

500

1500

2 4 6 8

12

Figura 3.11: Matriz de dispersin con pneles modificados.


En la Figura 3.11 se presenta la matriz de dispersin con las modificaciones
en cada uno de los pneles. Cualquier usuario puede modificar las funciones
[Link], [Link] y [Link] para personalizar la apariencia de los
contenidos.
La funcin [Link] est disponible en R para que el usuario pueda
incluir arriba o abajo de la diagonal un diagrama de dispersin con una lnea
resultado de un ajuste suavizado. Abajo se muestra el cdigo de cmo incluir
la funcin [Link] y en la Figura 3.12 se muestra grfico obtenido.

46

3 Grficos para varias variables cuantitativas

pairs([Link],
[Link] = [Link],
[Link] = [Link],
[Link] = [Link])

100

300

500

500

0 500

1500

precio

10 14

100

300

mt2

alcobas

banos

500

1500

2 4 6 8

12

Figura 3.12: Matriz de dispersin usando la funcin [Link].

3.4.

Funcin contour

4
Grficos para variables cualitativas

En este captulo se presentan funciones para la creacin de grficos para variables cualitativas.

4.1.

Funcin barplot

Los grficos de barras son tiles para representar las frecuencias absolutas
o relativas asociadas a los niveles de una variable cualitativa y la funcin
barplot se usa para obtener un grfico de barras. La estructura de la funcin
barplot con los argumentos ms comunes de uso se muestra a continuacin.
barplot(height, beside, horiz)
Los argumentos de la funcin barplot son:
height: vector o matriz con la informacin de las frecuencias absolutas o
relativas.
beside: valor lgico para indicar si las barras deben estar al lado cuando la
informacin ingresada es una matriz.
horiz: valor lgico para indicar si el diagrama de barras debe ser horizontal,
por defecto es FALSE.
La funcin barplot tiene otros parmetros que pueden ser consultados en la
ayuda de la funcin por medio de la instruccin ?barplot.

Ejemplo
Suponga que queremos construir un diagrama de barras para las frecuencias
relativas de la variable estrato socioeconmico del apartamento de la base de
datos sobre apartamentos usados en Medelln.
A continuacin se muestra el cdigo necesario para cargar la base de datos
47

48

4 Grficos para variables cualitativas

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
funcin table y los resultados se almacenan en el objeto tabla1 que contiene
las frecuencias absolutas. Para obtener las frecuencias relativas se usa luego
la funcin [Link] sobre el objeto tabla1.
url <- '[Link]
datos <- [Link](file=url, header=T)
tabla1 <- table(datos$estrato)
tabla1 <- [Link](tabla1)
tabla1
##
##
2
3
4
5
6
## 0.01153 0.23199 0.19885 0.20893 0.34870
Una vez se tiene el objeto con la informacin de las frecuencias relativas se
puede dibujar el diagrama de barras usando el siguiente cdigo.
barplot(tabla1, xlab='Estrato socioeconmico',
ylab='Frecuencia relativa', las=1)

Frecuencia relativa

0.30
0.25
0.20
0.15
0.10
0.05
0.00
2

Estrato socioeconmico

Figura 4.1: Diagrama de barras para el estrato socioeconmico de los apartamentos usados.
En la Figura 4.1 se presenta el diagrama de barras solicitado. Se observa que
hay pocos apartamentos (1.15 %) pertenecientes al estrato dos, los estratos

4.1 Funcin barplot

49

tres, cuatro y cinco aportan porcentajes similares a la base de datos y que el


estrato 6 es el que ms 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 continuacin se presenta el
cdigo para replicar la Figura 4.1 con las frecuencias relativas. Lo primero que
se hace es dibujar el diagrama de barras y almacenar la informacin de l en el
objeto xx para luego poder usar la ubicacin de cada una de las barras. Note
que se agreg tambin ylim=c(0, 0.45) para conseguir una ampliacin del
eje vertical, esto para lograr que se vea el nmero sobre la barra del estrato
6. Luego se usa la funcin text para incluir un texto en las coordenadas
x=xx y y=tabla1, el parmetro pos=3 coloca el texto en la parte superior
de las coordenadas y el parmetro label sirve para indicar lo que se desea
escribir en las coordenadas indicadas, en este caso son las frecuencias relativas
almacenadas en tabla1.
xx <- barplot(tabla1, ylim=c(0, 0.45), col=gray(0.9),
xlab='Estrato socioeconmico',
ylab='Frecuencia relativa', las=1)
text(x=xx, y=tabla1, pos=3, cex=0.8, col="red",
label=round(tabla1, 4))

Frecuencia relativa

0.4

0.3487

0.3
0.232

0.2

0.1988

0.2089

0.1
0.0115

0.0
2

Estrato socioeconmico

Figura 4.2: Diagrama de barras para el estrato socioeconmico de los apartamentos usados con las frecuencias relativas sobre las barras.
En la Figura 4.2 se muestra el diagrama de barras modificado. Note que si no

50

4 Grficos para variables cualitativas

se hubiese usado ylim=c(0, 0.45) al dibujar el diagrama, la marca sobre la


ltima barra no se podra ver.

Ejemplo
Suponga que queremos construir un diagrama de barras para comparar la
variable presencia de parqueadero con el estrato socioeconmico en la base de
datos sobre apartamentos usados en Medelln.
La funcin barplot tambin 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 cdigo.
tabla2 <- table(datos$parqueadero, datos$estrato)
tabla2
##
##
##
##

no
si

2
5
3

3
4
5
6
88 24
8
1
73 114 137 241

El anterior resultado es la tabla de contingencia entre las variables parqueadero y estrato, de esta tabla vemos que para estratos superiores el nmero de
apartamentos que si tienen parqueadero es mayor que los apartamentos sin
parqueadero. La tabla anterior se puede representar grficamente usando el
siguiente cdigo.
barplot(tabla2)
En la Figura 4.3 se muestra el grfico 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 estn una
encima de la otra y la comparacin no es tan clara como debera. Para mejorar
la comparacin se usa el parmetro besides=TRUE, a continuacin el cdigo
utilizado.
barplot(tabla2, beside=TRUE)
En la Figura 4.4 est el grfico de barras obtenido agregando besides=TRUE
para que las barras se ubiquen una junto a la otra. Este grfico se puede
mejorar an ms colocando una leyenda para identificar las barras, nombrando
los ejes y usando otros colores, a continuacin el cdigo utilizado.

51

50

100

150

200

4.1 Funcin barplot

50

100

150

200

Figura 4.3: Diagrama I de barras la relacin entre parqueadero y estrato.

Figura 4.4: Diagrama II de barras la relacin entre parqueadero y estrato.

52

4 Grficos para variables cualitativas

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"))

250

Frecuencia

200

no
si

150
100
50
0
2

Estrato

Figura 4.5: Relacin entre la presencia de parqueadero y el estrato socioeconmico.


En la Figura 4.5 se observa el grfico 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 cmo es el comportamiento de tener o no parquedadero dentro de cada
estrato, el siguiente cdigo construye la tabla3 con la informacin necesaria.
La funcin [Link] permite obtener la tabla de frecuencias relativas a
partir de una tabla de frecuencias absolutas, el parmetro margin sirve para
indicar si las frecuencias relativas se deben obtener por fila (margin=1) o por
columnas (margin=2).
tabla3 <- [Link](tabla2, margin=2)
tabla3
##
##

4.2 Funcin barplot


##
##

53

no 0.625000 0.546584 0.173913 0.055172 0.004132


si 0.375000 0.453416 0.826087 0.944828 0.995868

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 cdigo para generar un grfico asociado a la tabla3 se muestra a
continuacin.
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"))

Frecuencia relativa

1.0
0.8

no
si

0.6
0.4
0.2
0.0
2

Estrato

Figura 4.6: Relacin entre la presencia de parqueadero y el estrato socioeconmico.


Cules son las ventajas y/o desventajas de las figuras 4.5 y 4.6 al ser presentadas en un informe?

54

4.2.

4 Grficos para variables cualitativas

Funcin pie

En R es posible construir grficos de pastel para representar una tabla de


frecuencia relativa o absoluta, sin embargo este tipo de grficos no es recomendable y en la ayuda de la funcin se hace la siguiente advertencia:
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 funcin pie con los argumentos ms comunes de uso se
muestra a continuacin.
pie(x, labels)
Los argumentos de la funcin 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 grfico de pastel para las frecuencias relativas de la variable estrato socioeconmico del apartamento de la base de datos sobre apartamentos
usados en Medelln.
La tabla1 construda en el primer ejemplo de barplot se utiliza para construir
el grfico solicitado. Abajo el cdigo necesario para construir el grfico.
nombres <- paste('Estrato ', 2:6)
pie(x=tabla1, labels=nombres,
main='Grfico de pastel NO recomendado!!!')
La Figura 4.7 presenta el grfico de pastel construdo con la instruccin anterior.

4.2 Funcin pie

55
Grfico de pastel NO recomendado!!!

Estrato 4

Estrato 3

Estrato 2
Estrato 5
Estrato 6

Figura 4.7: Grfico de pastel para las frecuencias relativas del estrato socioeconmico.

EJERCICIOS
Use funciones o procedimientos (varias lneas) de R para responder cada una
de las siguientes preguntas.
Todas las preguntas siguientes estn relacionadas con la base de datos sobre
apartamentos1 usados en la ciudad de Medelln.
1. Construya un diagrama de barras para representar las frecuencias
ABSOLUTAS de la variable ubicacin.
2. Vuelva a construir el mismo diagrama de barras anterior pero de
forma horizontal y agregando nmeros de color azul para indicar
las frecuencias.
3. Construya una tabla de dos vas para las variables ubicacin y parqueadero.
4. Construya una tabla de frecuencias relativas para ver cmo se comporta la variable parqueadero dentro de cada ubicacin.
5. Dibuje un diagrama de barras para la tabla de frecuencias del punto
anterior.

1 [Link]

5
Funcin par

En este captulo se presentan funciones para la creacin de grficos que involucran varias variables.

5.1.

Funcin par

57

6
Funciones auxiliares

En este captulo se presentan funciones auxiliares que son tiles para complementar los grficos generados en R.

6.1.

Funcin abline

La funcin abline sirve para

59

60

6 Funciones auxiliares

6.2.

Funcin legend

6.3.

Funcin text

6.4.

Funcin lines

6.5.

Funcin points

6.6.

Funcin identify

6.7.

Funcin locator

6.8.

Funcin axes

6.9.

Funcin title

6.10. Funcin mtext

6.11. Funcin curve

6.12. Funcin rug

7
Funciones geomtricas

En este captulo se presentan funciones asociadas a geometra.

7.1.

Funcin arrows

7.2.

Funcin segments

7.3.

Funcin rect

7.4.

Funcin polygon

61

A
More to Say

Yeah! I have finished my book, but I have more to say about some topics. Let
me explain them in this appendix.
To know more about bookdown, see [Link]

63

Bibliografa

Hernndez, F. & Usuga, O. (2018). Manual de R. Universidad Nacional de


Colombia, Medelln, Colombia, primera edition. ISBN xxx-xxxxxxxxx.
Wickham, H. (2015). R Packages. OReilly Media, Inc.
Xie, Y. (2015). Dynamic Documents with R and knitr. Chapman and
Hall/CRC, Boca Raton, Florida, 2nd edition. ISBN 978-1498716963.
Xie, Y. (2016). bookdown: Authoring Books and Technical Documents with R
Markdown. R package version 0.2.5.

65

ndice alfabtico

abline, 59
arreglo, 6
arrows, 61
axes, 60
barplot, 47
boxplot, 16
contour, 46
curve, 60
densidad, 25
density, 25
diagrama de dispersin, 31
ejes, 60
flechas, 61
grfico de barras, 47
grfico de contornos, 46
grfico de pastel, 54
gua de estilo, 9
hist, 18
histograma, 18
identificador, 60
identify, 60
legend, 60
leyendas, 60
lines, 60
lista, 8
locator, 60
lneas, 60

mtext, 60
objetos, 4
pairs, 38
par, 57
persp, 34
pie, 54
plot, 31
points, 60
polygon, 61
polgonos, 61
puntos, 60
qqnorm, 22
qqplot, 22
rect, 61
rectas, 61
rug, 60
segmentos, 61
segments, 61
text, 60
texto, 60
title, 60
ttulos, 60
vectores, 5

marco de datos, 7
matrices, 6
67

También podría gustarte