Clase 1

##Introducción

rm(list = ls())
#para borrar los objetos #utilizar siempre minusculas, sin tildes ni caracteres especiales #Nombres de variables:

#Creacion de objetos

#escalar escalar1 <- 3 escalar2 <- 4

#Operaciones

escalar1 + escalar2

escalar3 <- escalar1 + escalar2

escalar3<-escalar1+escalar2

escalar4 <- escalar3 * escalar2

escalar5 <- escalar4/escalar1

escalar5

summary(escalar5)

table(escalar5)

summary:resumen estadistico - table: para contar frecuencias

##Vectores

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

prd1 <- vect1 *escalar4

Ubicacion

vect1[2] # corchetes para acceder a elementos dentro del vector Atl 91

vect2[3]

objeto1 <- vect3[1]

objeto2 <- vect2[2:3]

objeto3 <- vect2[1:2]

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

objeto4_f2 <- vect2[-2]

vect2[-2] # es todos los elementos excepto el 2

matrices

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

#cbind une a los vectores como columnas en una matriz matrizA <- cbind(vector1,vector2,vector3) matrizA

#rbind une a los vectores como filas de una matriz matrizB <- rbind(vector1,vector2,vector3) matrizB

bases de datos (data frames) tabla flexible como excel distintos tipos de datos

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

Ingresar a objetos en bases de datos (tomar variables con $) llama especificamente a una columna

base1$vector1

#cambiar de nombre a variables nombre_vectores <- c(“variable1”,“variable2”,“variable3”)

names(base1) <- nombre_vectores

base1

Cargar bases de datos internas

#filtros ## borramos todo rm(list = ls()) base <- mtcars

#####Filtros #Vehiculos con mas de 4 cilindros

1 forma subset

se filtra las filas donde cyl los cilinfros sean mayor a 4 base1 <- subset(base,base$cyl > 4)

2 forma (matricial)

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

3 forma (dplyr)

#install.packages(‘dplyr’) library(dplyr)

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

#Clase 2

Introducción a R Markdown

El entorno R Markdown es un marco de creación de código abierto que permite la elaboración de documentos dinámicos y reproducibles al entrelazar texto narrativo, código ejecutable y las visualizaciones de datos resultantes en un único archivo.

Composición de un Archivo.Rmd: Los Tres Componentes Centrales

El archivo .Rmd que RStudio genera no es una página en blanco; es una plantilla útil que ilustra la estructura fundamental de cualquier documento R Markdown. Esta estructura se compone de tres tipos de contenido distintos

El Encabezado YAML

Ubicado en la parte superior del archivo, delimitado por líneas de tres guiones (---). Esta sección funciona como el panel de control del documento, donde se definen metadatos como el título, el autor y, lo más importante, el formato de salida y sus opciones.

Texto en Markdown

El cuerpo principal del documento, donde se escribe la narrativa. Este texto utiliza la sintaxis de Markdown para aplicar formato, como encabezados, negritas, listas y enlaces. Es la parte del documento destinada a ser leída por humanos.

Trozos de Código R (Code Chunks)

Bloques de código R incrustados, delimitados por tres acentos graves (`) y {r}. Aquí es donde reside la parte analítica del documento. knitr ejecutará este código y su salida (tablas, gráficos, etc.) se insertará en el documento final.

Escritura en R Markdown

Markdown es un lenguaje de marcado ligero diseñado para ser fácil de escribir y leer en su forma de texto plano.

  • Encabezados:

Se utilizan almohadillas (#) para crear encabezados de sección. El número de almohadillas corresponde al nivel del encabezado, desde # (nivel 1) hasta ###### (nivel 6).  

Título Principal (Nivel 1) (#)

Sección Principal (Nivel 2) (##)

Subsección (Nivel 3) (##)

  • Énfasis:

Cursiva: *texto en cursiva* o texto en cursiva.

Negrita: **texto en negrita** o texto en negrita.

Tachado: texto tachado.~~texto tachado~~

Superíndice: textosuperíndice.

Subíndice: H2O produce H2O.

  • Listas:

No ordenadas: Se pueden usar asteriscos (*), guiones (-) o signos de más (+).

  • Primer elemento

  • Segundo elemento

– Subelemento anidado

  • Ordenadas:

Se usan números seguidos de un punto. La numeración se ajusta automáticamente, por lo que se puede usar 1. para cada elemento.  

  1. Primer paso

  2. Segundo paso

  3. Tercer paso

Citas en Bloque y Reglas Horizontales:

Citas: Se usa el símbolo de mayor que (>) al principio de una línea.  

“La reproducibilidad es la piedra angular de la ciencia.”

  • Tablas:

Se puede crear tablas simples utilizando tuberías (|) y guiones. Para tablas más complejas generadas a partir de datos, es mejor usar funciones de R como

Cuando se presiona el botón Knit se generará un documento que incluye una conexión entre el código y una presentación formal literaria.

Se puede generar código como el siguiente:

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

O de mejor manera:

kableExtra::kable(summary(cars))
speed dist
Min. : 4.0 Min. : 2.00
1st Qu.:12.0 1st Qu.: 26.00
Median :15.0 Median : 36.00
Mean :15.4 Mean : 42.98
3rd Qu.:19.0 3rd Qu.: 56.00
Max. :25.0 Max. :120.00

Gráficos

Ejemplo:

plot(pressure)

Expresiones Matemáticas

R Markdown soporta ecuaciones con formato LaTeX.

  • En línea: Se encierran entre signos de dólar simples: $E = mc^2$ produce \(E = mc^2\)

  • En bloque (display): Se encierran entre signos de dólar dobles: \[\sum_{i=1}^{n} x_i\] produce

Creación de Trozos de Código

Existen tres formas sencillas de insertar un nuevo trozo de código en RStudio :

  • Atajo de teclado: Ctrl + Alt + I (en Windows/Linux) o Cmd + Option + I (en macOS).

  • Botón de la barra de herramientas: El botón “Insert” en la parte superior del editor de scripts tiene una opción para insertar un trozo de R.

  • Manualmente: Escribir los delimitadores {r} y .

Opciones Esenciales de los Trozos de Código

Las opciones de los trozos de código, colocadas dentro de las llaves ({}), proporcionan un control preciso sobre cómo se ejecuta el código y cómo se presenta su salida. Dominar estas opciones es clave para pasar de un cuaderno de análisis personal a un informe profesional pulido dirigido a una audiencia específica.

Un análisis en bruto contiene código, salidas, mensajes, advertencias y gráficos. Sin embargo, diferentes audiencias tienen diferentes necesidades. Un colaborador puede querer ver todo el proceso, mientras que un ejecutivo solo querrá ver las conclusiones y los gráficos finales. Las opciones de los trozos de código son el mecanismo que permite a un único archivo fuente .Rmd generar informes distintos y personalizados para cada uno de estos públicos.

echo=FALSE: Oculta el código fuente pero muestra su salida (gráficos, tablas). Esencial para informes dirigidos a audiencias no técnicas.

eval=FALSE: Muestra el código pero no lo ejecuta. Útil para tutoriales o para mostrar código de ejemplo.

include=FALSE: Ejecuta el código pero no incluye ni el código ni su salida en el documento final. Perfecto para trozos de configuración inicial, como la carga de paquetes o datos, que no necesitan ser visibles.

message=FALSE y warning=FALSE: Suprimen los mensajes (por ejemplo, los que aparecen al cargar paquetes) y las advertencias, respectivamente. Esto es crucial para crear un informe final limpio y sin distracciones.

error=TRUE: Permite que el documento se compile (“teja”) incluso si el código en ese trozo produce un error. El error se mostrará en el documento final. Es útil para depurar o para enseñar, mostrando deliberadamente un error.

Clase 3

rm(list=ls()) ## Librerias install.packages(‘readxl’) #Librería para leer archivos Excel library(readxl) #Cargar librería readxl library(dplyr)

#Cargar bases de datos base <- read_excel(‘insumos/Pib_can_anual.xlsx’) View(base) # Visualizar los datos cargados en una pestaña nueva pib_can_anual <- read_excel(“insumos/pib_can_anual.xlsx”)

Cambiar de nombre a variables

names(base)[6] <-‘agricultura’ names(base)[7] <-‘minas y canteras’ ## Reemplazar los NA con 0 base[is.na(base)] <- 0

Ver cuantas observaciones tengo por variable

table(base$prov) # Nos quedamos con una provincia base_santo <- base %>% filter(dpa_prov == “23”)

base_manabi <- base %>% filter(prov== “MANABÍ”) # Filtrar solo la provincia de Manabí

Quedarme solo con las variables necesarias

names(base_manabi)

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

#Vista resumen de una variables Resumen estadístico de la variable “agricultura” summary(base_manabi1$agricultura)

Valor limite 29351.06

Eliminar ultima variable

base_manabi1 <- base_manabi1[,-7]

Crear nueva variable dicotoma (mutate)

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”))

Dividamos las bases por periodo

base_manabi_pre <- base_manabi1 %>% filter(periodo==“pre”) base_manabi_post <- base_manabi1 %>% filter(periodo==“post”)

Sumar el PIB de agricultura por Canton

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))

Clase 4 #Carga de datos, filtro, crear variables y ajustar un modelo de regresión simple.

rm(list = ls())

base <- read.csv(‘insumos/base_final.csv’)

Librerias

library(dplyr) ### Filtramos la base de datos # desde 1980 hasta 2024

base1 <- base %>% filter(anio>=1980)

Creamos una nueva variable

#primera forma Ingreso_disponible <- base1\(pib-impuestos Ingreso_disponible <- base1\)pib-base\(impuestos base1\)ingreso_disponible <- base\(pib-base\)impuestos

dsegunda forma

base1 <- base1 %>% mutate(ingreso_disponible2 = pib - impuestos)

Modelo Econometrico

C = B1 + B2*YD +u

options(scipen = 999)

modelo <- lm(consumo ~ ingreso_disponible,data=base1) summary(modelo)

creamos variables logaritmicas

base1 <- base1 %>% mutate(ln_consumo = log(consumo), ln_ingreso_disponible = log(ingreso_disponible))

modelo2 <- lm(ln_consumo ~ ln_ingreso_disponible, data = base)

summary(modelo2)

confint(modelo) confint(modelo2)

Clase 5 #Estimación de modelos con base de Datos Ecuador

rm(list = ls())

base <- read.csv(‘insumos/datos_ecuador.csv’)

Modelo: desempleo = B1 + B2*PIB +u

names(base) modelo_desempleo <- lm(TasaDesempleo_Porcentaje ~ PIB_MillonesUSD, data=base) modelo_desemepleo2 <- lm(base\(TasaDesempleo_Porcentaje ~base\)PIB_MillonesUSD)

summary(modelo_desempleo) summary(modelo_desemepleo2)

Modelo: IED = B1 + B2* RP +u

names(base) model_ied <- lm(IED_MillonesUSD ~ RiesgoPais, data=base) summary(model_ied)

Creamos el Riesgo pais Rezagado

library(dplyr) base <- base %>% mutate(ied_rezagado1= lag(IED_MillonesUSD,n=1), rp_rezagado1 = lag(RiesgoPais,n=1), rp_rezagado2 = lag(RiesgoPais,n=2))

#modelo rezagado names(base) model_ied_lag1 <- lm(IED_MillonesUSD ~ rp_rezagado1, data=base) summary(model_ied_lag1)

model_ied_lag2 <- lm(IED_MillonesUSD ~ rp_rezagado2, data=base) summary(model_ied_lag2)

##Correccion prueba

#Utilice la base de datos “datos_ecuador.csv”, para el periodo entre 2015 y 2023, #corra el modelo desempleo = B1 + B2*Ln(PIB) +u. #Indique el valor de B2. (Ingrese su valor con 2 decimales sin redondear) rm(list = ls()) base <- read.csv(‘insumos/datos_ecuador.csv’)

##filtro base1 <- base %>% filter(anio> 2015 & anio < 2023) %>% mutate(ln_pib=log(PIB_MillonesUSD)) ## Moddelo names(base1) modelo1 <- lm(TasaDesempleo_Porcentaje ~ ln_pib,data = base1) summary(modelo1) ## B2= -9.75

#Utilice la base de datos “datos_ecuador.csv”, #para el periodo deshde 2015 hasta 2023, corra el modelo desempleo = B1 + B2*PIB +u. #Indique el valor de B2. (Ingrese su valor con 2 decimales sin redondear)

rm(list = ls()) base <- read.csv(‘insumos/datos_ecuador.csv’)

base2 <- base %>% filter(anio>= 2015 & anio <= 2023) modelo2 <- lm(TasaDesempleo_Porcentaje~PIB_MillonesUSD, data = base2) summary(modelo2)

Clase 6 # Diseño muestral.

rm(list = ls()) #Librerias library(dplyr) install.packages(‘srvyr)’) library(srvyr) #install.packages(‘rio’) library(rio) #install.packages(‘import’) library(import)

#Cargamos la base de datos personas <- import(‘insumos/1_BDD_ENS2018_f1_personas.dta’)

identificamos la variable

table(personas$dcronica_2)

dci <-2210/(5591+2210) dci dci*100

#####trabajando con muestras oficiales

dm <- personas %>% as_survey_design(ids=upm, # unidad primaria de muestreo strata=estrato, #estrato weights = fexp) # factor de expansion

options(survey.lonely.psu =‘certainty’)

prev_nac_dci2 <- dm %>% summarise(survey_mean(dcronica_2, vartype =c(‘se’,‘cv’),na.rm=T), 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 = 1)) View(prev_nac_dci2)

ENEMU II TRIMESTRE 2025 (df base de datos)

rm(list = ls()) library(dplyr) library(srvyr) library(rio)

#cargamos la base de datos

df <- read.csv2(‘insumos/enemdu_persona_2025_II_trimestre.csv’) #df2 <- read.csv2(‘insumos/enemdu_persona_2025_II_trimestre.csv’,sep=“;”) otra forma

###Declaracion del diseño muestral dm <- df %>% as_survey_design(ids=upm, strata=estrato, weights = fexp)

####Replicar indicadores #installed.packages(‘haven’) library(haven) #installed.packages(‘tidyverse’) library(tidyverse)

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)) #para redondearle; round(),digitos =1

Tasa de empleo adecuado ######################################## tasa_empleo_adecuado <- dm %>% filter(p03>=15) %>%

summarise( tasa_empleo_adecuado = survey_ratio( numerator=( condact == 1 | condact==8), denominator=(condact %in% 1:8), vartype = c(‘se’,‘ci’) ) ) %>% mutate(tasa_empleo_adecuado = round((tasa_empleo_adecuado*100),digits = 1))

Tasa de empleo 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))

Clase 4

rm(list = ls())

base <- read.csv(‘insumos/base_final.csv’)

Librerias

library(dplyr) ### Filtramos la base de datos # desde 1980 hasta 2024

base1 <- base %>% filter(anio>=1980)

Creamos una nueva variable

#primera forma Ingreso_disponible <- base1\(pib-impuestos Ingreso_disponible <- base1\)pib-base\(impuestos base1\)ingreso_disponible <- base\(pib-base\)impuestos

dsegunda forma

base1 <- base1 %>% mutate(ingreso_disponible2 = pib - impuestos)

Modelo Econometrico

C = B1 + B2*YD +u

options(scipen = 999)

modelo <- lm(consumo ~ ingreso_disponible,data=base1) summary(modelo)

creamos variables logaritmicas

base1 <- base1 %>% mutate(ln_consumo = log(consumo), ln_ingreso_disponible = log(ingreso_disponible))

modelo2 <- lm(ln_consumo ~ ln_ingreso_disponible, data = base)

summary(modelo2)

confint(modelo) confint(modelo2)

TASA DE subempleo

tasa_subempleo_nac <- 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))

#### pdf install.packages(“tinytex”) tinytex::install_tinytex()