Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sesión 1: Introducción a R
José Mendoza
Comencemos!
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.
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.
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.
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”.
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).
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:
C:/Users/MyUserName/Documents/MyRProject/MyScript.R
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:
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!
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}
- 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.
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.
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:
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:
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
- 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: