Está en la página 1de 23

Laboratorio de Programación: R y Python

Sesión 1: Introducción a R
José Mendoza

Comencemos!

R es un entorno y lenguaje de programación para procedimientos estadísticos libre y


open-source. Para comenzar instalaremos dos softwares:

1. R
- Descargamos la versión correspondiente al sistema operativo que usamos:
o Para Windows: https://cran.r-project.org/bin/windows/base/
o Para Mac: https://cran.r-project.org/bin/macosx/
Cada actualización del software puede generar cambios en paquetes o en
algunos procedimientos por lo que debemos averiguar los potenciales cambios
relevantes en cada actualización.

2. Instalar un Integrated Development Environment (IDE)


- Los IDE son interfaces que permiten escribir y ejecutar códigos, en este caso en
R, de manera más fácil. En el curso usaremos Rstudio, disponible aquí
https://posit.co/download/rstudio-desktop/. Adicionalmen–te, hay una lista
extensa de IDE alternativos como:
o Atom
o Visual Studio Code
o Sublime Text 3
o Jupyter
o Etc
Incluso algunos de estos IDE son language agnostic, sirven no solo para
manipular códigos de R sino también de otros lenguajes de programación
como Python e incluso otros softwares como Stata.

Para entender las diferencias entre R y Rstudio abramos R sin usar Rstudio. Luego de la
instalación abrimos el R GUI1 dando doble click en el ícono.

La consola mostrada permite introducir líneas de códigos de manera directa en el espacio


luego del símbolo >. En este caso, introducimos una operación matemática como 1+1 y

1
GUI significa Graphic User Interfaces y hace referencia a la primera interfaz que permite escribir código R
directamente.
luego pedimos que se muestre el texto Hola usando print(‘Hola’). Si escribimos un texto
de manera directa sobre la consola se genera un error dado que no se está siguiendo el
órden del lenguaje de programación.

Rstudio, o el IDE de preferencia, permite compilar todas las líneas de código de manera
que se facilita el orden de trabajo en el software. A diferencia del R GUI, la interfaz de
RStudio permite tener mayor flexibilidad en el manejo de los códigos y la información.

En la interfaz de RStudio se incluye un espacio para introducir líneas de códigos similar al


GUI R. En la parte superior se escriben las líneas de código dentro de un archivo con
terminación .R, este tipo de archivos también se pueden generar en otros procesadores
de texto como blocs de notas siempre y cuando se guarde con la terminación correcta.
Para mayor manejo tomemos en cuenta algunos atajos:
- Cuando se comienza a escribir un comando, se puede apretar la tecla Tab
(encima de la tecla de mayúsculas) de manera que se puede explorar todos lo
comandos instalados que comienzan con las letras ingresadas. Por ejemplo:

- La tecla F1 permite acceder a la página de ayuda del comando que se está


usando. La información correspondiente al comando aparece debajo:

También se puede lograr esto usando el comando ?. En este caso sería ?abs
- Con las teclas de flechas se puede regresar a comandos introducidos
previamente dentro de la consola.
- Para ver toda la lista de comandos se da click en Ctrl (en Windows) o Command
(en Mac) junto con la flecha hacia arriba. Esto también se encuentra disponible
en la venta de “History”.

Los archivos con terminación .R se llaman scripts, estos permiten compilar el


procedimiento que estamos generando así como permite poder compartir y depurar el
código. Para crear un script nuevo vamos a File -> New -> R Script o usamos los hotkeys
Ctrl+Shift+N (en Windows) o Command+Shift+N (en Mac). Podemos introducir
comentarios luego de usar #, estos comentarios no son interpretados en R como
operaciones por lo que solo sirven de guía para los lectores.

Para correr un código se puede dar click en el botón o se puede dar click en
Ctrol+Enter (en Windows) o Command+Enter (en Mac). Si solo se desea correr un pedazo
de código podemos seleccionarlo y dar click de la misma forma previamente presentada.
Se puede seleccionar todo el contenido del script con Ctrl+A (en Windows) o Command+A
(en Mac).

Las funcionalidades particulares de R pueden ser extendidas usando paquetes específicos


construidos por la comunidad de usuarios. Los paquetes o extensiones ya instalados
pueden verse en la ventana de Package:
Cuando un paquete se vuelve más estándar y es usado de manera masiva usualmente se
encuentra disponible en los servidores CRAN (Comprehensive R Archive Network). Para
instalar un paquete nuevo se puede hacer de manera manual o usando código. En este
último caso se usa: install.package(‘nombre del paquete’). Para usar un paquete en una
sesión de R se le debe activar. Esto se puede realizar dando click en las cajas de la ventana
de Package o usando el comando library(nombre del paquete). Si se desea usar una
función específica de un paquete y no se desea cargar el paquete completo se puede usar
package::function(…), con el nombre del paquete entre paréntesis.

Algunos paquetes también contienen bases de datos o datasets. Por ejemplo, el paquete
datasets incluye una base extensa de datos de ejemplo. Otro paquete con bases de
ejemplo es woolridge, basado en el conocido libro de econometría. Una base específica
del paquete se puede cargar con el comando data, en este caso cargamos la base affairs:
data(affairs, package=”woolridge”).

Esta base aparece como un ítem nuevo en la opción Environment. Si se da click aparece
una nueva pestaña en el editor de scripts con la base de datos en un formato fácil de
observar:

Una lista corta de paquetes populares usados son:


- censReg: modelos con datos censurados
- dummies: genera dummies automáticamente en los datos
- dynlm: regresiones con modelos lineales dinámicos para series de tiempo
- effects: presentación gráfica de efectos parciales
- ggplot2: generador de gráficos avanzados
- knitr: permite combinar R y Latex en un solo documento
- lmtest: permite testear modelos lineales
- maps: permite realizar mapas geográficos
- mfx: efectos marginales, odds ratios y ratios de tasa de incidencias.
- plm: modelos lineales para paneles de datos
- quantreg: regresiones cuantílicas
- rio: herramientas para importar y exportar bases de datos
- rmarkdown: permite convertir documentos Markdown en HTML, MS Word o
PDF.
- sampleSelection: modelos con selección muestral
- sandwich: permite estimaciones robustas de matrices de varianza covarianza
- survival: modelos de supervivencia y de datos censurados
- truncreg: modelos con datos truncados
- tseries: análisis de series de tiempo y series financieras
- urca: pruebas de raíz unitaria y cointegración en series de tiempo
- vars: modelos de vectores autoregresivos y modelos de corrección de errores.
- WDI: base de datos de World Bank’s World Development Indicators.
- wooldridge: base de datos del libro de Wooldridge (2019).

Hay distintas maneras de interactuar con archivos de R, se puede cargar, guardar,


importar o exportar. También se pueden generar figuras que pueden estar en distintos
formatos. Luego de darle un nombre a un script, se puede usar su dirección en la
computadora para manipular el archivo. En computadoras con Windows la dirección de
un archivo usa / mientras que en Mac se usa /. En R se debe usar esta última opción por lo
que una dirección en Windows sería:

C:/Users/MyUserName/Documents/MyRProject/MyScript.R

Mientras que en Mac se vería:


/MyRProject/MyScript.R

Con el comando getwd() se puede obtener el directorio de trabajo actual de la sesión


mientras que con el comando setwd() se puede establecer el directorio de trabajo.

Lo primero que va a ocurrir luego de iniciarse en el uso de R son errores de todo tipo.
Estos errores usualmente dan información sobre la fuente del error. Una lista de errores
frecuentes es:

- Error: object ‘x’ not found


Se intenta usar un objeto x pero este no está definido todavía
- Error in rio:: import(“xyz.dta”); No such file
R no pudo abrir el archive, puede que la dirección esté mal definida
- Error: could not find function “srot”
Se usó la expression srot(…) por lo que R asume que se intentó usar una
función pero no conoce una función con ese nombre. Puede ser un error de
escritura en el comando o que el paquete que contiene la función no ha sido
cargado todavía
- […] there is no package called ‘roi’
Se escribió mal el nombre del paquete o no se ha cargado todavía
- Error: ‘\U\ used without hex digits in character string starting
Esto ocurre cuando se usa el símbolo errado, debería ser / en vez de \. Por
ejemplo se intentó cargar algo como “C:\Users\...”.
- Cuando el error no es muy autoexplicativo se debe hacer uso del internet para
averiguar la fuente del error.

Objetos en R
R puede trabajar con números, vectores, matrices, texto, gráficos, funciones y muchos
otros formatos de objetos. Las operaciones básicas de matemáticas (+, -, *, /) funcionan
de manera esperada. El símbolo ^ sirve para indicar el exponente, por ejemplo 3^2 es el
cuadrado de 3. Otras operaciones son:
- abs(x): para el valor absoluto de x
- sqrt(x): para la raíz cuadrada de x
- exp(x): para el exponencial de x
- log(x): para el logaritmo natural de x
- log(x,b): para el logaritmo en base b de x
- round(v,s): para redondear x en base a s dígitos
- factorial(n): para el factorial n!

- choose(n,k): para el coeficiente binomial ()


n
k

También hay caractéres especiales como “.” O “_”. También considere que R es sensible a
mayúsculas por lo que x es distinto de X. El contenido de un objeto es asignado usando <-.
Por ejemplo, x<- 5 indica que x tomará el valor 5 en adelante.

La lista completa de objetos asignados puede verse usando el comando ls(), también se
muestra en el espacio de Environment. Para remover un objeto previamente definido se
puede usar rm(x), en caso de querer eliminar todo se usar rm(list=ls()).

Vectores

Para realizar cálculos estadísticos se necesita manipular muchos datos, una forma simple
de hacerlo es usando vectores. Se pueden agrupar distintos valores usando
También hay funciones específicar para manipular vectores:
- length(v): para ver el número de elementos en v
- max(v), min(v): valor máximo y mínimo en v
- sort(v): ordenar los elementos de v
- sum(v), prod(v): suma y producto de elementos de v
- numeric(n): crea un vector con n ceros
- rep(z,n): vector con n elementos iguales a z
- seq(t): secuencia de 1 a t: {1,2,…,t}, alternativamente 1:t
- seq(f,t): secuencia de f a t: {f,f+1,…,t} alternativamente f:t
- seq(f,t,s): secuencia de f a t en etapas de s: {f,f+s,…t}

También es útil tener en cuenta algunos operadores lógicos:

- x==y: x es igual a y
- x<y: x es menor a y
- x<=y: x es menor o igual a y
- x>y: x es mayor a y
- x>=y: x es mayor o igual a y
- x!=y: x no es igual a y
- !b: no b (es decir, b es falso)
- a|b: a o b es verdadero (o ambos)
- a&b: tanto a y b es verdadero

Los contenidos de los vectores no necesitan ser numéricos, también pueden contener
otros caractéres entre comillas.

Otro tipo son los vectores lógicos. Cada elemento puede tomar solo dos valores TRUE o
FALSE. Internamente FALSE es igual a 0 y TRUE es igual a 1. Cuando se tienen variables
cualitativas, las categorías de las variables se trabajan en forma numérica. Por ejemplo en
una escala se puede tomar muy bien=4, bien=3, mal=2 y muy mal =1 (o al revés). En este
ejemplo considermos que se tiene una encuesta en donde 1(=’bad’), 2 (=’ok’) y 3 (=’mal’).
Se almacenan las respuestas de los encuestados usando los valores numéricos, cada uno
de estos puede ser visto como un factor. Se puede asignar una categoría a cada uno de los
factores. Dado un vector de valores x se puede generar un nuevo vector de factores xf
usando el comando factor(). En este caso se usa como primer argumento el vector
numérico y luego las etiquetas a usar en orden numérico.

También es posible asignar títulos a los elementos de un vector. Con el comando names()
los títulos se asignan de acuerdo al orden indicado en los elementos del vector.
Las matrices también son herramientas importantes. Hay tres formas de definir una matriz
desde cero:
- matrix(vec,nrow=m): toma los números guardados en el vector vec y lo asigna
a la matriz con m filas
- rbind(r1,r2,…): toma los vectores r1, r2, … como filas de la matriz (deben tener
el mismo tamaño)
- cbind(c1,c2,…): toma los vectores c1, c2, … como columnas de la matriz (debe
tener el mismo tamaño)

También las filas y columnas de una matriz pueden tener nombres por lo que se pueden
nombrar usando rownames o colnames. También se pueden crear matrices especiales
como:
- diag(vec): crea una matriz diagonal con los elementos del vector vec
- diag(n): crea una matriz identidad de nxn (cuando n es un escalar)
Si en vez de un vector o escalar, una matriz M tiene como argumento la función diag
entonces regresará la diagonal principal de M.

La algebra básica de matrices incluye:


- Adición de matrices con + en tanto sea posible
- El operador * no realiza multiplicación de matrices, en cambio multiplicación
de los elementos
- La multiplicación matricial se realiza con el operador %*% en tanto sea posible
- Transponer matriz con t(x)
- Inversa de matriz con solve(x)

En R, una lista en una colección genérica de objetos. A diferencia de un vector, los


componentes pueden tener distintos formatos. Adicionalmente, cada elemento puede ser
nombrado. En base a esto se puede traer cualquier elemento con la forma mylist$name.
Usualmente, algunos paquetes estadísticos organizan los resultados de las estimaciones
en forma de lista de manera que los elementos de interés puedan ser extraídos de manera
ordenada.
Data frames y data files

Un data set (o data frame en la terminología de R) es una colección de variables de una


misma unidad de observación (por ejemplo, hogares, empresas, países). Un data file es un
archivo que puede incluir distintos tipos de data frames así como otros objetos.

Un data frame es un objeto que recolecta variables que pueden ser pensadas de manera
rectangular (como en excel), con las filas representando a las unidades de observación y a
las columnas como las variables o medidas de cada unidad. A diferencia de una matriz, un
data frame puede contener distintos tipos de formatos de información mientras que la
matriz solo puede almacenar números. Se puede definir un data frame desde cero usando
los comando data.frame o as.data.frame que transforma inputs de distintos tipos (como
matrices) en data frames.

En el ejemplo se crea un data frame de una matriz y aparentemente se ven iguales, pero si
observamos los objetos almacenados se pueden ver las diferencias.
Se puede obtener una sola variable de un data frame usando df como en df[,”var”] o
df$var. Esto puede ser usado para extraer valores y también para crear nuevas variables.
A veces es útil no tener que escribir el nombre del data frame múltiples veces dentro de
un comando. La función with(df, alguna exprexión que use vars de df) puede ayudar.
También se pueden usar el comando attach y detach.

Para obtener sub muestras de datos se usa el comando subset(df,criterio), en donde


criterio es una expresión lógica que se evalúa como TRUE o FALSE.

R también tiene un tipo propio de formato para los datos. La extensión usual es .Rdata.
Puede contener uno o más objetos de cualqueir tipo. Se puede guardar en este formato
con el comando save y se puede cargar luego con load. También se puede guardar todos
los objetos en la sesión con save(list=ls(),file=”mydata.RData”). Recuerde que puede
agregar la extensión de la dirección o usar la carpeta de trabajo.

Luego de cargar un data set como un data frame en R es útil poder acceder a información
básica de las variables:
- head(df): muestra algunas primeras filas del data frame
- str(df): muestra la estructura, nombre de variables, tipos de variables y las
primeras filas.
- colMeans(df) reporta los promedios de todas las variables mientras que
summary(df) muestra los estadísticos descriptivos.

También se pueden cargar otros formatos de datos, por ejemplo en csv o txt. Con el
comando read.table se pueden cargar distintos formatos para ser almacenados como data
frames. La línea de texto usual es:

newdataframe <- read.table(filename,…)

Los argumentos usuales son:


- header=TRUE: El archivo de texto incluye los nombres de las variables en la
primera fila
- sep=”,”: indica el tipo de separador de datos. Si se está separado por coma
entonces se usa “,”, en otros casos se usa el separador específico.
- dec=”,”: En vez de usar punto decimas se usa coma decimal.
- row.names=number: los valores de la columna llamada number son usados
como nombres de las filas.
También se puede exportar datos a formato de texto usando write.table. Por ejemplo:

write.table(mydata, file=”myfilename”,…)

El paquete rio permite cargar datos en distintos formatos, para ello encuentra usa una
sintaxis bastante simple:

rio:: import(“myfilename”)
rio:: export(“myfilename”)

En donde se debe usar el tipo de extensión específica del archivo dentro del nombre. Por
ejemplo, en el siguiente ejemplo se carga un archivo dta y se manipula usando las
opciones del paquete rio.
Gráficos básicos

En esta parte veremos formas básicas de realizar gráficos en R usando ggplot2. Un gráfico
de dos ejes se define a partir de los valores de un eje X y otro eje Y. Un ejemplo obvio es
un function plot en donde se define una función del tipo y=f ( x ) y se gráfica con respecto
a los valores de x . Esto puede ser generado usando el comando:

curve(function(x), xmin, xmax)

En donde function(x) es la función a ser graficada mientras que xmin y xmax definen el
rango de valores del gráfico.

curve(x^2,-2,2) curve(dnorm(x),-3,3)

Otro gráfico de fácil acceso es un scatter plot. Si se tiene datos sobre dos variables, por
ejemplo, x y y entonces se puede usar el comando plot(x,y) para realizar el gráfico:
Las opción más simple es type. Esto define el tipo de gráfico, por default se usa “p”, pero
también hay “l”, “b”, “o”, “s”, “h” y más. Evalúe las diferencias entre los gráficos. También
se pueden hacer más ajustes con:

- La opción pch cambia el tipo de símbolo usado como punto. Puede tomar un
caractér específico o puede usar valores predefinidos

- La línea puede cambiar usando la opción lty.

- El tamaño del punto y del texto puede cambiar usando la opción cex, por
ejemplo cex=1
- El ancho de las líneas puede cambiarse con lwd, igual lwd=1
- El color de las líneas y símbolos puede cambiarse usando col=value. Este puede
ser especificado en distintas maneras.
o Por nombre: la lista completa de colores se obtiene con colors() e
incluye colores obvios como black, blue, etc así como otros menos
usuales.
o Por escala de grises: con gray(level) con level=0 indica negro mientras
que level=1 indica blanco.
- El título principal así como el subtítulo se puede agregar con main=”My title” y
con sub=”My subtitle”.
- Los ejes horizontales y verticales pueden seleccionarse con xlim=c(min,max) y
con ylim=c(min,max)
- Las etiquetas de ejes pueden fijarse como paraleleas a los ejes (las=0),
horizontal (las=1), perpendicular al eje (las=2) o vertical (las=3).
- Hay muchas otros funciones que se pueden usar.

También es posible sobreponer distintos gráficos usando la opción add=TRUE luego del
primer gráfico. Veamos:

También se pueden agregar elementos adicionales al gráfico como:


- points(x,y,…) o lines(x,y,…), agrega gráficos de puntos y líneas, como si se usara
la opción add=TRUE
- text(x,y,”mytext”,…) agrega texto a las coordenadas definidas. La opción
pos=number posiciona el texto debajo, a la ziquierda, arriba o a la derecha de
acuerdo al número que se use, 1,2,3 y 4.
- abline(a=value,b=value,…) agrega una linea con intercepto a y pendiente b
- abline(h=value(s),…) agrega una o más lineas horizontals a la posición h (que
puede ser un vector)
- absline(v=value(s),…) agrega una o más lineas verticales a la posición v (que
puede ser un vector).
- Arrows(x0,y0,x1,xy1,…) agrega flechas en cada par de puntos.
Por ejemplo:

También se puede usar la opción matplot.


El comando para leyenda es legend(position, labels, formats, …) en donde:
- position: define el lugar. Puede ser un par de coordenadas x,y pero también
puede definirse usando palabras claves como “bottomright”, “bottom”,
“bottomleft”, “left”, “topleft”, “top”, “topright”, “right”, o “center”.
- labels es un vector de cadenar que funciona como etiquetas en la leyenda. Se
especifica como c(“first label”, “second label”, …)
- format reproduce el estilo usado en el gráfico o se puede definir las opciones
con pch, lty, etc.
También se puede agregar expresiones más complicadas usando expression(). Por
ejemplo:

Para exportar los gráficos:


1) Primero se define el tipo de archivo gráfico
- Para un archivo PNG, se usa:
png(filename=”myfilename.png”, width=value,height=value,…)
Considere que tanto width como height están definidos en términos de pixeles,
por default en 480. Lo mismo funciona para formatos BMP, JPEG, TIFF.
- Para un archivo PDF se usa:
pdf(file=”myfilename.pdf”, width=value, height=value,…)
La diferencia es que el nombre del archive está especificado en file mientras
que width y height están medidos en pulgadas, por default 7.
2) Se crea el gráfico usando los comandos específicos que se deseen. Se puede usar la
opción par para definir parámetros del gráfico. Aquí se agregan todas las líneas de
códigos necesarias.
3) Se indica que el gráfico se termino usando dev.off().

También podría gustarte