Tenemos una variable dicotómica D, que puede tomar valores de 0 y 1 y proponemos la hipótesis de que esta variable afecta de alguna manera a nuestra variable de interés Y. Digamos que D_i es la exposición que tuvieron o no las personas a una campaña de marketing. Por lo tanto
La variable $Y_i$ es un indicador de las ventas que se generaron en la empresa en una observación.
Cuando decimos “una observación” es lo mismo a indicar una fila en la tabla. Por eso cuando tenemos $n$ observaciones, se dice que $i = {1,2,…, n}$, puede tomar cualquier valor del 1 a $n$.
Entonces, si deseamos conocer el efecto de nuestra campaña en las ventas, buscamos
Es decir, ¿cuál es el valor promedio de las ventas ceteris paribus, dada la exposición a nuestro anuncio?
El ceteris paribus (dejar todo lo demás constante) lo logramos incluyendo un vector de variables de control, representadas por $X$. Más adelante explicaremos cómo funciona.
También hemos incluido una variable que captura la aleatoriedad.
El modelo lineal
Nuestra mejor opción es comenzar con un modelo lineal como el siguiente:
En esta ecuación incluimos tres letras griegas. Por tradición, las letras griegas suelen representar parámetros, que son lo que deseamos calcular y son las que nos darán la respuesta a nuestras interrogantes.
Los parámetros en este modelo son $\beta_0$ (beta cero) y $\beta_1$ (beta uno). Nuestro objetivo es usar estos dos números para dibujar una línea en el plano cartesiano. Aquí, $\beta_0$ es el intercepto en el origen y $\beta_1$ la pendiente. La línea que dibujemos debería de ser la que mejor describe el comportamiento de nuestros datos.
Pero nuestros datos no vienen de una función matemática. No podemos esperar que se comporten como nuestro modelo dicta. Entonces cualquier línea que tracemos no cae directamente en los puntos. Para solventar este detalle definimos $\varepsilon$ (epsilon), que es un elemento estocástico o aleatorio. También se le conoce como término de error, y ayuda a explicar esa diferencia entre el punto de nuestros datos y la línea de regresión.
Haciendo regresión sobre una muestra
Normalmente los datos que tenemos a nuestra disposición son una muestra de la información existente. Por consecuencia, nuestra estimación no será exactamente aquella que obtendríamos si tuviéramos acceso a todos los datos. Esto es algo que tenemos que aceptar.
Este detalle genera un poco de notación adicional. Usamos el circunflejo para denotar cuando un parámetro viene de una estimación hecha sobre una muestra. Los parámetros de una muestra son entonces $\hat\beta_0$ y $\hat\beta_1$. Otro detalle es que usamos letras minúsculas para denotar cuando una variable es una muestra, por lo que usamos $x$ en lugar de $X$.
El siguiente código genera una base de datos con 10,000 observaciones y corre una regresión sobre ella. Luego genera 1000 simulaciones que toman una muestra de un 5% de los datos, corren una regresión y registran los parámetros. Por el momento no te preocupes por el código y solo correo completo. Más adelante haremos ejercicios de regresión paso a paso.
import numpy as np
import pandas as pd
import statsmodels.api as sm
# Número de simulaciones
num_simulaciones = 1000
# Crear el conjunto de datos completo
n = 10000
X = np.random.normal(0,1,n)
df = pd.DataFrame({"X": X})
df['Y'] = 1 + 2.5 * df['X'] + np.random.normal(0,1.5,n)
# Realizar la regresión en el conjunto de datos completo
X = sm.add_constant(df[['X']])
reg = sm.OLS(df['Y'], X).fit()
params_completo = reg.params
# Crear listas vacías para almacenar los parámetros simulados
params_sim = []
# Realizar las simulaciones
for i in range(num_simulaciones):
# Tomar una muestra de los datos
df_muestra = df.sample(frac=0.05, replace=True)
# Realizar la regresión en la muestra
X_muestra = sm.add_constant(df_muestra[['X']])
reg_muestra = sm.OLS(df_muestra['Y'], X_muestra).fit()
params_sim.append(reg_muestra.params)
# Calcular el promedio de los parámetros simulados
params_promedio = np.mean(params_sim, axis=0)
# Comparar con la regresión del conjunto de datos completo
print("Parámetros del conjunto de datos completo: ", params_completo)
print("Parámetros promedio simulados: ", params_promedio)
Si tomas esta simulación y la corres en python (puedes usar Google colab) observarás que los parámetros que se generan en la regresión con todos los datos son muy similares a la media de las muestras.
Tal vez la simulación individual de una muestra podría acabar un poco alejada de la que generan los datos completos, pero cuando las líneas de regresión se promedian, los parámetros se acercan a la línea de regresión “verdadera”, o bien
La ecuación de arriba se lee como “el valor esperado de los parámetros muestrales se aproxima a los parámetros poblacionales”. Esta afirmación se vuelve verdadera conforme aumenta el número de simulaciones aumenta el tamaño de muestra de las mismas.
De manera más concreta
Es decir, nuestro estimador $\hat\beta$ es una variable aleatoria con distribución normal. Su media es $\beta$ y su desviación estándar es una fracción que depende de la desviación estándar de la población y del tamaño de la muestra.
Entre más grande sea el tamaño de la muestra en comparación con la varianza de la población (que no conocemos, en realidad) más pequeña será la variación de nuestra muestra. Esta recibe el nombre especial de error estándar.
Para comprobarlo puedes jugar con el número de simulaciones (num_simulaciones
) y el tamaño de la muestra df.sample(frac=0.05
. Cambia el valor de las simulaciones a 1
o a 10
y revisa si el resultado de las simulaciones cambia.
Read Marionomics: Economía y Ciencia de Datos in the Substack appAvailable for iOS and AndroidGet the app
Esta simulación particular requiere un número muy bajo de simulaciones o un tamaño muy pequeño demuestra para tener el resultado correcto, pero por lo general se requiere de tamaño de muestra más grande para comenzar a tener confianza en que los resultados sean significativos.