Python: El modelo de Resultados Potenciales
Continuación del proyecto de Econometría con Python. En esta ocasión extendemos nuestro ejemplo y mostramos cómo funciona en Python.
El ejemplo en el post anterior sirve para ilustrar el modelo de resultados potenciales en individuos. Pero lo que en realidad deseamos es obtener conclusiones generales para tomar decisiones. Yo no soy Alicia o Bob, pero quiero saber si debería asistir a la fiesta. Aquí está el post anterior, por si te lo perdiste o quieres usarlo como repaso. También te dejo al final de este post un enlace para el notebook de Google Colab donde puedes correr todo el código, clonar el proyecto y revisar los resultados.
Este tipo de preguntas requieren que hagamos inferencia sobre lo que pasaría si yo fuera. Para eso, podemos estimar lo que se espera que pase con mi calificación si asisto a la fiesta. En otras palabras, queremos conocer el valor esperado del efecto de ir a la fiesta para tomar la decisión de si ir o no.
El principio para entender el modelo de resultados potenciales en un conjunto de datos es el mismo que usamos en la sección anterior, así que podemos comenzar con una extensión de la ecuación que nos muestra el efecto promedio del tratamiento. Veamos nuevamente lo que tenemos. Imagina que en lugar de ver el caso de Alicia y Bob únicamente, tenemos una base de datos de 1000 estudiantes donde indica si asistieron a la fiesta o no (creo que lo deberíamos cambiar a concierto o festival en este punto). La base de datos también nos indica la calificación que se sacaron en econometría.
Veamos cómo se vería esta base de datos creando una simulación en Python. No podemos usar para esto datos reales porque queremos ver los datos contrafactuales que vienen de universos paralelos. Supongamos que la calificación del estudiante $i$ se genera a partir de la siguiente función lineal
De ahí, $\beta_0$ es un parámetro fijo que nos indica para este caso la calificación que el estudiante se sacaría si no fuera a la fiesta y $\varepsilon$ es un término de error estocástico o aleatorio. Es importante incluir este término de error porque bien sabemos que ir a la fiesta no es lo único que puede influir en la calificación de econometría: algunos tendrán mayor calificación que otros.
Un supuesto crítico es que $\varepsilon$ tiene una distribución normal. Esto se representa de la siguiente manera:
Las distribuciones se representan como funciones: con un paréntesis que nos indican sus parámetros. En el caso de la distribución normal nos interesan dos cosas: en dónde está centrada y qué tan dispersa es. El centro de la distribución es el primer parámetro, que hemos definido que debe ser cero para nuestro término de error. El valor de $\sigma^2$ nos indica la varianza o la dispersión de nuestra calificación.
Creando la base de datos
Lo primero que haremos será crear la columna $D_i$ que nos muestra la elección de cada estudiante de manera aleatoria: un 1 significa que si asistieron a la fiesta y un 0 significa que no. También haremos el valor de $\beta_0$ que básicamente es la calificación si deciden no ir a la fiesta.
import numpy as np
np.random.seed(42)
n = 1000 # Determinamos el número de observaciones de nuestra base de datos
b0 = np.random.choice([6,7,8,9],n)
Haremos un poco de trampa a continuación. Vamos a crear nuestra base de datos y vamos a crear el valor de $D_i$. Pero aquí está el secreto: este valor va a depender de $\beta_0$.
Esto refleja una situación parecida a la que encontramos en el modelo individual. Las personas que tienen mayor calificación son las que están más dispuestas a asistir a la fiesta si piensan que no les va a afectar de manera significativa. En el siguiente bloque de código crearemos nuestra base de datos en pandas
y generaremos la columna $D_i$ conforme a la regla que establecimos arriba.
import pandas as pd
df = pd.DataFrame({"b0":b0})
df['Di'] = np.where(df['b0']>7,1,0)
Y aquí llega el momento de la verdad. Vamos a crear nuestra variable $Y$, que contiene las calificaciones de los alumnos. Digamos que el efecto real de asistir a la fiesta es de $\delta = -1$, por lo que al crear la variable en python tendremos como resultado
df['e'] = np.random.normal(0,1,1000)
df['Y'] = df['b0'] + (-1)*df['Di'] + df['e']
Esta es la razón por la que estamos haciendo los datos por medio de una simulación. En la realidad $\delta$ es un parámetro de nuestro modelo que tenemos que estimar, no lo conocemos realmente hasta que hacemos el proceso de inferencia. El resultado de $Y$ contiene nuestro error aleatorio $\varepsilon$, que tiene una desviación estándar de 1.
Continúa leyendo con una prueba gratuita de 7 días
Suscríbete a Marionomics: Economía y Ciencia de Datos para seguir leyendo este post y obtener 7 días de acceso gratis al archivo completo de posts.