Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Modulo 1: Introducción.....................................................................................................................2
Importancia de R............................................................................................................................2
¿Qué es R?................................................................................................................................2
Ventajas de R............................................................................................................................2
Instalación de R y RStudio..............................................................................................................3
Descarga e instalación de R........................................................................................................3
Descarga e instalación de RStudio.............................................................................................4
Panes..........................................................................................................................................5
Aspecto General.........................................................................................................................5
R Notebook................................................................................................................................5
Run.............................................................................................................................................5
Chunks.......................................................................................................................................5
Gráficas......................................................................................................................................6
Trabajando con chunks...............................................................................................................6
Obteniendo información de los data frames...............................................................................7
Pestaña Help...............................................................................................................................7
Modulo 2: Creación............................................................................................................................7
Tipos de datos en R........................................................................................................................7
Existen, principalmente, tres tipos de datos en R:......................................................................7
Tipos de datos................................................................................................................................8
Vectores.........................................................................................................................................9
Vectores en R.............................................................................................................................9
Indexación de vectores.............................................................................................................10
Matrices.......................................................................................................................................11
Matrices en R...........................................................................................................................11
Indexación de matrices.............................................................................................................12
Marcos de Datos(Data frame)......................................................................................................13
Marcos de datos en R...............................................................................................................13
Indexación de marcos de datos.................................................................................................14
Importación de bases de datos....................................................................................................15
Manejo de bases de datos.......................................................................................................15
Modulo 3: Visualización de datos.....................................................................................................16
Paquete ggplot2...........................................................................................................................16
Instalación de ggplot2............................................................................................................16
Graficas de dispersión..................................................................................................................16
Gramática de gráficos...............................................................................................................16
Propiedades de la geometría.....................................................................................................19
Propiedades de la estética.........................................................................................................22
Gráficas de barra y pastel.............................................................................................................24
Gráficos de barras..................................................................................................................24
Gráficos de pastel.....................................................................................................................26
Histogramas.................................................................................................................................29
Histogramas de frecuencia.....................................................................................................29
Módulo 4: Programación en R..........................................................................................................31
Condicionales...............................................................................................................................31
Comandos if y else...................................................................................................................31
Ciclos............................................................................................................................................32
Comandos for y while..............................................................................................................32
Comandos next y break............................................................................................................34
Funciones.....................................................................................................................................35
Desarrollo y aplicación de funciones........................................................................................35
Introducción a R.
Modulo 1: Introducción
Importancia de R
¿Qué es R?
1. Lenguaje de programación
Ejemplos:
Pruebas de hipótesis
Regresión lineal
Series de tiempo
Ejemplos:
Árboles de decisión
Clustering
Redes neuronales
Ventajas de R
SAS
Stata
SPSS
Acceso gratuito.
Uno de los mejores entornos que existe para R es RStudio, el cual es también un software
libre. Por ello es que hemos decidido utilizarlo para este curso.
Una de las desventajas de R es que su sintaxis puede ser un poco complicada, por ello, en
este curso te guiaremos de forma fácil a entender la manera de programar en R. Aprenderás
desde cero a construir bases de datos para luego extraer la mayor información posible de
ellas; así mismo, presentaremos diversas formas y paqueterías con las que podemos
representar gráficamente estos datos. Finalmente, concluiremos enseñando los comandos
más comunes para que tú puedas programar tus propias funciones en R.
Instalación de R y RStudio
Descarga e instalación de R
Para descargar R:
Acceder a www.r-project.org
Si eliges Windows:
Selecciona la opción de "instalar R por primera vez" ("install R for the first time") y luego
"Descargar R 4.0.0 para Windows".
Si eliges MacOS:
Selecciona "R-4.0.0.pkg" para la descarga. Cabe mencionar que este archivo funciona para
la versión High Sierra en adelante. Para versiones más antiguas como El Capitán o
Mavericks se descargan los archivos "R-3.6.3.nn.pkg" o "R-3.3.3.pkg", respectivamente.
Para instalar R en alguno de estos dos primeros casos, abre el archivo que se descargó en tu
computadora y sigue las instrucciones que aparecen ahí.
Si eliges Linux:
Elige el sistema operativo de Linux en el que estás trabajando (Debian, Red Hat, SUSE o
Ubuntu). En cada carpeta se encuentran las instrucciones de descarga e instalación; Sigue
las instrucciones y corre en la Terminal los códigos que aparecen ahí.
Panes
Source: Código.
Aspecto General
R Notebook
o Clic en la flecha
Run
Chunks
1. Clic en la Consola
2. Flecha arriba {use the keyboard styles to show the key} para cargar la última
instrucción
3. La gráfica aparece
1. Clic en "Export"
Nuevo chunk
1. Insert > R
Escribiendo las primeras tres letras de una instrucción, R nos sugiere autocompletar con
una instrucción válida al usar la tecla tab {format tab as key}.
names(x)
Nos muestra el nombre de las variables donde x es el nombre del data frame.
str(x)
Nos muestra la estructura de x siendo ésta el nombre del data frame.
View(x)
Abre una nueva pestaña con el contenido de x siendo ésta el nombre del data frame.
Pestaña Help
Escribir el nombre del data frame (busca entre los disponibles y autocompleta)
Enter
Muestra la descripción, variables y comandos incluidos, los cuales se pueden copiar y pegar
en un nuevo chunk.
Modulo 2: Creación.
Tipos de datos en R
1. Numéricos
2. Caracteres
3. Lógicos
La empresa cumple
el mínimo de ventas
Son datos que sólo mensual
x <- TRUE
toman dos (verdadero)
Lógicos
valores: verdadero La empresa no
x <- FALSE
o falso. cumple el mínimo
de ventas mensual
(falso)
En ciertos casos, podemos convertir la variable "x" de un tipo de dato a otro, según
nuestra conveniencia:
Vectores
Vectores en R
En cualquier lenguaje de programación, los datos se almacenan a través de vectores.
Estos pueden ser vectores de tipo numérico, caracter y lógico, según los datos que
contengan. Para crear estos vectores en R, se utiliza el comando "c" que es una abreviación
de "concatenar".
Ejemplos:
Para hacer un vector de caracteres v con los datos "uno", "tres"; y "cinco",
utilizamos la instrucción v <- c("uno", "tres", "cinco").
Para hacer un vector lógico v con los datos TRUE y FALSE, utilizamos la
instrucción v <- c(TRUE, FALSE).
Indexación de vectores
Al momento de crear un vector, la pregunta natural que surge es: ¿cómo accedemos a
los datos contenidos en él?
Enlistaremos algunas formas de hacerlo. Para ello, consideremos el vector v <- c(10, 12,
14, 16, 18, 20).
Ejemplos:
v[5] nos regresa el elemento de v en la posición cinco, es decir, 18.
v[-5] nos regresa todos los elementos de v con excepción del quinto, es decir [10,
12, 14, 16, 18].
v[2:5] nos regresa los elementos de v en las posiciones dos, tres, cuatro y cinco (de
la dos a la cinco), es decir, [12, 14, 16, 18].
v[c(2,3,6)] nos regresa los elementos de v en las posiciones dos, tres y seis, es decir,
[12, 14, 20].
Matrices
Matrices en R
Consideremos los vectores v <- c(5, 10, 15, 20) y w <- c(3, 6, 9, 12). Hay dos formas de
formar una matriz:
Ejemplos:
Esto se logra con el comando rownames(M) <- c("F1", "F2", "F3", "F4") para las filas
y colnames(M) <- c("C1", "C2", "C3", "C4", "C5") para las columnas.
Indexación de matrices
Al igual que en el caso de los vectores, debemos aprender a acceder a los elementos de
una matriz.
Consideremos los vectores v <- c(10, 11, 12), w <- c(13, 14, 15) y x <- c(16, 17, 18), y la
matriz M <- cbind(v, w, x) formada por dichos vectores. Las siguientes instrucciones
producen diferentes arreglos de los elementos de M:
M[2,-3] devuelve todos los valores de la segunda fila con excepción del tercero:
[11,14].
M[-filas, cols] devuelve un arreglo que contiene la segunda fila con las columnas
dos y tres de la matriz: [14, 17].
M[filas, -cols] devuelve en un arreglo que contiene las filas uno y tres con la primer
columna: [10, 12].
M[-filas, -cols] devuelve un arreglo eliminando las filas uno y tres y las columnas
dos y tres, es decir, constaría de un sólo elemento: 11.
Finalmente:
Marcos de datos en R
Una de las limitaciones de los vectores y matrices es que solo permiten datos de un
mismo tipo.
No podemos combinar datos numéricos con caracteres o con datos lógicos en un mismo
arreglo. Los marcos de datos (o data frames) proveen una solución a este problema y nos
permiten tener nuestros datos mejor organizados.
Comencemos creando tres vectores de tipos diferentes. Supongamos que contamos con la
información de los costos de producción de una empresa en el primer semestre del año:
Vector de costos (en miles de pesos): Costo <- c(7.3, 9.5, 8.6, 11.3, 6.7, 7.7).
Una vez creados los vectores que conformarán nuestro marco de datos, utilizamos el
comando df <- data.frame(Costo, Mes, Excedente) para combinarlos.
Esto nos permite incluirlos en el mismo arreglo aunque sean de diferente tipo.
Por último:
Los marcos de datos son arreglos que pueden contener diferentes tipos de datos.
Al ser estos mismos una especie de matriz, se puede acceder a ellos con los mismos
comandos que cubrimos en la clase de indexación de matrices. Sin embargo, al tener una
estructura diferente, existen comandos especiales para acceder a ellos:
Ejemplos:
filter(df, Costo > 8) devuelve las filas del marco de datos cuyo valor en la columna
"Costo" sea mayor a ocho.
filter(df, Mes == "Abril") devuelve las filas del marco de datos cuyo valor en la
columna "Mes" sean igual a "Abril".
filter(df, Excedente == TRUE) devuelve las filas del marco de datos cuyo valor en
la columna "Excedente" sean igual a TRUE.
Apartir de ahora y hasta el final del curso, nos referiremos a los marcos como bases
de datos.
El comando data nos desplega una lista de las bases disponibles en R. En la base datos <-
PlantGrowth se encuentra registrado el peso (weight) y el grupo de tratamiento (group) al
que pertenecieron 30 plantas en un experimento. La manera más fácil de obtener
información general sobre la base de datos es con la función summary(datos). Para la
columna numérica (weight) nos genera el resumen de cinco números (valor mínimo, primer
cuartil, mediana, media, tercer cuartil y valor máximo). Para la columna de caracteres nos
proporciona el número de niveles (categorías diferentes) y el número de veces que aparece
cada nivel.
Por último, podemos ordenar los datos de menor a mayor con la función order. Lo único
que tenemos que especificar es la columna numérica con respecto a la cual va a establecer
el orden, en este caso, weight. Así, escribimos "indice <- order(datos$weight)" y
luego "datos[indice, ]". Si queremos establecer el orden de mayor a menor, la instrucción
cambia a "indice <- order(datos$weight, decreasing = FALSE)" y "datos[indice, ]".
Instalación de ggplot2
La particularidad de este paquete es que cada gráfica que construye se conforma de una
serie de capas y cada una de ellas, le aporta un atributo diferente a la misma.
Por ejemplo:
Hay una capa que especifica los datos, otra que determina las variables que van a ocupar
los ejes y una más que determina la forma de la gráfica (líneas, puntos, barras), entre otras.
En este módulo cubriremos a detalle las capas más importantes de cada gráfico, ya que es
importante saber cómo se comportan para tener una mayor libertad al momento de graficar
y así obtener los resultados deseados.
Graficas de dispersión
Gramática de gráficos
Cualquier lenguaje tiene reglas gramaticales y lo mismo ocurre con los gráficos en R.
Cada gráfico se compone, principalmente, de tres capas: datos, estética y geometría.
Los datos se refieren a la base de datos que queremos graficar.
A este conjunto de capas se le conoce como la gramática de gráficos. Todas son igual de
importantes, si alguna falta no se producirá la gráfica deseada.
Por ejemplo:
Agregamos:
Para que R nos muestre el gráfico agregamos p en una nueva línea y compilamos.
Podemos notar en la gráfica que, conforme avanzan los días, el precio del dolar va
aumentando hasta que, finalmente, decrece de nuevo.
En la gráfica anterior utilizamos líneas. Ahora veamos, con una gráfica de puntos,
cómo se relacionan el precio del dolar y del petróleo.
Agregamos:
Existen otras capas que se pueden agregar al gráfico (facetas, estadísticas, coordenadas y
temas) pero no las veremos a detalle en este curso. Nos enfocaremos en entender las tres
capas principales (datos, estética y geometría) que son las bases de cualquier gráfica en R.
Propiedades de la geometría
El tipo de línea se modifica con p <- p + geom_line(linetype = 6). Hay seis valores
posibles para la variable linetype; cada uno produce un estilo de línea diferente.
Para hacer los cuatro cambios, modificamos los atributos dentro de la misma función: p <-
p + geom_line(linetype = 6, size = 1, colour = '#FA8072', alpha = 0.8), y la gráfica queda
como sigue:
Se pueden modificar también los atributos size, colour y alpha de la misma forma que
en geom_line.
Por ejemplo: p <- p + geom_point(shape = 15, size = 1.8, colour = '#CD5C5C', alpha = 0.9)
Por último:
Propiedades de la estética
Hemos visto que el atributo shape permite cambiar la forma de la figura en la
función geom_point y el atributo colour cambia su color.
Podemos modificar manualmente las figuras que queremos que aparezcan en el gráfico con
la instrucción p <- p + scale_shape_manual(values=c(16, 17, 15, 18)). Para modificar
manualmente los colores se utiliza p <- p + scale_color_manual(values =
c("purple","brown", "orange", "gray48")). Además de la segmentación por color y forma,
se puede dividir la gráfica por tamaño. Esto no es tan común como los primeros dos pero es
posible. Para ello se escribe p + aes(x = Petroleo, y = Dolar, size = Mes) en la segunda capa
y scale_size_manual(values = c( 2, 1.5, 1.8, 1)) para modificarlos manualmente.
Finalmente:
Agregamos nombres personalizados a los ejes con las instrucciones: p <- p + xlab("Precio
del petróleo") y p <- p + ylab("Tasa de cambio \n del dólar"), y título y subtítulo con p <- p
+ ggtitle("Petróleo vs Dólar", subtitle = "18/feb - 31/may") para completar el gráfico.
Gráficos de barras
Construiremos ahora un gráfico que nos muestre el número que personas contagiadas
que hay en cada entidad.
Es importante recalcar que, en los gráficos de barras, la variable que se asigna al eje x (en
este caso, entidad) debe de ser categórica. Primero, asignamos la base de datos a la variable
datos con la instrucción datos <- read.csv("COVID19MX.csv") y cargamos la librería de
ggplo2 con library(ggplot2). Nuevamente, nuestro código tendrá tres capas: datos, estética
y geometría.
Agregamos una p al final del código para desplegar el resultado y corremos los comandos
para obtener la gráfica.
Al igual que en las gráficas de dispersión, podemos cambiar el color de nuestra gráfica. El
atributo que cambia el color de las barras es fill. Recuerda que la gramática es importante al
momento de hacer estos cambios y produce resultados diferentes:
Similarmente:
Finalmente:
Agregamos las etiquetas de nuestra gráfica con p <- p + xlab("Entidad Federativa"), p <- p
+ ylab("Número de infectados") y p <- p + ggtitle("Datos COVID-19", subtitle = "Feb - Jun
2020") para completarlo.
Gráficos de pastel
Otro tipo de gráficas comunes en estadística son las de pastel. Estas consisten de un
círculo dividido en partes y que, generalmente, denotan un porcentaje.
La librería ggplot2 no tiene ninguna geometría específica para construir estos gráficos sin
embargo, es posible hacerlos a partir de un gráfico de barras.
Otra forma de construir este tipo de gráficos es con la función pie. Al ser una función
que no pertenece a ggplot2, no es necesario especificar las tres capas que utilizamos
regularmente.
No obstante, su uso es menos automatizado. Como ejemplo de este caso, hagamos ahora
una gráfica de pastel con los porcentajes de las personas con coronavirus que padecen
diabetes. Utilizando los datos que filtramos en el ejemplo anterior,
escribimos summary(datos). La función nos indica en la columna de "DIABETES" que,
del total de personas infectadas, hay 10,161 que padecen diabetes y 76,619 que no.
Haciendo los cálculos manualmente, tenemos que los porcentajes son 15% y 85%,
respectivamente.
Creamos los vectores Porcentajes <- c(15, 85) (numérico), Etiquetas <- c("15", "85%")
(categórico) y Colores <- c("#F8766D", "#00BFC4") con los colores que queremos que
tenga nuestra gráfica.
19 en la Ciudad de México"))
Por último, especificamos a qué categoría pertenece cada color con el vector Categorias <-
c("SI", "NO") y la instrucción legend("topright", legend = Categorias, fill = Colores)
No obstante, no es algo que nos deba preocupar ya que, estadísticamente hablando, es más
útil representar un conjunto de datos utilzando gráficas de barras; esto se debe a que, al
manejar porcentajes, perdemos información sobre la cantidad total de datos con la que
estamos trabajando.
Histogramas
Histogramas de frecuencia
Para ejemplificar esta gráfica haremos un histograma que nos de información de cómo
están distribuidas las edades de las personas infectadas. Dado que la edad es la única
variable numérica de nuestra base de datos, este es el único histograma que podremos
construir. Para este ejemplo necesitamos los datos completos (sin filtrar), entonces, los
cargamos de nuevo con datos <- read.csv("COVID19MX.csv").
El histograma se construye como sigue:
Empezamos la primer capa especificando los datos que vamos a utilizar: p <- ggplot(datos).
Al igual que los gráficos de barras, basta con especificar la variable que se asigna al eje x,
ya que el eje y será un conteo de los datos que caen en cada clase. Así, en la segunda capa
escribimos: p <- p + aes(x = EDAD).
Finalmente:
Un atributo extra que tienen las gráficas compuestas por barras es que podemos
cambiar el color del contorno de las mismas.
Esto se hace con el atributo colour (mismo que utilizamos para cambiar el color de las
líneas). Dividimos nuestro histograma por color según el sexo de cada persona
escribiendo colour = SEXO dentro de la estética y cambiamos manualmente los colores
con p <- p + scale_color_manual(values = c('#00BFC4','#F8766D')).
Al igual que en el gráfico de barras, el color dentro de las mismas se modifica con el
atributo fill. Lo cambiamos a un gris más claro escribiendo fill = "gray40" dentro de la
geometría.
Al igual que en las gráficas de barras, podemos modificar el ancho de las mismas pero en
vez de la variable width utilizamos binwidth dentro de la geometría. Así, la
instrucción geom_histogram(fill = "gray40", binwidth = 2) reduce el ancho de las barras.
Finalmente:
Módulo 4: Programación en R
Condicionales
Comandos if y else
Es por eso que en este módulo daremos las bases para poder crear funciones sencillas en R
y cómo utilizarlas para resolver problemas. Primero, cubriremos los
condicionales if y else que, como el nombre nos indica, nos permiten comparar dos o más
condiciones y actuar dependiendo del resultado de la comparación. Por ejemplo, cuando
estamos frente a un semáforo evaluamos una de dos condiciones: si el semáforo está en
verde seguimos nuestro camino y, en caso contrario (si está en amarillo o rojo), reducimos
nuestra velocidad hasta detenernos.
Más aún, podemos comparar más de dos condiciones agregando la instrucción else if.
Supongamos que dentro de las personas reprobadas queremos identificar a los estudiantes
que tienen calificaciones menores a 50 para darles asesorías personalizadas el siguente
semestre.
Comandos for y while
En esta lección aprenderemos el concepto de ciclos que, al igual que los condicionales,
nos servirán como herramienta para programar.
Los ciclos son conjuntos de instrucciones que se repiten cierto número de veces y son
utilizados para automatizar secciones de código.
Supongamos que tenemos una empresa que vende camisas a $120 cada una y nos llegan
cinco pedidos con el número de camisas que se requiere en cada uno: pedidos <- c(5, 3, 7,
2, 8). Haremos un programa que nos calcule el monto que debe de pagar cada cliente por su
pedido. Esto se hace multiplicando el número de camisas de cada pedido por el precio. Para
ello utilizaremos el ciclo for. Primero, determinamos el número de veces que repetiremos la
operación. Al ser cinco pedidos, escribirmos la instrucción for (k in 1:5). Con esto le
pedimos a R que nuestra variable k tome los valores de 1, 2, 3, 4 y 5; uno por cada pedido.
Después, dentro de llaves escribimos las instrucciones que se van a repetir por iteración:
Corriendo el código obtenemos que el costo de cada pedido es $600, $360, $840, $240 y
$960, respectivamente.
Ahora, supongamos que la empresa tiene solamente 15 camisas disponibles para vender; no
hay suficientes para abastecer los cinco pedidos, así que únicamente debemos de calcular
los costos de los pedidos que puedan cubrirse con esas camisas. En el ejemplo anterior era
necesario pasar por cada elemento del vector para calcular el costo pero ahora necesitamos
un ciclo que pare automaticamente cuando se acaben las camisas disponibles. Para ello,
utilizamos el ciclo while. Primero, especificamos nuestro número de camisas disponibles
con disponibles <- 15 y nuestro contador k <- 1 que va a ir aumentando por cada pedido
cubierto. Luego, escribimos while(disponibles != 0) lo cual le dice a R que repita este ciclo
hasta que el número de camisas disponibles sea cero; una vez que se acaben las camisas, el
ciclo automáticamente deja de repetirse. A continuación, escribimos dentro de llaves las
instrucciones que queremos que se lleven a cabo:
Corriendo el código vemos que el programa nos imprime solamente los costos de los
primeros tres pedidos: $600, $360 y $840, que son los únicos que podemos cubrir con las
15 camisas disponibles. Podemos inclusive imprimir el número de camisas disponibles
escribiendo disponibles en la terminal, para verificar que, efectivamente, este número es
ahora cero.
Comandos next y break
Un par de comandos que nos ayudan a tener más control sobre los ciclos
son next y break.
Ambos nos permiten interrumpir parcial o totalmente un ciclo cuando no es necesario que
se ejecute completo.
Nuestro objetivo será consultar automáticamente el inventario para saber cuántos sacos
tenemos disponibles. Dado que necesitamos acceder uno de los cuatro elementos del vector
utilizaremos el ciclo for. Así, inicializamos el ciclo con for (k in 1:4). Después, debemos
verificar que la prenda a la que se está accediendo sea el saco; para ello utilizamos el
condicional if:
Así, vemos que todas las herramientas que hemos aprendido en este módulo no son
independientes sino que pueden combinarse entre sí. Podemos mezclar condicionales con
ciclos, los cuales, a su vez, podemos interrumpir según nuestra conveniencia. Con todas
estas herramientas ya estamos listos para construir nuestras propias funciones en R.
Funciones
Ejemplo:
Haremos una función sencilla que determine si un número es primo o no, para números
mayores a dos. Primeramente, necesitamos especificar dos cosas: el nombre de la función y
las variables que requiere. La función se llamará "primos" y su única variable dependiente
será el número a evaluar. Así, escribimos primos <- function(numero) y abrimos llaves;
todo lo que se encuentre dentro de ellas será lo que realice nuestra función. Para saber si un
número es primo el programa debe de hacer lo siguiente:
1. Evaluar todos los números anteriores a él, empezando por dos, para saber si alguno
de ellos lo divide. Así, inicializamos el ciclo: for (k in 2:(numero-1))
Una vez corrido el código, aplicar la función es muy sencillo: debemos escribir en la
terminal el nombre seguido del número que queremos evaluar.
Ejemplo: