Posit Cloud: sube este archivo .Rmd y los tres CSV al mismo proyecto. Puedes usar Files → Upload.
Si no encuentras los CSV, este informe los generará con valores por defecto en el directorio del proyecto.

1 1. Setup (Posit Cloud)

# Instalación rápida en Posit Cloud
req <- c("tidyverse","lubridate","scales","readr","glue")
new <- req[!(req %in% installed.packages()[,"Package"])]
if(length(new)) install.packages(new, dependencies = TRUE, quiet = TRUE)

options(repos = c(CRAN = "https://cloud.r-project.org"))

# Fuerza actualización de rlang primero
install.packages("rlang", dependencies = TRUE)

# Verifica versión (debe ser >= 1.1.0)
packageVersion("rlang")
## [1] '1.1.6'
# Ahora instala/actualiza los demás
install.packages(c("scales", "tidyverse", "lubridate", "readr", "glue"), dependencies = TRUE)

# Opcional: actualiza todo lo desactualizado sin preguntar
# update.packages(ask = FALSE)

library(tidyverse)
library(lubridate)
library(scales)
library(readr)
library(glue)

2 2. Cargar/crear datos

# Archivos esperados en el directorio de trabajo del proyecto
fn_param  <- "parametros_modelo.csv"
fn_cat    <- "categorias_canasta.csv"
fn_esc    <- "escenarios_modelo.csv"

# Si no están, crearlos con valores por defecto
if(!file.exists(fn_param)){
  write_lines("variable,valor
canasta_basica_inicial_usd,813.82
canasta_vital_inicial_usd,798.31
diesel_precio_anterior,1.80
diesel_precio_nuevo,2.80
inflacion_base_anual_no_diesel,0.03
mes_inicio,2026-01-01
mes_fin,2026-12-01", fn_param)
}

if(!file.exists(fn_cat)){
  write_lines("categoria,peso_canasta,intensidad_transporte
Alimentos y bebidas no alcohólicas,0.26,0.60
Transporte,0.13,0.90
Vivienda, agua, electricidad y gas,0.22,0.40
Restaurantes y hoteles,0.09,0.50
Muebles y artículos para el hogar,0.06,0.45
Recreación y cultura,0.05,0.35
Salud,0.04,0.30
Educación,0.05,0.20
Comunicaciones,0.03,0.25
Prendas de vestir y calzado,0.04,0.35
Misceláneos,0.03,0.30", fn_cat)
}

if(!file.exists(fn_esc)){
  write_lines("escenario,peso_transporte_basket,pass_through,segunda_ronda,half_life_meses
Bajo,0.20,0.40,0.10,5
Base,0.25,0.60,0.20,3
Alto,0.30,0.80,0.30,2", fn_esc)
}

# Carga
parametros <- read_csv(fn_param, show_col_types = FALSE)
categorias <- read_csv(fn_cat, show_col_types = FALSE)
escenarios <- read_csv(fn_esc, show_col_types = FALSE)

parametros_tbl <- tidyr::pivot_wider(parametros, names_from = variable, values_from = valor)
parametros_tbl

Notas para Posit Cloud - Puedes editar los CSV directamente en el panel Files → clic en el nombre del archivo.
- Para subir versiones nuevas, usa Upload y sobreescribe.
- Al hacer Knit, se cachean piezas pesadas para acelerar re-ejecuciones.

3 3. Modelo

3.1 3.1. Choque de diésel y calendario

diesel_old <- as.numeric(parametros_tbl$diesel_precio_anterior)
diesel_new <- as.numeric(parametros_tbl$diesel_precio_nuevo)
shock_diesel <- diesel_new / diesel_old - 1

inicio <- as_date(parametros_tbl$mes_inicio)
fin    <- as_date(parametros_tbl$mes_fin)
meses  <- seq.Date(from = inicio, to = fin, by = "month")

pi_base_anual   <- as.numeric(parametros_tbl$inflacion_base_anual_no_diesel)
pi_base_mensual <- (1 + pi_base_anual)^(1/12) - 1

BASE_CB <- as.numeric(parametros_tbl$canasta_basica_inicial_usd)
BASE_CV <- as.numeric(parametros_tbl$canasta_vital_inicial_usd)

glue("Shock diésel: {percent(shock_diesel, accuracy = 0.01)} | Inflación base mensual: {percent(pi_base_mensual, 0.01)}")
## Shock diésel: 55.56% | Inflación base mensual: 0.25%

3.2 3.2. Funciones del modelo (lag geométrico)

geom_weights <- function(n, half_life){
  r <- 0.5^(1/half_life)
  w <- r^(0:(n-1))
  w / sum(w)
}

build_escenario <- function(esc){
  n <- length(meses)
  pass <- esc$pass_through
  sr   <- esc$segunda_ronda
  hl   <- esc$half_life_meses
  # Impacto por rubro (desagregado)
  deltaP_rubro <- categorias %>%
    mutate(impacto_rubro = shock_diesel * pass * (1 + sr) * intensidad_transporte)
  deltaP_total <- sum(deltaP_rubro$peso_canasta * deltaP_rubro$impacto_rubro)
  # Distribución temporal
  w <- geom_weights(n, hl)
  infl_diesel_m <- deltaP_total * w
  # Inflación total mensual con base
  infl_total_m  <- (1 + infl_diesel_m) * (1 + pi_base_mensual) - 1
  acum_factor <- cumprod(1 + infl_total_m)
  tibble(
    escenario = esc$escenario,
    mes = meses,
    inflacion_diesel_m = infl_diesel_m,
    inflacion_base_m = pi_base_mensual,
    inflacion_total_m = infl_total_m,
    inflacion_acum = acum_factor - 1,
    canasta_basica = BASE_CB * acum_factor,
    canasta_vital  = BASE_CV * acum_factor
  )
}

3.3 3.3. Proyecciones por escenario

proy <- purrr::map_dfr(1:nrow(escenarios), ~build_escenario(escenarios[.x, ]))
head(proy)

4 4. Resultados

4.1 4.1. Consolidado diciembre 2026

kpi_dic <- proy %>%
  dplyr::filter(lubridate::month(mes) == 12) %>%
  transmute(
    escenario,
    canasta_basica_dic = round(canasta_basica, 2),
    canasta_vital_dic  = round(canasta_vital, 2),
    inflacion_acum_pp  = round(inflacion_acum * 100, 2)
  )
kpi_dic

4.2 4.2. Gráficas

proy_long <- proy %>% mutate(mes_label = format(mes, "%b-%Y"))

ggplot(proy_long, aes(mes, inflacion_acum * 100, color = escenario)) +
  geom_line(size = 1) +
  labs(title = "Inflación acumulada (base + diésel) — Ecuador 2026",
       x = "Mes", y = "Porcentaje (%)") +
  scale_x_date(date_breaks = "2 months", date_labels = "%b-%y") +
  theme_minimal()

ggplot(proy_long, aes(mes, canasta_basica, color = escenario)) +
  geom_line(size = 1) +
  labs(title = "Canasta Básica 2026 — Valor proyectado",
       x = "Mes", y = "USD") +
  scale_x_date(date_breaks = "2 months", date_labels = "%b-%y") +
  theme_minimal()

ggplot(proy_long, aes(mes, canasta_vital, color = escenario)) +
  geom_line(size = 1) +
  labs(title = "Canasta Vital 2026 — Valor proyectado",
       x = "Mes", y = "USD") +
  scale_x_date(date_breaks = "2 months", date_labels = "%b-%y") +
  theme_minimal()

5 5. Exportar resultados y guardar en Posit Cloud

# Se guarda un CSV con todas las trayectorias en el directorio del proyecto
readr::write_csv(proy, "proyecciones_2026_por_escenario.csv")
glue("Archivo exportado: {getwd()}/proyecciones_2026_por_escenario.csv")
## Archivo exportado: /cloud/project/proyecciones_2026_por_escenario.csv

6 6. Interpretación y conclusiones