Práctica Dirigida 1

FACULTAD DE CIENCIAS SOCIALES - PUCP

Curso: POL 278 - Estadística para el análisis político 1 | Semestre 2025 - 1


Introducción a R

1. ¿Qué es R?

R es un lenguaje de programación y un entorno de software libre y de código abierto utilizado para análisis estadístico y visualización de datos. Fue desarrollado por Ross Ihaka y Robert Gentleman en la Universidad de Auckland, Nueva Zelanda, en 1993. Desde entonces, ha sido ampliamente adoptado por la comunidad científica y empresarial como una herramienta esencial para el análisis y la visualización de datos.

R cuenta con una amplia variedad de paquetes y bibliotecas que permiten el análisis estadístico, la minería de datos, el aprendizaje automático, la visualización de datos y la generación de informes. Además, su sintaxis es relativamente sencilla, lo que facilita su aprendizaje y uso para personas con distintos niveles de experiencia en programación, lo cual ha significado su uso en diversos rubros.


2. ¿Qué podemos hacer con R?


3. Conceptos básicos para programar en R

Instalar R

Instalar RStudio

Usando R

3.1. Configurar el directorio de trabajo

R funciona como un entorno temporal de trabajo, lo que quiere decir que el usuario va agregando datos y objetos. Sin embargo, si los análisis no son guardados se deberán repetir las instrucciones para obtener otra vez el resultado. Por esta razón, es preciso configurar una carpeta predeterminada en nuestro ordenador, donde el programa buscará los archivos a ejecutar y guardará los archivos a conservar con cambios.

Para ver nuestro lugar de trabajo actual escribimos el siguiente comando (escriba el código en la consola, ya que si lo ejecuta desde este Rmd, obtendrá el lugar donde se encuentra este archivo):

getwd() #para saber en qué carpeta está el archivo
## [1] "/Volumes/Macintosh HD - Datos/12 PUCP-Docencia/2025/Estadística 1/Estadistica1CienciaPolitica"
library(vembedr)

Si queremos cambiar de directorio de trabajo, nos dirigirnos al menú “Session” > “Set Working Directory” > “Choose Directory”. Esto abrirá una ventana emergente, donde buscaremos la carpeta en la cual vamos a trabajar, la ubicamos y seleccionamos “Open”. Para verificar el cambio volvemos a digitar la función “getwd()” en la consola.

3.2. Sintaxis y objetos en R

El uso de R es bastante intuitivo y sigue un patrón lógico. Está compuesto de códigos y la combinación de estos códigos genera una sintaxis. Asimismo, R guarda la información de nuestras observaciones y variables a través de objetos.

En un sentido global, la estructura general de una sintaxis puede resumirse como sigue: a un objeto dado se le asigna el resultado de una función, que a su vez se ejecuta sobre un conjunto de datos especificado, con una serie de configuraciones particulares. Veamos el siguiente ejemplo ficticio.

Si se lee de izquierda a derecha, la línea de comando puede explicarse como sigue:

  • Primero se indica un objeto a crear, con el nombre que ustedes definan.

  • Luego se indica el asignador, que expresa que todo lo que esté a la derecha de la flecha se guardará en el objeto creado a la izquierda. El asignador puede ser “<-” o también “=”, para motivos del curso usaremos este último.

  • Luego viene la función que en este caso permite leer archivos tipo Microsoft Excel. R trabaja con funciones que están dentro de “paquetes” que la comunidad va desarrollando. Podemos hacer nuestras operaciones con diversas funciones, y no hay una sola forma de hacerlo. Si se trata de funciones que no están predeterminadas en R, debemos instalar el paquete que las contiene con el comando “install.packages()”, y antes de ejecutarla debemos abrir la libreria con el comando “library()”

  • Luego de la función, se abre un paréntesis que contiene los argumentos: instrucciones que especifican ciertos detalles de lo que queramos que la función realice. Los argumentos pueden escribirse de distintas maneras y va a depender de lo que queramos hacer. En nuestro ejemplo: El primer argumento indica la información a leer, en este caso indica un archivo de tipo Excel (extensión xlsx). El segundo argumento indica la hoja del archivo a leer. El tercer argumento indica qué columnas se leerán de forma específica (en este caso, las primeras diez).

Hagamos un ejemplo:

Vamos a abrir un archivo en R, utilizando la función “import” del paquete “rio”, el cual es un paquete versátil que nos permite importar datos de diversas extensiones (dta, sav, csv, xls, etc.)

Antes que todo, debemos instalar el paquete escribiendo en la consola: install.packages("rio")

library(rio) #Convocamos el paquete   
data=import("Democracy2024.xlsx") #Utilizamos la función import (importar) que creará un objeto  que contenga la base de datos del archivo "DemocracyIndex2022.xlsx" la cual hemos descargado. 

#Podemos verificar la creación del objeto en el environment (ventana derecha superior)

class(data) #si quieren saber que clase de objeto es el que has creado, utilizamos la función "class" y entre paréntesis colocamos el nombre del objeto. Verán que se trata de un "data frame", es el tipo de objeto en R para las bases de datos.
## [1] "data.frame"
¿Qué otro tipo de objetos existen? 🤔

3.3. Tipos de objetos en R

Una parte clave para iniciar el manejo del programa es identificar los diversos objetos que podemos crear, manipular y utilizar. Para la definición de objetos en R será necesario previamente tener claridad teórica sobre lo que es una variable categórica nominal, categórica ordinal, numérica discreta y numérica continua.

Para los fines de este curso se contemplarán las siguientes objetos:

Tipo Descripción
Vector numérico Vector conformado por la concatenación de números, puede representar variables numéricas continuas o discretas. Ej: 1.5 , 2.7 , 3.1
Vector de factores

Vector que sirve para representar variables categóricas.

Pudiendo ser factores nominales u ordinales. Ej: “costa”, “sierra”, “selva”

Data frames

Son hojas de datos, estructuras similares a una matriz; sin embargo, a diferencia de estas pueden almacenar objetos de distintos tipo.

Generalmente nuestras bases de datos son de este tipo (como una hoja de Excel que tiene variables numéricas, categóricas, etc).

Los vectores numéricos se crean a través de la función concatenar c(). Vamos a crear un vector que contenga los montos en millones de soles del presupuesto del Estado asignado a las 5 prioridades para el 2021

Presupuesto_millones=c(9879, 33132, 20991, 690, 5392) #creamos el vector (verifiquemos en el environment)
Presupuesto_millones #invocamos el vector para visualizar su contenido
## [1]  9879 33132 20991   690  5392

Un factor nos permite representar una variable categórica. Se crean a través de la función “factor()”, pero antes se crea como vector pues almacena las categorías en la forma de un vector con números discretos integrales (1,2,3,4,etc.), que son códigos de los valores de la variable y otro vector de caracteres interno que contiene las etiquetas de esos códigos. Creemos un factor con los nombres de las prioridades del presupuesto para el 2021:

Prioridad = c(1,2,3,4,5) #primero creamos un vector
Prioridad = factor(Prioridad, levels = c(1:5), labels = c("reactivación", "educación","salud","mujer","pobreza")) #Lo convertimos en factor. Ojo con los argumentos.
Prioridad #visualizamos su contenido
## [1] reactivación educación    salud        mujer        pobreza     
## Levels: reactivación educación salud mujer pobreza

También podemos crear un factor ordenado para almacenar información de una variable categórica ordinal. Es casi la misma ruta, solo que añadiremos una función más para convertir el factor en ordinal. Creemos un factor ordinal ficticio que contenga el nivel de ejecución que el Estado ha mostrado en las categorías presupuestales correspondientes a las prioridades, donde 1=Mala, 2=Intermedia y 3= Buena.

Ejecucion=c(3,2,2,1,2) #creamos un vector numérico que registra los datos
Ejecucion=factor(Ejecucion) #Lo convertimos en factor
levels(Ejecucion)=c("Mala","Intermedia","Buena") #asignamos los niveles al factor
Ejecucion=ordered(Ejecucion) #indicamos que se trata de un factor ordinal (ordered)
Ejecucion #Visualizamos
## [1] Buena      Intermedia Intermedia Mala       Intermedia
## Levels: Mala < Intermedia < Buena

Finalmente, los data frames nos permite almacenar un conjunto de datos, es decir una base de datos (bd) que tiene filas y columnas. Creemos la base de datos “PP2024” que contenga todos los objetos que hemos creado:

PP2024 = data.frame(Prioridad,Presupuesto_millones,Ejecucion)
PP2024 # Visualice la base de datos
##      Prioridad Presupuesto_millones  Ejecucion
## 1 reactivación                 9879      Buena
## 2    educación                33132 Intermedia
## 3        salud                20991 Intermedia
## 4        mujer                  690       Mala
## 5      pobreza                 5392 Intermedia
str(PP2024) # Visualice la estructura de la BD
## 'data.frame':    5 obs. of  3 variables:
##  $ Prioridad           : Factor w/ 5 levels "reactivación",..: 1 2 3 4 5
##  $ Presupuesto_millones: num  9879 33132 20991 690 5392
##  $ Ejecucion           : Ord.factor w/ 3 levels "Mala"<"Intermedia"<..: 3 2 2 1 2
names(PP2024) #Visualice los nombres de las variables de la BD
## [1] "Prioridad"            "Presupuesto_millones" "Ejecucion"

Cuando queramos invocar una variable específica de una base de datos utilizaremos $, entre la base de datos y la variable que queremos invocar.

PP2024$Prioridad #invocamos la variable prioridad de la base de datos
## [1] reactivación educación    salud        mujer        pobreza     
## Levels: reactivación educación salud mujer pobreza
class(PP2024$Ejecucion) #vemos de que clase es la variable ejecución de la data frame
## [1] "ordered" "factor"

4. Análisis descriptivo en R

¿Cuál es el estado de la democracia en el mundo?

El índice de democracia (Democracy Index) es un índice que mide la calidad de la democracia en el mundo. Mide diversas categorías como libertades civiles, cultura política, pluralismo electoral, etc. A partir de estas variables, se obtiene un puntaje promedio, el cual determina el puesto del país a nivel mundial, así como el tipo de régimen que tiene cada uno.

En esta ocasión, usaremos la base de datos del informe de 2022, publicado por The Economist Inteligence Unit (EIU). El link es el que se muestra a continuación: https://www.eiu.com/n/campaigns/democracy-index-2022/

Ahora, toca responder la pregunta de investigación: ¿Cuál es el estado de la democracia en el mundo?

¡Manos a la obra!

Importemos nuestra base de datos.

library(rio)    
data=import("Democracy2024.xlsx") 

Es necesario saber el tipo de variable que vamos a trabajar. Por ello, exploramos las variables que tiene nuestra base de datos:

names(data)
## [1] "Pais"    "Region"  "Puntaje" "Regimen"
str(data)
## 'data.frame':    167 obs. of  4 variables:
##  $ Pais   : chr  "Noruega" "Nueva Zelanda" "Suecia" "Islandia" ...
##  $ Region : chr  "Europa" "Oceania" "Europa" "Europa" ...
##  $ Puntaje: num  9.81 9.61 9.39 9.38 9.32 9.3 9.28 9.19 9 8.88 ...
##  $ Regimen: chr  "Democracia plena" "Democracia plena" "Democracia plena" "Democracia plena" ...

El contenido de cada variable lo podemos observar en el siguiente diccionario de datos:

4.1. ¿Cuál es la distribución de países por régimen?

Siempre antes de comenzar a realizar nuestro análisis, debemos identificar la estructura de las variables y verificar que estén bien configuradas. Es decir que la escala de la variable coincida con el objeto en R.

Por ejemplo, debemos asegurarnos que una variable categórica no esté configurada como numérica en R, y viceversa.

Variable “Regimen”:

Queremos saber el tipo de régimen de cada país observado. Para ello, realizamos el análisis de la variable en cuestión Regimen

class(data$Regimen) 
## [1] "character"
library(tidyverse)
data %>%
 group_by(Regimen) %>%
  summarize(Freq=n())
## # A tibble: 4 × 2
##   Regimen                Freq
##   <chr>                 <int>
## 1 Democracia imperfecta    46
## 2 Democracia plena         25
## 3 Regimen autoritario      60
## 4 Regimen hibrido          36

Se observa que, de los países analizados en el índice de la democracia, 60 países son coniderados como Autoritarismo, 36 como Regímenes híbridos, 46 como Democracia imperfecta y solo 25 como Democracia Plena.

Creemos un gráfico de barras para visualizar mejor los países por tipo de régimen.

para_graficoReg=data %>%
 group_by(Regimen) %>%
  summarize(Freq=n())#tabla de frecuencias

library(ggplot2)
ggplot(para_graficoReg, aes(x=Regimen, y=Freq, fill=Regimen)) + 
geom_bar(stat = "identity")

Ahora, adaptemos el diseño del gráfico

library(ggplot2)
ggplot(para_graficoReg, aes(reorder(x=Regimen,-Freq), y=Freq, fill=Regimen)) + 
geom_bar(stat = "identity")+
  
  ggtitle("Distribución de países por tipo de régimen") +
  xlab("Tipo de régimen") + ylab("Frecuencia")+
  geom_text(aes(label=round(Freq,1)), vjust=1.30, color="black", size=3)+
  scale_fill_brewer(name="Tipo de Régimen",palette="Pastel1")+
  theme(panel.background=element_rect(fill = "white", colour = "white"))

Las demás variables son numéricas y están configuradas como vectores numéricos de números enteros (integer), por lo cual lo dejamos así 😸.

4.2 ¿Cuál es la distribución de países por puntaje?

Entonces, una vez configurados adecuadamente nuestros objetos, pidamos los estadísticos de tendencia central para nuestras variables de interés.

Antes instalamos los paquetes que utilizaremos

  • install.packages("DescTools") para pedir los estadísticos de tendencia central
¿Cuál es el promedio del puntaje de todos los países analizados?

Para ello, usamos el comando mean que significa “media o promedio”.

library(DescTools)
library(tidyverse)

data %>% summarise(media = mean(Puntaje)) #este comando nos permitirá calcular la media. Consejo: leer este comando de derecha a izquierda
##      media
## 1 5.174551

Este resultado quiere decir que el puntaje promedio de todos los países analizados es de 5.17 puntos.

En segundo lugar, calculamos la mediana de los puntajes. Esta medida es más robusta que la media, pues resiste valores extremos.

library(DescTools)
data %>% summarise(mediana = median(Puntaje)) #calcular la mediana. Al igual que con la media, se sugiere leer el comando de derecha a izquierda.
##   mediana
## 1    5.32

Esto quiere decir que, hasta la mitad de países analizados tienen una puntuación de hasta 5.32 puntos.

Grafiquemos 🎨

Como la variable Puntaje es numérica, esta vez pediremos un histograma.

names(data)
## [1] "Pais"    "Region"  "Puntaje" "Regimen"
library(ggplot2) #no olvidar llamar al paquete
data %>%
ggplot(aes(x=Puntaje)) + 
geom_histogram() 
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Si lo queremos personalizar :)

data %>%
  ggplot(aes(x = Puntaje)) + 
  geom_histogram(color = "blue", fill = "#90EE90", bins = 30) +
  geom_text(stat = 'bin', aes(y = stat(count), label = stat(count)), vjust = -0.5, size = 3, color = "black") +
  ggtitle("Puntaje promedio por país") +
  
  scale_y_continuous(breaks = seq(0, 12, by = 2), labels = seq(0, 12, by = 2)) +
  expand_limits(y = 12) +
  geom_vline(xintercept =  mean(data$Puntaje, na.rm = TRUE), color = "red", linetype = "dashed", size = 1) + # Línea de la media
  geom_vline(xintercept = median(data$Puntaje, na.rm = TRUE), color = "blue", linetype = "dashed", size = 1) + # Línea de la mediana
  theme_minimal()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

El histograma muestra una distribución asimétrica sesgada con ligero sesgo negativo o a la izquierda. Esto quiere decir que existe una concentración de datos hacia la derecha.

También podemos dividir las medias por grupo. Para ello, usamos el comando “group_by”.

data%>%
  group_by(Region)%>%
  summarise(media=mean(Puntaje))
## # A tibble: 5 × 2
##   Region  media
##   <chr>   <dbl>
## 1 Africa   3.92
## 2 America  5.91
## 3 Asia     4.17
## 4 Europa   7.3 
## 5 Oceania  7.46

Podemos realizar la misma operación con la mediana

data%>%
  group_by(Region)%>%
  summarise(mediana=median(Puntaje))
## # A tibble: 5 × 2
##   Region  mediana
##   <chr>     <dbl>
## 1 Africa     3.38
## 2 America    6.42
## 3 Asia       3.48
## 4 Europa     7.74
## 5 Oceania    7.41

Y también podemos resumir todo en una misma tabla. Este tipo de tabla se llama Tabla resumen

data%>%
  group_by(Region)%>%
  summarise(media=mean(Puntaje), mediana=median(Puntaje))
## # A tibble: 5 × 3
##   Region  media mediana
##   <chr>   <dbl>   <dbl>
## 1 Africa   3.92    3.38
## 2 America  5.91    6.42
## 3 Asia     4.17    3.48
## 4 Europa   7.3     7.74
## 5 Oceania  7.46    7.41

Ejercicio: A partir de la variable “Tipo de régimen” (Regimen), elabora una tabla resumen con la media y la mediana de puntaje del índice de la democracia. Acompaña la tabla con un breve párrafo describiendo los resultados.





Go to page beginning