Taller ITS

Gabriel Carrasco-Escobar

01. General

Las series de tiempo interrumpidas se pueden utilizar cuando:

  • tenemos datos sobre un resultado a lo largo del tiempo (datos longitudinales)

  • queremos entender cómo y si el resultado ha cambiado después de un evento (ej. meteorológico o tradicionalmente una intervención, una política o un programa) al que se expuso toda la población en un momento específico.

Los datos deben incluir observaciones antes y después de que ocurriera el evento. Cuantas más observaciones tenga en ambos lados del evento, más robusto será su modelo (por lo general).

La variable dependiente en estos modelos por lo general es una medida de resumen de la población (ej. Promedios o conteos). Por ejemplo, el PIB de un país, la tasa de criminalidad en una ciudad, el puntaje promedio de matemáticas en una escuela, o casos de malaria en una cuidad.

A diferencia de la mayoría de los otros modelos que requieren muchos controles, estos modelos son flexibles porque pueden generar inferencias válidas en ciertas circunstancias con solo dos variables independientes: el tiempo y la fecha de inicio del evento.

Las series de tiempo interrumpidas nos permiten investigar cada efecto, entendiendo así si el evento:

  • No tiene ningún efecto (A)

  • Tiene solo un efecto inmediato (B)

  • Tiene un efecto sostenido a largo plazo (C)

  • Tiene un efecto inmediato y sostenido (D)

Modelo ITS

\[ Y_{t}=\beta_{0}+\beta_{1}T_{t}+\beta_{2}D_{t}+\beta_{3}P_{t}\]

Donde :

Variables:

\(Y_{t}\) = desenlace en salud(outcome)

\(T_{t}\) = variable continua para el tiempo desde el inicio del período de observación

\(D_{t}\) = una variable dummy para el período de tiempo (antes / después del evento)

\(P_{t}\) = variable continua para el tiempo posterior al evento

Coeficientes:

\(\beta_{1}\) = Tendencia previa al evento

\(\beta_{2}\) = cambio en el nivel del resultado inmediatamente después al evento

\(\beta_{3}\) = el cambio en la tendencia después del evento.

Credits: Turner, 2021

ITS Supuestos

  • Shock bien definido

  • No hay eventos simultáneos

  • Tendencia previa al evento bien establecida (tamaño muestra de análisis considerable)

  • Correcta especificación del modelo

  • La tendencia previa al evento se hubiera mantenido en ausencia del evento.

02. Caso

  • Impacto en Salud: Muertes semanales por dengue en Iquitos (por 10,000 habitantes)

  • Evento: Evento de lluvias extremo (PDSI > 4 ~ 01-11-2015)

    • Índice de severidad de la sequía de Palmer (PDSI): El PDSI secalcula utilizando los niveles de humedad del suelo, la tasa de evapotranspiración esperada (es decir, la cantidad de evaporación del suelo que ocurriría si hubiera suficientes niveles de agua disponibles, según la temperatura media diaria y la duración de los días del mes) y la precipitación.

    • El índice varía de −10 (muy seco) a 10 (muy húmedo), con valores por debajo de −4 o por encima de 4 clasificados como extremos.

03. Taller

Pasos

  1. Explorar de forma gráfica los datos. ITS es un diseño adecuado para la pregunta de investigación?

  2. Poner en formato la base de datos. Crear las variables T (tiempo desde el inicio del estudio), D (indicador pre/post evento desde el 01-11-2015), P (tiempo desde el inicio del evento)

  3. Realizar el modelo de regresion segmentada para ITS usando las 3 variables creadas.

  4. Interpretar resultados de los coeficientes

  5. Calcular los valores predichos en base al modelo ITS

  6. Graficar los resultados del ITS junto con los valores del paso 1.

  7. Calcular el escenario contrafactual (sin evento) y graficarlo

3.1 Explorar de forma gráfica los datos. Es ITS un diseño adecuado para la pregunta de investigación?

3.2 Poner en formato la base de datos.

  • Crear las variables:

    • \(T\) (tiempo desde el inicio del estudio)

    • \(D_{t}\) (indicador pre/post evento desde el 01-11-2015)

    • \(P\) (tiempo desde el inicio del evento)

3.3 Realizar el modelo de regresion segmentada para ITS usando las 3 variables creadas

3.4 Interpretar resultados de los coeficientes

  • El coeficiente de tiempo indica la tendencia de las muertes por dengue antes del evento. Es positivo y significativo, lo que indica que las muertes por dengue en la población de Iquitos aumenta con el tiempo. Por cada semana que pasa, las muertes aumenta en 0.19 por cada 10,000 habitantes (~10 muertes adicionales al año).

  • El coeficiente del evento indica el aumento de las muertes por dengue inmediatamente después del evento. Podemos ver que el efecto inmediato es positivo y significativo indicando que el inicio de lluvias extremas aumentó las muertes por dengue en la población de Iquitos en 13.09 por cada 10,000 habitantes (~680 muertes adicionales al año).

  • El coeficiente de tiempo transcurrido desde el evento indica que la tendencia ha cambiado después del evento. El efecto sostenido es positivo y significativo, lo que indica que por cada día que pasa después del evento de lluvias extremas, las muertes diarias por dengue aumenta en 0.54 por cada 10,000 habitantes (~28 muertes adicionales al año).

3.5 Calcular los valores predichos en base al modelo ITS

\[ Pred = 57.15 + 0.19*T + 13.09*D + 0.54* P\]

3.6 Graficar los resultados de ITS junto con los valores del paso 1.

3.7 Calcular el escenario contrafactual (sin evento) y graficarlo

\[ Pred=57.15+(0.19∗T)+(13.09∗0)+(0.54∗0) \]

04. Consideraciones

  • Efectos rezagados

  • Regression to the mean

  • Autocorrelacion

Finalmente, las series de tiempo también están sujetas a amenazas a la validez interna, tales como:

  • Otro hecho ocurrió al mismo tiempo del evento de interés y provocó el efecto inmediato y sostenido que observamos;

  • Procesos de selección (vulnerabilidad), ya que las personas se ven afectadas de diferente manera por el evento.

Para abordar estos problemas puede :

  • Utilizar como control un grupo que no esté expuesto al evento (por ejemplo, una población con características comparables donde no hubieron eventos de lluvias extremas)

Extra: Analisis en R

Datos y Paquetes

library(readxl)
library(tidyverse)
library(lubridate)
library(jtools)
library(broom)

dat <- read_excel("../data_dengue.xlsx") %>%
  mutate(date = ymd(date))

Exploracion de datos

dat %>%
  ggplot(aes(x = date, y = dengue_cases)) +
  geom_point(alpha = .6) +
  geom_vline(aes(xintercept = dmy("01-11-2015")), 
             linetype = "dashed", col = "red3") +
  theme_bw()

Formato de datos

dat_its <- dat %>%
  mutate(T = seq(1:n()), # Tiempo desde inicio del estudio
         D = ifelse(T>200,1,0), # Dummy 0=pre, 1= post evento
         P = ifelse(T>200,T-200,0)) # Tiempo desde el evento
dengue_cases date T D P
38.50479 2012-01-01 1 0 0
48.61841 2012-01-08 2 0 0
102.44811 2012-01-15 3 0 0
58.05859 2012-01-22 4 0 0
60.03438 2012-01-29 5 0 0
107.77661 2012-02-05 6 0 0
70.40195 2012-02-12 7 0 0
18.88587 2012-02-19 8 0 0
36.42974 2012-02-26 9 0 0
43.87267 2012-03-04 10 0 0
94.13151 2012-03-11 11 0 0
68.44217 2012-03-18 12 0 0
69.88381 2012-03-25 13 0 0
61.40350 2012-04-01 14 0 0
41.64085 2012-04-08 15 0 0
112.07083 2012-04-15 16 0 0
73.64975 2012-04-22 17 0 0
0.00000 2012-04-29 18 0 0
80.17728 2012-05-06 19 0 0
45.20039 2012-05-13 20 0 0

Modelo ITS

fit <- dat_its %>%
  lm(dengue_cases ~ T + D + P, data = .)

summ(fit)
Observations 365
Dependent variable dengue_cases
Type OLS linear regression
F(3,361) 397.10
0.77
Adj. R² 0.77
Est. S.E. t val. p
(Intercept) 57.15 4.13 13.85 0.00
T 0.19 0.04 5.36 0.00
D 13.09 6.12 2.14 0.03
P 0.54 0.06 9.13 0.00
Standard errors: OLS
pred <- augment(fit, interval = "confidence")
dengue_cases T D P .fitted .lower .upper .resid .hat .sigma .cooksd .std.resid
38.50479 1 0 0 57.34405 49.28881 65.39928 -18.8392531 0.0198507 29.09563 0.0021692 -0.6545372
48.61841 2 0 0 57.53504 49.54029 65.52978 -8.9166232 0.0195537 29.10904 0.0004784 -0.3097457
102.44811 3 0 0 57.72602 49.79161 65.66044 44.7220890 0.0192597 29.01545 0.0118457 1.5533233
58.05859 4 0 0 57.91701 50.04277 65.79126 0.1415756 0.0189687 29.11291 0.0000001 0.0049166
60.03438 5 0 0 58.10800 50.29376 65.92224 1.9263753 0.0186807 29.11273 0.0000213 0.0668887
107.77661 6 0 0 58.29899 50.54459 66.05339 49.4776163 0.0183957 28.99369 0.0138240 1.7177396
70.40195 7 0 0 58.48998 50.79525 66.18471 11.9119704 0.0181137 29.10601 0.0007885 0.4134945
18.88587 8 0 0 58.68097 51.04573 66.31621 -39.7950955 0.0178347 29.03588 0.0086602 -1.3811919
36.42974 9 0 0 58.87196 51.29603 66.44788 -22.4422203 0.0175587 29.08844 0.0027101 -0.7788060
43.87267 10 0 0 59.06294 51.54614 66.57975 -15.1902704 0.0172857 29.10170 0.0012216 -0.5270704
94.13151 11 0 0 59.25393 51.79607 66.71180 34.8775743 0.0170157 29.05381 0.0063361 1.2100122
68.44217 12 0 0 59.44492 52.04580 66.84404 8.9972471 0.0167487 29.10898 0.0004148 0.3121003
69.88381 13 0 0 59.63591 52.29534 66.97648 10.2479028 0.0164847 29.10781 0.0005294 0.3554358
61.40350 14 0 0 59.82690 52.54467 67.10912 1.5765975 0.0162237 29.11279 0.0000123 0.0546751
41.64085 15 0 0 60.01789 52.79380 67.24198 -18.3770388 0.0159656 29.09653 0.0016470 -0.6372167
112.07083 16 0 0 60.20888 53.04271 67.37504 51.8619507 0.0157106 28.98225 0.0129009 1.7980602
73.64975 17 0 0 60.39986 53.29141 67.50832 13.2498830 0.0154586 29.10440 0.0008281 0.4593163
0.00000 18 0 0 60.59085 53.53988 67.64183 -60.5908531 0.0152096 28.93451 0.0170302 -2.1001579
80.17728 19 0 0 60.78184 53.78812 67.77556 19.3954362 0.0149636 29.09468 0.0017160 0.6721871
45.20039 20 0 0 60.97283 54.03613 67.90953 -15.7724443 0.0147206 29.10086 0.0011158 -0.5465578

Grafico modelo ITS

dat_its %>%
  ggplot(aes(x = T, y = dengue_cases)) +
  geom_point(alpha = .6) +
  geom_vline(aes(xintercept = 200), linetype = "dashed", col = "red3") +
  geom_line(data = pred, aes(y = .fitted), col = "deepskyblue3") +
  geom_ribbon(data = pred, aes(ymin = .lower, ymax = .upper), 
              fill = "deepskyblue3", alpha = .3) +
  theme_bw()

Grafico contrafactual

conterfactual <- dat_its %>%
  mutate(D = 0,
         P = 0) %>%
  augment(fit, newdata = ., interval = "confidence")

dat_its %>%
  ggplot(aes(x = T, y = dengue_cases)) +
  geom_point(alpha = .6) +
  geom_vline(aes(xintercept = 200), linetype = "dashed", col = "red3") +
  geom_line(data = pred, aes(y = .fitted), col = "deepskyblue3") +
  geom_ribbon(data = pred, aes(ymin = .lower, ymax = .upper), 
              fill = "deepskyblue3", alpha = .3) +
  geom_line(data = conterfactual, aes(y = .fitted), col = "orange2", 
            linetype = "dashed") +
  geom_ribbon(data = conterfactual, aes(ymin = .lower, ymax = .upper), 
              fill = "orange2", alpha = .3) +
  theme_bw()