1 Creacion de objetos

Antes de la ejecución del código, es necesario cargar las librerías que se utilizarán a lo largo del análisis. Las librerías en R son conjuntos de funciones ya programadas que facilitan la manipulación de datos, la estimación de indicadores estadísticos y la visualización de resultados. En este documento trabajaremos con paquetes como dplyr y srvyr, que permiten transformar bases de datos y aplicar métodos de muestreo complejo; con rio, que facilita la importación de archivos en distintos formatos; y con readxl, que permite leer hojas de cálculo en formato Excel de manera sencilla. De esta manera, garantizamos que nuestro entorno de trabajo esté preparado para la construcción de indicadores y la generación de resultados confiables.

library(dplyr)
library(readxl)
library(srvyr)
library(rio)

1.1 Escalares

Es Un escalar es la representación más simple de un número real, es decir, un único valor numérico que no está acompañado de otros valores ni organizado en estructuras más complejas como vectores, matrices o listas. En R, un escalar se trata como un vector de longitud 1, ya que en R todos los datos numéricos son técnicamente vectores. Por ejemplo:

escalar1 <- 3
escalar1
## [1] 3
escalar1 <- 3
escalar2 <- 4

1.1.1 Operaciones

El motor de programación R puede funcionar como una calculadora, permitiendo realizar desde operaciones aritméticas básicas hasta cálculos más avanzados.

Para realizar distintas operaciones en R, basta con utilizar el nombre del objeto que contiene el valor de la variable, seguido del signo de la operación correspondiente, y luego el nombre del otro objeto con el que deseamos operar. De esta manera, R evalúa automáticamente la expresión y devuelve el resultado.

1.1.1.1 Suma / Resta

escalar1 <- 3
escalar2 <- 4

escalar3 <- escalar1 + escalar2
escalar3
## [1] 7
escalar1 <- 3
escalar2 <- 4

escalar3_1 <- escalar2 - escalar1
escalar3_1
## [1] 1

1.1.1.2 Multiplicación / División

escalar4 <- escalar3 * escalar2
escalar4
## [1] 28
escalar5 <- escalar4/escalar1
escalar5
## [1] 9.333333
table(escalar5)
## escalar5
## 9.33333333333333 
##                1

Summary

La función summary en R entrega un resumen descriptivo del objeto: para vectores numéricos muestra medidas estadísticas (mínimo, cuartiles, mediana, media y máximo), para factores el conteo de niveles, y en data frames genera un resumen por columna según su tipo (numérico o categórico).

summary(escalar5)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   9.333   9.333   9.333   9.333   9.333   9.333

Table

La función table en R se emplea para generar tablas de frecuencias. Permite contar cuántas veces aparece cada valor dentro de un vector o variable.

table(escalar5)
## escalar5
## 9.33333333333333 
##                1

1.2 Vectores

Los vectores son estructuras básicas de datos que permiten almacenar elementos del mismo tipo, como números, caracteres o valores lógicos. Son fundamentales para realizar operaciones y análisis, ya que muchas funciones trabajan directamente sobre vectores.

vect1 <- c(2,1.5,4) #vector numerico
vect2 <- c("Juan","Pedro","Sara")
vect3 <- c(5,6,2)

prd1 <- vect1 *escalar4

1.2.1 Ubicacion

Los elementos dentro de un vector pueden ser accedidos mediante índices. Los índices indican la posición del valor dentro del vector y se colocan entre corchetes []

vect1[2]
## [1] 1.5
vect2[3]
## [1] "Sara"
objeto1 <- vect3[1]

objeto2 <- vect2[2:3]

objeto3 <- vect2[1:2]

objeto4 <- vect2[c(1,3)]
objeto4_f2 <- vect2[-2]

1.2.2 Matrices

Las matrices en R son estructuras bidimensionales que almacenan datos del mismo tipo, organizados en filas y columnas. Se pueden crear a partir de vectores combinándolos como columnas con cbind() o como filas con rbind().

vector1 <- c(1,2,3)
vector2 <- c(4,5,6)
vector3 <- c(7,8,9)

matrizA <- cbind(vector1,vector2,vector3)
matrizA
##      vector1 vector2 vector3
## [1,]       1       4       7
## [2,]       2       5       8
## [3,]       3       6       9
matrizB <- rbind(vector1,vector2,vector3)
matrizB
##         [,1] [,2] [,3]
## vector1    1    2    3
## vector2    4    5    6
## vector3    7    8    9

2 Bases de Datos ( Data frame)

Una base de datos es un conjunto organizado de información o datos que se almacenan de manera estructurada para poder consultarlos, modificarlos y gestionarlos fácilmente; permite almacenar información en filas y columnas. Cada columna puede contener un tipo de dato distinto (numérico, carácter, lógico, factor, etc.)

Un data frame puede crearse a partir de una matriz utilizando la función as.data.frame(). Así:

base1 <- as.data.frame(matrizA)
base2 <- as.data.frame(matrizB)

Las columnas de un data frame se pueden consultar de manera directa utilizando el operador $

base1$vector1
## [1] 1 2 3

Es posible cambiar el nombre de las columnas de un data frame con la función names()

nombre_vectores <- c("variable1","variable2","variable3")

names(base1) <- nombre_vectores

2.1 bases de datos internas

R incluye bases de datos internas listas para ser utilizadas en análisis y ejemplos. Una de las más conocidas es mtcars, que contiene información sobre distintos modelos de automóviles. Esta base puede cargarse directamente escribiendo su nombre.

Antes de trabajar con una nueva base de datos, es común limpiar el entorno de trabajo con rm(list = ls()), lo que elimina todos los objetos previamente cargados en la sesión de R.

rm(list = ls())
base <- mtcars

2.2 Filtros

Los filtros permiten extraer subconjuntos de datos que cumplen ciertas condiciones, facilitando el análisis de información específica dentro de un data frame. Existen varias formas de aplicar filtros:

2.2.1 Forma subset

La función subset() permite seleccionar filas de un data frame que cumplen una condición lógica.

base1 <- subset(base,base$cyl > 4)

Esto crea un nuevo data frame base1 que contiene únicamente los vehículos con más de 4 cilindros.

2.2.2 Forma (matricial)

Se puede filtrar un data frame mediante la indexación por filas y columnas, usando corchetes [ , ]. La condición se coloca en la parte de las filas:

base1_f2 <- base[base$cyl>4,]

2.2.3 Forma (dplyr)

Para esta forma, debemos instalar el paquete dplyr, que ofrece una sintaxis más legible y moderna para filtrar datos. La función filter() selecciona las filas que cumplen la condición especificada:

install.packages('dplyr')
library(dplyr)

base1_f3 <- base %>% 
  filter(cyl>4)

2.3 Cargar bases de datos

Antes de cargar bases de datos externas, debemos instalar los siguientes paquetes y declarar las librerías.

install.packages('readxl')
library(readxl)
library(dplyr)

Para poder cargar las bases de datos, debemos guardar las bases dentro de la carpeta de nuestro proyecto en la carpeta “insumos”.

  • Para cargar un archivo Excel, se emplea la función read_excel(), indicando la ruta del archivo.

  • Para cargar un archivo csv, se emplea la función read.csv(), indicando la ruta del archivo.

basePib_can_anual <-read_excel('Insumos/pib_can_anual.xlsx')

base_final <-read.csv ('Insumos/base_final.csv')

Cambiar el nombre de las variables

Es posible renombrar las columnas de un data frame para que tengan nombres más descriptivos o claros. Esto se hace usando la función names(). Por ejemplo, para cambiar el nombre de la sexta columna a agricultura:

names[asePib_can_anual)[6]<- 'agricultura'

En R, los valores faltantes se representan como NA o NaN. Estos valores indican que no se cuenta con información en esa celda y pueden afectar cálculos y análisis estadísticos. Para facilitar el trabajo, es común reemplazarlos con un valor específico, como 0.

basePib_can_anual[is.na(basePib_can_anual)]<- 0

La función table() permite conocer la frecuencia de cada valor dentro de una variable. Esto es útil para variables categóricas, como la provincia (prov) en un data frame:

table(basePib_can_anual$prov)

El resultado mostrará cuántas observaciones hay en cada categoría, permitiendo identificar distribuciones y posibles errores de registro.

2.3.1 Filtrado, creación de variables y agregación

Filtrado por provincia: Se seleccionan solo los registros correspondientes a las provincias de interés usando filter().

base_santo <- basePib_can_anual %>% 
  filter(dpa_prov=="23")

base_manabi<- basePib_can_anual %>% 
  filter(dpa_prov=="13")

Selección de variables relevantes: Se conserva únicamente las columnas necesarias para el análisis con select():

base_manabi1<- base_manabi %>% 
  select(year,prov,dpa_prov,canton,dpa_can,agricultura, `Explotacion de minas y canteras`)

Vista resumen de una variable summary() permite identificar estadísticas descriptivas y valores límite.

summary(base_manabi1$agricultura)

Eliminar una variable

base_manabi1<-base_manabi1[,-7]

Crear nuevas varialble dicotona

base_manabi1<-base_manabi1 %>% 
  mutate(tipo_pib=ifelse(agricultura>29351,"pib_alto","pib_bajo"))


base_manabi1<-base_manabi1 %>% 
  mutate(tipo=ifelse(agricultura>29351,1,0))



base_manabi1<-base_manabi1 %>% 
  mutate(periodo=ifelse(year<2016,"pre","post"))

Dividir bases por períodos

base_manabi_pre <-base_manabi1 %>% 
  filter(periodo=="pre")


base_manabi_post <-base_manabi1 %>% 
  filter(periodo=="post")

Sumar el PIB de agicultura por cantones

b_m_pre_agg <- base_manabi_pre %>% 
group_by(canton) %>% 
  summarise(total_agricultura_pre=sum(agricultura))


b_m_post_agg <- base_manabi_post %>% 
  group_by(canton) %>% 
  summarise(total_agricultura_post=sum(agricultura))

Ejercicio práctico 1

Análisis de la relación entre consumo e ingreso disponible

  1. Se carga la base de datos y se filtran los registros entre 1980 y 2024.
  2. Se crea la variable ingreso disponible como la diferencia entre el PIB y los impuestos.
  3. Se estima un modelo de regresión lineal simple del consumo en función del ingreso disponible.
  4. Se transforman las variables a logaritmos naturales y se ajusta un modelo log-log, donde el coeficiente del ingreso disponible representa la elasticidad del consumo.
  5. Se calculan los intervalos de confianza para evaluar la significancia estadística de los parámetros.
 base_final_1<-base_final %>% 
 filter(anio>="1980") 

## cremos una nueva variable para calcular el ingreso disponible 
 
 base_final_1<-base_final_1 %>% 
mutate(ingreso_disponible= base_final_1$pib- base_final_1$impuestos)

  #modelo 
 ## C=B1+B2YD +u
 
 modelo <-lm(consumo ~ ingreso_disponible,data=base_final_1)
 summary(modelo)

## Creamos variables logarítmicas
 base_final_1<-base_final_1 %>% 
   mutate(ln_consumo=log(consumo),
          ln_ingreso_disponible=log(ingreso_disponible))

 modelo2 <- lm(ln_consumo~ln_ingreso_disponible,data=base_final_1)
 summary(modelo2)
 confint(modelo)
 confint(modelo2) 

Ejercicio práctico 2

Modelos econométricos con datos de Ecuador

  1. Cargamos la base de datos datos_ecuador.csv, que contiene información macroeconómica del país.
  2. Estimamos un modelo de regresión lineal simple donde la tasa de desempleo depende del PIB, con el objetivo de analizar su relación.
  3. Planteamos un segundo modelo en el que la Inversión Extranjera Directa (IED) depende del riesgo país, para evaluar cómo influye la percepción de riesgo en la entrada de capital extranjero.
  4. Creamos variables rezagadas de la IED y del riesgo país con el fin de capturar los efectos de periodos anteriores.
  5. Finalmente, estimamos un modelo con el riesgo país rezagado como variable explicativa de la IED, lo que nos permite estudiar la influencia del pasado en el comportamiento actual de la inversión.
##CARGANDO BASE DE DATOS
base_datos_ecuador <-read.csv ('Insumos/datos_ecuador.csv')
View(datos_ecuador)
### MODELO: DESEMPLEO = B1+B2*PIB + u
names(base_datos_ecuador)

modelo_desempleo<- lm(base_datos_ecuador$TasaDesempleo_Porcentaje ~ base_datos_ecuador$PIB_MillonesUSD)
modelo_desempleo2<- lm(TasaDesempleo_Porcentaje ~ PIB_MillonesUSD,data = base_datos_ecuador )

summary(modelo_desempleo)
summary(modelo_desempleo2)
### MODELO: IED= B1+B2*RP + u

modelo_ied<- lm(base_datos_ecuador$IED_MillonesUSD~ base_datos_ecuador$RiesgoPais)
summary(modelo_ied)
## CREAMOS RIESGO PAIS RESAGADO

base_datos_ecuador<-base_datos_ecuador %>% 
mutate(ied_rezagado1=lag(IED_MillonesUSD,n=1),
       rp_rezagado1=lag(RiesgoPais),n=1)
## modelo rezagado
modelo_ied_lag1<- lm(IED_MillonesUSD ~ rp_rezagado1, data=base_datos_ecuador)
summary(modelo_ied_lag1)

3 Manejo de encuestas

Para trabajar con encuestas, es necesario instalar los siguientes paquetes :

  • srvyr : permite trabajar con encuestas complejas de manera sencilla, combinando la potencia del paquete survey con la sintaxis de dplyr.

  • rio : facilita la importación y exportación de datos en múltiples formatos (como .csv, .dta, .xlsx, etc.) usando un solo comando.

  • import : permite traer funciones específicas de otros paquetes sin necesidad de cargar todo el paquete, manteniendo el código más ordenado.

install.packages('srvyr')
install.packages('rio')
install.packages('import')

Luego declaramos librerías:

library(dplyr)
library(srvyr)
library(rio)
library(import)

Cargamos bases de datos

personas<-import('insumos/1_BDD_ENS2018_f1_personas.dta')

Identificamos la variable

table(personas$dcronica_2)

dci<-2210/(5591+2210)

3.1 Diseño muestral

El objeto dm se utiliza para almacenar el diseño muestral de la encuesta que definimos con as_survey_design().

La función as_survey_design() convierte un data frame en un objeto de encuesta que respeta la estructura del muestreo, asegurando que las medias, proporciones y totales sean correctos. Sus principales parámetros son: ids = upm para la unidad primaria de muestreo, strata = estrato para definir los estratos y weights = fexp para los pesos muestrales. La opción survey.lonely.psu = ‘certainty’ permite manejar estratos con una sola UPM, evitando errores al calcular estadísticas y errores estándar.

dm<-personas %>% 
  as_survey_design(ids = upm, ## upm= unidad primaria de muestreo
                   strata = estrato, # estrato = estrato 
                   weights = fexp)  # fexp= factor de expansión
options(survey.lonely.psu = 'certainty') # forzando a que las observaciones sean unicas e individuales

3.2 Tabla de prevalencia

Una tabla de prevalencia es una forma de resumir datos que muestra la frecuencia o proporción de un evento o característica dentro de una población o muestra.

prev_nac_dci2<- dm %>%
summarise(survey_mean(dcronica_2,vartype = c('se','cv'),na.rm=TRUE),
          n_muestra=sum(!is.na(dcronica_2))) %>% 
  mutate(dominio="Nacional") %>% 
  select(dominio,porcentaje=coef, se=`_se`,cv=`_cv`,n_muestra) %>% 
  mutate(porcentaje=round((porcentaje*100),digits=2))

Ejercicio práctico 3 Manejo de encuestas

  ## ENEMDU SEGUNDO TRIMESTRE 2025
rm(list = ls())   ##borro los resultados de lo anterior
##cargando librerías
library(dplyr)
library(srvyr)
library(rio)


## Cargaos bases de datos
df<-  read.csv2('insumos/enemdu_persona_2025_II_trimestre.csv')  ## uso csv2 pq el archivo era separa por ; no x ,


##Declaración del diseño muestral
dm<-df %>% 
  as_survey_design(ids = upm, ## upm= unidad primaria de muestreo
                   strata = estrato, # estrato = estrato 
                   weights = fexp)  # fexp= factor de expansión

## Replicar indicadores

  # Instalar pqt de librerias

installed.packages('haven')
installed.packages('tidyverse')


# declarando librerias
library(haven)
library(tidyverse)

#####################
## TASA DE DESEMPLEO
####################

tasa_desempleo_nac<-dm %>% 
filter(p03>=15) %>% 
  summarise(
    tasa_desempleo = survey_ratio(
      numerator=(condact==7|condact==8),
      denominator=(condact %in% 1:8),
      vartype = c('se','ci')
    )
  ) %>% 
  
  mutate(tasa_desempleo = round((tasa_desempleo*100),digits = 1))
  

############################
### TASA DE EMPLEO ADECUADO
############################

tasa_empleo_adec<-dm %>% 
  filter(p03>=15) %>% 
  summarise(
    tasa_empleo_adecuado = survey_ratio(
      numerator=(condact==1),
      denominator=(condact %in% 1:8),
      vartype = c('se','ci')
    )
  ) %>% 
  
  mutate(tasa_empleo_adecuado = round((tasa_empleo_adecuado*100),digits = 1))



############################
### TASA DE SUBEMPLEO
############################

tasa_subempleo<-dm %>% 
  filter(p03>=15) %>% 
  summarise(
    tasa_subempleo = survey_ratio(
      numerator=(condact==2|condact==3),
      denominator=(condact %in% 1:8),
      vartype = c('se','ci')
    )
  ) %>% 
  
  mutate(tasa_subempleo = round((tasa_subempleo*100),digits = 1))



############################
### TASA DE EMPLEO NO REMUNERADO
############################

tasa_empleo_norem<-dm %>% 
  filter(p03>=15) %>% 
  summarise(
    tasa_empleo_norem = survey_ratio(
      numerator=(condact==5),
      denominator=(condact %in% 1:8),
      vartype = c('se','ci')
    )
  ) %>% 
  
  mutate(tasa_empleo_norem = round((tasa_empleo_norem*100),digits = 1))