paquete tidysynth - RDocumentation (2023)

Descripción general

tidysynthes una implementación ordenada lamétodo de control sintéticoenR.Un control sintético ofrece una forma de evaluar el efecto de una intervención en estudios de casos comparativos. El método tiene como objetivo modelar una unidad contrafáctica utilizando un promedio ponderado de unidades que no recibieron la intervención. El efecto de la intervención se puede estimar comparando las diferencias en las series de tiempo observadas y sintéticas. Consulte Abadie et al.2003, 2010, 2015 para obtener más información sobre el método y los casos de uso.

Construyendo sobre elsintetizadorpaquete,tidysynthrealiza una serie de mejoras al implementar el método enR. Estas mejoras permiten a los usuarios inspeccionar, visualizar y ajustar el control sintético con mayor facilidad. Un beneficio clave de una implementación ordenada es que todo el proceso de preparación para construir el control sintético se puede realizar en una sola canalización.

En concreto, el paquete:

  • genera controles sintéticos de placebo sobre la marcha que permiten estadísticas inferenciales;
  • ofrece métodos de trazado para explorar fácilmente el ajuste del control sintético y los pesos;
  • aumenta la transparencia y la facilidad de uso a través de una implementación de pipe-able;
  • se basa en una estructura de datos ordenada anidada conagarrar_funciones de prefijo para extraer fácilmente los elementos componentes de la canalización de control sintético.

Instalación

Crán.

install.packages('tidysynth')

Versión de desarrollador.

# install.packages("devtools")devtools::install_github("edunford/tidysynth")

Uso

El paquete utiliza una canalización de funciones para generar el control sintético.

FunciónDescripción
control_sintetico()Inicialice una canalización de sintetizador especificando la serie de paneles, el resultado y el período de intervención. Esta canalización funciona como un canal anidadotbl_df
generar_predictor()Cree una o más variables escalares que resuman los datos de covariables en una ventana de tiempo específica. Estas variables predictoras se utilizan para ajustar el control sintético.
generar_pesos()Ajuste los pesos unitarios y predictores utilizados para generar el control sintético.
generar_control()Genere el control sintético utilizando los pesos optimizados.

El siguiente ejemplo proviene de Abadie et al.2010, que evalúa el impacto de la Proposición 99 sobre el consumo de cigarrillos en California.

require(tidysynth)data("fumar")fumar %>% dplyr::glimpse()
## Filas: 1,209## Columnas: 7## $ estado  "Rhode Island", "Tennessee", "Indiana", "Nevada", "Louisiana…## $ año  1970, 1970, 1970, $ lngreso  NA , NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …## $ cerveza  NA, NA, NA, NA, NA, NA, NA, NA , NA, NA, NA, NA, NA, …## $ age15to24  0.1831579, 0.1780438, 0.1765159, 0.1615542, 0.1851852, 0.175…## $ retprice  39.3, 39.9, 30.6, 38 .9 , 34.3, 38.4, 31.4, 37.3, 36.7, 28.8, …

El método tiene como objetivo generar una California sintética utilizando información de un subconjunto de estados de control (el "grupo de donantes") donde se aplicó una ley similar.noimplementado. El grupo de donantes es el subconjunto de comparaciones de casos del que se toma prestada la información para generar una versión sintética de la unidad tratada ("California").

smoking_out <- smoking %>% # inicial del objeto de control sintético synthetic_control(outcome = cigsale, # resultado unidad = estado, # índice de unidad en los datos del panel tiempo = año, # índice de tiempo en los datos del panel i_unit = "California", # unidad donde ocurrió la intervención i_time = 1988, # período de tiempo cuando ocurrió la intervención generar_placebos=T # generar controles sintéticos de placebo (para inferencia) ) %>% # Generar los predictores agregados utilizados para ajustar las ponderaciones # ingresos logarítmicos promedio, precio minorista de cigarrillos y proporción de la # población entre 15 y 24 años de edad entre 1980 y 1988 T), jóvenes = media (de 15 a 24 años, na.rm = T)) %>% # consumo promedio de cerveza en el grupo de donantes de 1984 a 1988 )) %>% # Ventas de cigarrillos rezagadas generate_predictor(time_window = 1975, cigsale_1975 = cigsale) %>% generate_predictor(time_window = 1980, cigsale_1980 = cigsale) %>% generate_predictor(time_window = 1988, cigsale_1988 = cigsale) %>% # Generate los pesos ajustados para el control sintético generate_weights(optimization_window = 1970:1988, # tiempo de uso en la tarea de optimización margin_ipop = .02,sigf_ipop = 7,bound_ipop = 6 # opciones del optimizador) %>% # Generar el control sintético generate_control()

Una vez que se genera el control sintético, se puede evaluar fácilmente el ajuste comparando las tendencias de las series de tiempo sintéticas y observadas. La idea es que las tendencias en el período previo a la intervención se correspondan estrechamente entre sí.

fumar_out %>% plot_trends()

Para capturar la cantidad causal (es decir, la diferencia entre lo observado y lo contrafáctico), se pueden trazar las diferencias usandotrazar_diferencias()

fumar_out %>% plot_differences()

Además, uno puede examinar fácilmente la ponderación de las unidades y variables en el ajuste. Esto permite ver qué casos se utilizaron, en parte, para generar el control sintético.

fumar_out %>% plot_weights()

Otra forma útil de evaluar el control sintético es observar qué tan comparable es el control sintético con las covariables observadas de la unidad tratada.

fumar_out %>% grab_balance_table()
## # A tibble: 7 × 4## variable California synthetic_Californiadonante_sample##    ## 1 ln_income 10.1 9.85 9.83 ## 2 ret_price 89.4 89.4 87.3 ## 3 jóvenes 0.174 0.174 0.173 ## 4 venta_cerveza 24.3 24.2 23.7 ## 5 venta_cig_1975 127. 127. 137. ## ​​6 venta_cig_1980 120. 120. 138. ## 7 venta_cig_1988 90.1 91.4 114.

Inferencia

Para la inferencia, el método se basa en repetir el método para cada donante en el grupo de donantes exactamente como se hizo para la unidad tratada, es decir, generarplacebocontroles sintéticos). Configurandogenerar_placebos = VERDADEROal inicializar la canalización del sintetizador concontrol_sintetico(), los casos de placebo se generan automáticamente al construir el control sintético de interés. Esto facilita la exploración de la diferencia única entre la unidad observada y la sintética en comparación con los placebos.

fumar_out %>% plot_placebos()

Tenga en cuenta que eltrama_placebos()La función elimina automáticamente cualquier placebo que se ajuste mal a los datos en el período previo a la intervención. La razón para hacerlo es puramente visual: esas unidades tienden a desviarse de la escala cuando se grafican los placebos. Para podar, la función analiza el error de predicción cuadrático medio (MSPE) del período previo a la intervención (es decir, una métrica que refleja qué tan bien el control sintético se asigna a la serie temporal de resultados observados en el período previo a la intervención). Si un control de placebo tiene un MSPE que es dos veces mayor que el caso objetivo (por ejemplo, "California"), entonces se elimina. Para desactivar este comportamiento, configureciruela = FALSO.

fumar_fuera %>% plot_placebos(ciruela pasa = FALSO)

Finalmente, Adabie et al.2010 describen una forma de construir los valores P exactos de Fisher dividiendo el MSPE posterior a la intervención por el MSPE previo a la intervención y luego clasificando todos los casos por esta proporción en orden descendente. Luego, el valor de Ap se construye tomando el rango/total.[^1] La idea es que si el control sintético se ajusta bien a la serie de tiempo observada (MSPE bajo en el período previo) y diverge en el período posterior (MSPE alto en el período posterior). -período) entonces hay un efecto significativo debido a la intervención. Si la intervención no tuvo ningún efecto, entonces el post-período y el pre-período deberían continuar mapeándose entre sí bastante bien, produciendo una proporción cercana a 1. Si las unidades de placebo se ajustan a los datos de manera similar, entonces no podemos rechazar la hipótesis del casco de que no hay ningún efecto provocado por la intervención.

Esta relación se puede trazar fácilmente usandoplot_mspe_ratio(), ofreciendo una idea de la rareza del caso en el que realmente ocurrió la intervención.

fumar_fuera %>% plot_mspe_ratio()

Para obtener información más específica, hay una tabla de significado que se puede extraer con uno de los muchosagarrar_funciones de prefijo

fumar_fuera %>% grab_significance()
## # A tibble: 39 × 8## nombre_unidad tipo pre_mspe post_mspe mspe_ratio rango fishers_exact_pvalue##       ## 1 Tratado de California… 3.17 392. 124. 1 0.0256## 2 Georgia Donante 3.79 179. 47.2 2 0.0513## 3 Indiana Donante 25.2 770. 30.6 3 0.0769## 4 West Virginia Donante 9.52 284. 29.8 4 0.103 ## 5 Wisconsin Donante 11.1 26 8. 24.1 5 0.128 # # 6 Donante de Missouri 3.03 67.8 22.4 6 0.154 ## 7 Donante de Texas 14.4 277. 19.3 7 0.179 ## 8 Donante de Carolina del Sur 12.6 234. 18.6 8 0.205 ## 9 Donante de Virginia 9.81 96.4 9.83 9 0.231 ## 10 Nebraska Donante 6.30 52.9 8.40 10 0.256 ## # ℹ 29 filas más## # ℹ 1 variable más: z_score 

Acceso a datos

Además de la canalización de datos principal para generar el control sintético y eltrama_funciones de prefijo para visualizar la salida, hay una serie deagarrar_funciones de prefijo que ofrecen fácil acceso a los datos contenidos dentro de un objeto de tubería de sintetizador.

En esencia, una canalización de sintetizador es simplemente un marco de datos tibble anidado, donde se puede acceder a cada componente de la canalización de control sintético.

fumar_fuera
## # Un tibble: 78 × 11## .id .placebo .type .outcome .predictors .synthetic_control .unit_weights##        ## 1 Califor… 0 trea…     ## 2 Califor… 0 cont…     ## 3 Alabama 1 trat…     ## 4 Alabama 1 cont…     ## 5 Arkansas 1 tratamiento...     ## 6 Arkansas 1 cont...     ## 7 Colorado 1 tratamiento …     ## 8 Colorado 1 cont…     ## 9 Connect… 1 tra…     ## 10 Conectar… 1 continuación…     ## # ℹ 68 filas más# # # ℹ 4 variables más: .predictor_weights , .original_data ,## # .meta , .loss 

Para acceder a los campos de datos relevantes, elagarrar_funciones de prefijo entran en juego.

FunciónDescripción
agarrar_resultado()Extraiga la variable de resultado generada porcontrol_sintetico().
grab_predictores()Extraiga las covariables a nivel agregado generadas porgenerar_predictor().
grab_unit_weights()Extraer los pesos unitarios generados porgenerar_pesos().
agarrar_predictor_pesos()Extraiga los pesos de las variables predictoras generados porgenerar_pesos().
grab_loss()Extraiga la pérdida de RMSE de los pesos optimizados generados porgenerar_pesos().
grab_synthetic_control()Extraiga el control sintético generado usandogenerar_control().
agarrar_significado()Genere estadísticas inferenciales que comparen la rareza de la unidad que realmente recibió la intervención con las unidades de placebo en el grupo de donantes.
grab_balance_table()Compare las distribuciones de los predictores de nivel agregado para la unidad de intervención observada, el control sintético y el promedio del grupo de donantes.
fumar_fuera %>% grab_synthetic_control()
## # A tibble: 31 × 3## time_unit real_y synth_y##   ## 1 1970 123 117.## 2 1971 121 119.## 3 1972 124. 124.## 4 1973 124. 125.## 5 1974 127. 127.## 6 1975 127. 127.## 7 1976 128 128.## 8 1977 126. 126.## 9 1978 126. 125.## 10 1979 12 2. 123.## # ℹ 21 filas más

Tenga en cuenta que la mayoría de losagarrar_Las funciones también permiten la extracción de unidades de placebo.

fumar_fuera %>% grab_synthetic_control(placebo = T)
## # A tibble: 1,209 × 5## .id .placebo time_unit real_y synth_y##     ## 1 California 0 1970 123 117.## 2 California 0 1971 121 119.## 3 California 0 1972 124. 124.## 4 California 0 1973 124. 125.## 5 California 0 1974 127. 127.## 6 California 0 1975 127. 127.## 7 California 0 1976 128 128.## 8 California 0 1977 126. 126.## 9 California 0 1978 126. 125.## 10 California 0 1979 122. 123.## # ℹ 1199 filas más

Pero di que realmente quierodesear()

En la implementación actual, puede desempaquetar una tubería de sintetizador completa usandodesear(). Elagarrar_La función está destinada a optimizar cualquier necesidad de extracción específica. Todo el método se basa en la infraestructura de atidyverse, por lo que uno puede eludir la mayor parte de la funcionalidad del paquete e interactuar con la salida de la canalización del sintetizador como lo haría con cualquier anidado.tbl_dfobjeto.

fumar_fuera %>% tidyr::unnest(cols = c(.resultado))
## # Un tibble: 1,482 × 50## .id .placebo .type time_unit California Alabama Arkansas Colorado##        ## 1 California 0 tratado 1970 123 NA NA NA## 2 California 0 tratado 1971 121 NA NA NA## 3 California 0 tratado 1972 124. NA NA NA## 4 California 0 tratado 1973 124. NA NA NA## 5 California 0 tratado 1974 127. NA NA NA## 6 California 0 tratados 1975 127. NA NA NA## 7 California 0 tratados 1976 128 NA NA NA## 8 California 0 tratados 1977 126. NA NA NA## 9 California 0 tratados 1978 126. NA NA NA## 10 California 0 tratados 1979 122. NA NA NA## # ℹ 1,472 filas más## # ℹ 42 variables más: Connecticut , Delaware , Georgia ,## # Idaho < dbl>, Illinois , Indiana , Iowa , Kansas ,## # Kentucky , Luisiana , Maine , Minnesota ,## # Mississippi , Misuri , Montana , Nebraska ,## # Nevada , `Nuevo Hampshire` , `Nuevo México` ,## # `Carolina del Norte` , `Dakota del Norte` , Ohio , Oklahoma , …

depuración

¿Detectar un problema? Por favor, hágamelo saber mediante la publicación de un problema.

[^1]: tenga en cuenta que esto implica que necesitaría al menos 20 casos en el grupo de donantes para obtener un valor p convencional (.05).

Top Articles
Latest Posts
Article information

Author: Nicola Considine CPA

Last Updated: 05/21/2023

Views: 5243

Rating: 4.9 / 5 (49 voted)

Reviews: 88% of readers found this page helpful

Author information

Name: Nicola Considine CPA

Birthday: 1993-02-26

Address: 3809 Clinton Inlet, East Aleisha, UT 46318-2392

Phone: +2681424145499

Job: Government Technician

Hobby: Calligraphy, Lego building, Worldbuilding, Shooting, Bird watching, Shopping, Cooking

Introduction: My name is Nicola Considine CPA, I am a determined, witty, powerful, brainy, open, smiling, proud person who loves writing and wants to share my knowledge and understanding with you.