Introducción a R

Curso Análisis Cualitativo Comparado

Diego Solís Delgadillo

diego.solis@flacso.edu.mx

¿Por qué usar R en QCA?

  • Es software libre.
  • Permite documentar cada paso del análisis.
  • Facilita la reproducción de resultados.
  • Integra análisis, tablas y gráficos.

Tip

R no sustituye el razonamiento teórico.

Nos ayuda a ejecutar de forma transparente las decisiones analíticas.

R y RStudio

R es el lenguaje que realiza los cálculos.

RStudio es una interfaz que facilita el trabajo con R.

Note

Durante el curso trabajaremos principalmente con scripts.

Esto permite guardar y repetir todos los comandos.

Las cuatro áreas de RStudio

  1. Editor o script: donde escribimos y guardamos el código.
  2. Consola: donde R ejecuta las instrucciones.
  3. Environment: muestra los objetos creados.
  4. Files, Plots, Packages y Help: archivos, gráficos, paquetes y ayuda.

Warning

El código escrito únicamente en la consola no queda guardado en el script.

El script

En R, las líneas que comienzan con # son comentarios.

# SESIÓN I
# Introducción a R

# Este texto no será ejecutado por R
5 + 5

Los comentarios ayudan a organizar y documentar el análisis.

Ejecutar código

Podemos ejecutar una línea o una selección con:

Ctrl + Enter

En Mac:

Cmd + Enter

R como calculadora

5 + 5
[1] 10
9 - 7
[1] 2
8 * 9
[1] 72

Operadores aritméticos

Operación Símbolo Ejemplo
Suma + 5 + 5
Resta - 9 - 7
Multiplicación * 8 * 9
División / 20 / 4
Potencia ^ 5^2

Crear objetos

Un objeto permite guardar un resultado para reutilizarlo.

suma1 <- 5 + 5
suma1
[1] 10

Tip

En R, el operador de asignación más utilizado es <-.

Nombrar objetos

Conviene utilizar nombres:

  • breves;
  • descriptivos;
  • sin espacios;
  • preferentemente en minúsculas.
numero_curules <- 500
partido_gobierno <- "Morena"

Reescribir objetos

Un objeto puede cambiar de contenido.

suma1 <- 5 + 5
suma1
[1] 10
suma1 <- 8 + 9
suma1
[1] 17

El segundo valor reemplaza al primero.

Reutilizar objetos

suma1 <- 8 + 9
suma1 * 2
[1] 34

Note

Los objetos permiten construir análisis complejos a partir de resultados previos.

Tipos básicos de información

Los objetos pueden contener distintos tipos de datos.

numero <- 25
texto <- "presidencial"
valor_logico <- TRUE

numero
[1] 25
texto
[1] "presidencial"
valor_logico
[1] TRUE

Vectores

Un vector contiene una serie de valores del mismo tipo.

vector1 <- c(9, 5, 3, 7)
vector1
[1] 9 5 3 7

La función c() significa combinar.

Seleccionar elementos de un vector

R identifica cada posición mediante corchetes.

vector1 <- c(9, 5, 3, 7)

vector1[4]
[1] 7
vector1[2:4]
[1] 5 3 7

Warning

En R, la primera posición es 1, no 0.

Vectores con texto

partido <- c(
  "Morena", "PAN", "PRI", "PVEM",
  "PT", "MC", "PRD"
)

partido
[1] "Morena" "PAN"    "PRI"    "PVEM"   "PT"     "MC"     "PRD"   

Cada elemento de texto debe escribirse entre comillas.

Construir una base de datos

partido <- c(
  "Morena", "PAN", "PRI", "PVEM",
  "PT", "MC", "PRD"
)

curules <- c(200, 114, 70, 40, 36, 25, 15)

df <- data.frame(partido, curules)
df
  partido curules
1  Morena     200
2     PAN     114
3     PRI      70
4    PVEM      40
5      PT      36
6      MC      25
7     PRD      15

¿Qué es un data frame?

Un data.frame organiza la información en filas y columnas.

  • Las filas suelen representar casos.
  • Las columnas suelen representar variables.

Tip

En QCA, cada fila representa normalmente un caso y cada columna una condición o un resultado.

Explorar una base

head(df)
  partido curules
1  Morena     200
2     PAN     114
3     PRI      70
4    PVEM      40
5      PT      36
6      MC      25
str(df)
'data.frame':   7 obs. of  2 variables:
 $ partido: chr  "Morena" "PAN" "PRI" "PVEM" ...
 $ curules: num  200 114 70 40 36 25 15
nrow(df)
[1] 7
ncol(df)
[1] 2
names(df)
[1] "partido" "curules"

Estas funciones permiten conocer rápidamente la estructura de los datos.

Funciones

Una función recibe información, realiza una operación y devuelve un resultado.

nombre_funcion(argumento)

Ejemplos:

sqrt(25)
[1] 5
log(100)
[1] 4.60517
log10(100)
[1] 2
5^2
[1] 25

Tendencia central y dispersión

mean(curules)
[1] 71.42857
median(curules)
[1] 40
sd(curules)
[1] 65.73649
  • mean() calcula la media.
  • median() calcula la mediana.
  • sd() calcula la desviación estándar.

Otras funciones útiles

sum(curules)
[1] 500
min(curules)
[1] 15
max(curules)
[1] 200
length(curules)
[1] 7
sort(curules)
[1]  15  25  36  40  70 114 200
sort(curules, decreasing = TRUE)
[1] 200 114  70  40  36  25  15

Argumentos de una función

Los argumentos modifican el comportamiento de una función.

sort(curules, decreasing = TRUE)
[1] 200 114  70  40  36  25  15

En este ejemplo:

  • curules es el objeto analizado;
  • decreasing = TRUE ordena de mayor a menor.

Valores perdidos

En R, los valores perdidos se representan con NA.

vector2 <- c(vector1, NA)
vector2
[1]  9  5  3  7 NA

NA significa Not Available.

¿Qué ocurre con los valores perdidos?

mean(vector2)
[1] NA

R devuelve NA porque no puede calcular la media sin una instrucción adicional.

Ignorar valores perdidos

mean(vector2, na.rm = TRUE)
[1] 6

El argumento na.rm = TRUE indica que los valores perdidos deben excluirse del cálculo.

Eliminar valores perdidos

na.omit(vector2)
[1] 9 5 3 7
attr(,"na.action")
[1] 5
attr(,"class")
[1] "omit"

Warning

Eliminar casos con información faltante puede modificar la muestra.

En un análisis real, esta decisión debe justificarse.

Paquetes de R

Los paquetes amplían las funciones disponibles en R.

Para este curso utilizaremos principalmente:

  • QCA;
  • SetMethods;
  • tidyverse;
  • venn.

Instalar paquetes

La instalación se realiza una sola vez en cada computadora.

install.packages("QCA")
install.packages("SetMethods")
install.packages("tidyverse")
install.packages("venn")

Warning

No conviene incluir install.packages() dentro de un script que se ejecutará repetidamente.

Cargar paquetes

Los paquetes deben cargarse cada vez que iniciamos una nueva sesión.

library(QCA)
library(SetMethods)
library(tidyverse)
library(venn)

Instalar y cargar no son lo mismo

Instalar

install.packages("QCA")

Se realiza una sola vez.

Cargar

library(QCA)

Se realiza en cada sesión.

Citar paquetes

Los paquetes también deben citarse en trabajos académicos.

citation("QCA")
citation("SetMethods")

Tip

La reproducibilidad también implica reconocer el software utilizado.

De los datos a los conjuntos

Supongamos tres condiciones:

  • DES: desarrollo alto;
  • DEM: democracia;
  • STB: estabilidad política.
DES <- c("Chile", "Uruguay", "Costa Rica", "México")
DEM <- c("Chile", "Uruguay", "Costa Rica", "Argentina")
STB <- c("Chile", "Uruguay", "México", "Perú")

Guardar varios conjuntos

sets_qca <- list(
  DES = DES,
  DEM = DEM,
  STB = STB
)

sets_qca
$DES
[1] "Chile"      "Uruguay"    "Costa Rica" "México"    

$DEM
[1] "Chile"      "Uruguay"    "Costa Rica" "Argentina" 

$STB
[1] "Chile"   "Uruguay" "México"  "Perú"   

Una lista permite almacenar objetos de distinta longitud.

Primer diagrama de Venn

grid::grid.newpage()
venn(sets_qca)

Note

El diagrama permite identificar visualmente intersecciones y diferencias entre conjuntos.

Mejorar el diagrama

grid::grid.newpage()
venn(
  sets_qca,
  zcolor = "style",
  opacity = 0.35,
  box = FALSE,
  ilabels = TRUE
)

Intersección

La intersección contiene los casos que pertenecen simultáneamente a dos conjuntos.

intersect(DES, DEM)
[1] "Chile"      "Uruguay"    "Costa Rica"

En lenguaje QCA:

DES*DEM

Unión

La unión contiene los casos que pertenecen a uno u otro conjunto.

union(DES, DEM)
[1] "Chile"      "Uruguay"    "Costa Rica" "México"     "Argentina" 

En lenguaje QCA:

DES + DEM

Intersección de tres conjuntos

Reduce(intersect, list(DES, DEM, STB))
[1] "Chile"   "Uruguay"

En lenguaje QCA:

DES*DEM*STB

Diferencia entre conjuntos

setdiff(DES, DEM)
[1] "México"

El resultado identifica los casos que pertenecen a DES, pero no a DEM.

Ausencia de una condición

Para calcular una ausencia debemos definir el universo de casos.

universo <- c(
  "Chile", "Uruguay", "Costa Rica", "México",
  "Argentina", "Perú", "Bolivia"
)

no_DEM <- setdiff(universo, DEM)
no_DEM
[1] "México"  "Perú"    "Bolivia"

Una base tipo QCA

datos <- data.frame(
  caso = c(
    "Chile", "Uruguay", "Costa Rica", "México",
    "Argentina", "Perú", "Bolivia"
  ),
  DES = c(1, 1, 1, 1, 0, 0, 0),
  DEM = c(1, 1, 1, 0, 1, 0, 0),
  STB = c(1, 1, 0, 1, 0, 1, 0)
)

datos
        caso DES DEM STB
1      Chile   1   1   1
2    Uruguay   1   1   1
3 Costa Rica   1   1   0
4     México   1   0   1
5  Argentina   0   1   0
6       Perú   0   0   1
7    Bolivia   0   0   0

El operador $

El símbolo $ permite seleccionar una columna de una base.

datos$caso
[1] "Chile"      "Uruguay"    "Costa Rica" "México"     "Argentina" 
[6] "Perú"       "Bolivia"   
datos$DES
[1] 1 1 1 1 0 0 0

También podemos combinarlo con una condición lógica:

datos$caso[datos$DES == 1]
[1] "Chile"      "Uruguay"    "Costa Rica" "México"    

Operadores lógicos

Operador Significado
== igual a
!= distinto de
> mayor que
< menor que
>= mayor o igual que
<= menor o igual que
& y
| o

Agregar un resultado

datos$SURV <- c(1, 1, 1, 0, 0, 0, 0)
datos
        caso DES DEM STB SURV
1      Chile   1   1   1    1
2    Uruguay   1   1   1    1
3 Costa Rica   1   1   0    1
4     México   1   0   1    0
5  Argentina   0   1   0    0
6       Perú   0   0   1    0
7    Bolivia   0   0   0    0

Aquí, SURV representa supervivencia democrática.

El lenguaje de conjuntos en QCA

Expresión Operación Interpretación
X*Y Intersección X y Y
X+Y Unión X o Y
~X Complemento ausencia de X

Suficiencia y necesidad

Suficiencia

X ≤ Y

Los casos con la condición X están dentro del resultado Y.

Necesidad

Y ≤ X

Los casos con el resultado Y están dentro de la condición X.

Buenas prácticas

  • Guardar todos los comandos en un script.
  • Comentar las decisiones importantes.
  • Utilizar nombres claros para los objetos.
  • Evitar sobrescribir objetos accidentalmente.
  • Mantener una copia de los datos originales.
  • Registrar los paquetes utilizados.
  • Revisar los valores perdidos antes de analizar.

Cierre

R nos permite traducir el razonamiento conjuntista en operaciones reproducibles.

En las siguientes sesiones utilizaremos estas herramientas para:

  • calibrar conjuntos;
  • analizar condiciones necesarias y suficientes;
  • construir tablas de verdad;
  • realizar minimización lógica.