Tutorial: Diferencias en Diferencias básico en R

Código para obtener un análisis de diferencias de medias convincente

Tutorial: Diferencias en Diferencias básico en R

Imagina que deseas conocer el efecto de una política pública en la población.

Siempre que sea posible, lo mejor que puedes hacer es hacer un experimento. Pero hay dos problemas:

  1. Los experimentos son caros y difíciles de implementar, pues implican tener un control sobre todas las variables que podrían alterar el resultado.
  2. Los resultados de un experimento rara vez son escalables a nivel de una población.

Para colmo, de cualquier manera tendrás que evaluar la efectividad de la política cuando se hace a nivel de una población.

En este post haremos un tutorial para aplicar el modelo de Diferencias en Diferencias usando R.

El ejemplo que usaremos para este tutorial lo puedes encontrar también en el libro Doing Economics del Core Project. Se trata sobre los efectos de un impuesto a las bebidas azucaradas.

Los economistas no prohibimos, le ponemos impuestos a las cosas

A finales de 2014, la ciudad de Berkeley, California votó que le pusieran un nuevo impuesto a las bebidas azucaradas.

El objetivo del impuesto era disminuir el consumo de bebidas que sabemos tienen efectos negativos en la salud de la población. Cuando queremos hacer que el compotamiento de las personas cambie, no ponemos leyes para prohibirlas, les subimos los impuestos con la esperanza de que el aumento de precio haga su trabajo.

Se le llaman impuestos al pecado.

Hay muchos ejemplos de este tipo de impuestos. Hay impuesto a los autos para reducir la contaminación. Impuesto al alcohol y al tabaco, porque también tienen efectos en la salud. Y naturalmente, impuestos a las bebidas azucaradas. Casi todos los países tienen algún impuesto de este tipo, en parte porque es relativamente fácil de aprobar (no siempre tan fácil de implementar).

Para saber si el impuesto funcionó, necesitamos conocer tres cosas

  1. Si el aumento de los impuestos hizo que los precios subieran. En ocasiones, los precios no se trasladan al consumidor. Las empresas prefieren absorberlo, haciendo que el impuesto no tenga efecto sobre el comportamiento de los consumidores.
  2. Si los precios subieron, queremos saber si los usuarios redujeron su consumo y qué tanto. En lenguaje de economistas, queremos conocer la elasticidad de los precios.
  3. Si los consumidores dejaron de tomar estas bebidas, queremos saber si su salud mejoró.

En este tutorial nos quedaremos con el análisis del primer punto.

Paso #1: Descarga y explora la base de datos

Te dejo la base de datos en el siguiente enlace.

Dataset Project 3.xlsx

Usa el siguiente código para cargar la base de datos y mostrar su estructura.

# Cargar las bibliotecas necesarias
library(readxl)
library(dplyr)

# Definir la ruta del archivo
file_path <- "data/Dataset Project 3.xlsx"

# Cargar la hoja del diccionario de datos
data_dictionary <- read_excel(file_path, sheet = "Data Dictionary")

# Cargar la hoja de datos y mostrar las primeras filas
df <- read_excel(file_path, sheet = "Data")

# Imprimir el diccionario de datos y el encabezado de los datos
print("Data Dictionary:")  # Imprimir el diccionario de datos
print(data_dictionary)

print("Data Header:")  # Imprimir el encabezado (primeras filas) de los datos
head(df)  # Mostrar las primeras filas del conjunto de datos

Alternativamente, puedes usar las funciones de RStudio para cargarlo de manera manual. Si tienes dudas, consulta este curso gratuito que tengo en mi página.

Nota que:

  • La variable taxed es una variable dummy con valores de 0 y 1. Cuando taxed es igual a 1, significa que el producto si es sujeto a impuesto. Incluso aunque en el periodo del registro sea antes de la implementación.
  • El tipo de tienda se muestra en store_type. Hay 4 tipos de tiendas de las que se recolectó la información: Supermercados grandes, supermercados pequeños, farmacias y estaciones de gas.
  • La variable time muestra el momento en que se recolectó el dato. De acuerdo al paper original, los datos se tomaron en Diciembre de 2014, en Marzo de 2015 y en Junio de 2016.
unique(df$time)
  • Los productos y las tiendas se registran por un identificador que se muestra en las variables store_id y product_id. También tenemos un poco más de detalles del tipo de producto detallado en type y type2.

Usa este código y nota que los registros no están balanceados (y también que Junio de 2016 está mal registrado). Esto quiere decir que hay productos que tal vez se registraron antes del impuesto y que desaparecieron después de él. O al contrario, podrían haber productos que aparecieron después del impuesto.

Usa este código para mostrar una tabla de frecuencia que muestra las observaciones por fecha y por tipo de tienda.

# Crear una tabla de contingencia con store_type y time
summary_table <- table(df$store_type, df$time)

# Convertir la tabla a data frame para añadir la columna de Total
summary_table_df <- as.data.frame.matrix(summary_table)

# Añadir una columna 'Total' que suma los valores de cada fila
summary_table_df$Total <- rowSums(summary_table_df)

# Añadir una fila 'Total' que suma todas las filas
summary_table_df["Total", ] <- colSums(summary_table_df)

# Mostrar la tabla resumen
print(summary_table_df)

Medias condicionales

Esta es la versión más sencilla de un modelo de diferencias en diferencias.

Se trata de identificar las medias condicionales de los grupos tratados y sin tratamiento antes y después de la intervención. La idea es que el grupo que no fue tratado funcione como grupo de control en un experimento.

Para que un grupo se pueda considerar de control, las circunstancias del evento tienen que ser muy especiales.

  • Tiene que ser muy similar al grupo de tratamiento. En el caso de este impuesto, estamos comparando los productos que están en la misma tienda y que aparecen en los mismos periodos.
  • Las circunstancias no deben de dar tiempo para sospechar de algún sesgo de selección. Generalmente, los mejores “experimentos naturales” ocurren de repente. Un accidente natural, o una implementación repentina son ideales, porque no dan tiempo para adaptarse.

Comencemos modificando los datos un poco para cumplir con estos puntos.

¡Genial! Te has registrado exitosamente.

¡Bienvenido de vuelta! Has iniciado sesión correctamente.

Te has suscrito correctamente a Escribe tu primer paper de Economía usando Inteligencia Artificial.

¡Éxito! Revisa tu correo electrónico para obtener el enlace mágico para iniciar sesión.

¡Éxito! Se ha actualizado la información de facturación.

No se actualizó tu información de facturación.