Si ha estudiado la inferencia causal antes, probablemente ya tenga una idea sólida de los fundamentos, como el marco de resultados potenciales, el emparejamiento del puntaje de propensión y las diferencias en diferencias básicas. Sin embargo, los métodos fundamentales a menudo fracasan cuando se trata de desafíos del mundo real. A veces, los factores de confusión no se miden, los tratamientos se implementan en diferentes momentos o los efectos varían entre una población.
Este artículo está dirigido a personas que tienen un conocimiento sólido de los fundamentos y ahora buscan ampliar su conjunto de habilidades con técnicas más avanzadas. Para que las cosas sean más identificables y tangibles, utilizaremos un escenario recurrente como estudio de caso para evaluar si un programa de capacitación laboral tiene un impacto positivo en los ingresos. Esta cuestión clásica de causalidad es particularmente adecuada para nuestros propósitos, ya que está plagada de complejidades que surgen en situaciones del mundo real, como la autoselección, la capacidad no medida y los efectos dinámicos, lo que la convierte en un caso de prueba ideal para los métodos avanzados que exploraremos.
"El aspecto más importante de un análisis estadístico no es lo que se hace con los datos, sino qué datos se utilizan y cómo se recopilaron".
— Andrew Gelman, Jennifer Hill y Aki Vehtari, Regresión y otras historias
Contenido
Introducción
1. Estimación doblemente sólida: seguro contra especificaciones erróneas
2. Variables instrumentales: cuando los factores de confusión no se miden
3. Discontinuidad de la regresión: el cuasiexperimento creíble
4. Diferencias en diferencias: navegando por la adopción escalonada
5. Efectos heterogéneos del tratamiento: ir más allá del promedio
6. Análisis de sensibilidad: la caja de herramientas del investigador honesto
Poniéndolo todo junto: un marco de decisión
Pensamientos finales
Parte 1: Estimación doblemente robusta
Imaginemos que estamos evaluando un programa de capacitación en el que los participantes seleccionan por sí mismos su tratamiento. Para estimar su efecto sobre sus ingresos, debemos tener en cuenta factores de confusión como la edad y la educación. Tradicionalmente, tenemos dos caminos: regresión de resultados (modelando los ingresos) o ponderación del puntaje de propensión (modelando la probabilidad de tratamiento). Ambos caminos comparten una vulnerabilidad crítica, es decir, si especificamos nuestro modelo incorrectamente, por ejemplo, olvidamos una interacción o especificamos mal una forma funcional, nuestra estimación del efecto del tratamiento estará sesgada. Ahora, la estimación doblemente robusta (DR), también conocida como ponderación de probabilidad inversa aumentada (AIPW), combina ambas para ofrecer una solución poderosa. Nuestra estimación será consistente si el modelo de resultados o el modelo de propensión se especifican correctamente. Utiliza el modelo de propensión para crear equilibrio, mientras que el modelo de resultados elimina el desequilibrio residual. Si un modelo está equivocado, el otro lo corrige.
En la práctica, esto implica tres pasos:
Modele el resultado: ajuste dos modelos de regresión separados (p. ej., regresión lineal, modelos de aprendizaje automático) para predecir el resultado (ingresos) a partir de las covariables. Un modelo se entrena solo en el grupo tratado para predecir el resultado μ^1(X), y otro se entrena solo en el grupo no tratado para predecir μ^0(X). Tratamiento del modelo: ajuste un modelo de clasificación (p. ej., regresión logística, aumento de gradiente) para estimar la puntuación de propensión o la probabilidad de cada individuo de inscribirse en el programa, π^(X)=P(T=1∣X). Aquí, π^(X) es la puntuación de propensión. Para cada persona, es un número entre 0 y 1 que representa su probabilidad estimada de unirse al programa de capacitación, en función de sus características, y la X simboliza la covariable. Combinar: conecte estas predicciones al estimador de ponderación de probabilidad inversa aumentada. Esta fórmula combina inteligentemente las predicciones de regresión con los residuos ponderados de propensión inversa para crear una estimación final doblemente sólida del efecto promedio del tratamiento (ATE).
Aquí está el código para una implementación simple en Python:
importar numpy como np desde sklearn.ensemble importar GradientBoostingClassifier, GradientBoostingRegressor desde sklearn.model_selection importar KFold def doubly_robust_ate(Y, T, X, n_folds=5): n = len(Y) e = np.zeros(n) # puntuaciones de propensión mu1 = np.zeros(n) # E[Y|X,T=1] mu0 = np.zeros(n) # E[Y|X,T=0] kf = KFold(n_folds, shuffle=True, random_state=42) para train_idx, test_idx en kf.split(X): X_tr, X_te = X[train_idx], X[test_idx] T_tr, T_te = T[train_idx], T[test_idx] Y_tr = Y[train_idx] # Modelo de propensión ps = GradientBoostingClassifier(n_estimators=200) ps.fit(X_tr, T_tr) e[test_idx] = ps.predict_proba(X_te)[:, 1] # Modelos de resultados (se ajustan solo a los grupos apropiados) mu1_model = GradientBoostingRegressor(n_estimators=200) mu1_model.fit(X_tr[T_tr==1], Y_tr[T_tr==1]) mu1[test_idx] = mu1_model.predict(X_te) mu0_model = GradientBoostingRegressor(n_estimators=200) mu0_model.fit(X_tr[T_tr==0], Y_tr[T_tr==0]) mu0[test_idx] = mu0_model.predict(X_te) # Recortar propensiones extremas e = np.clip(e, 0.05, 0.95) # Estimador AIPW tratado_term = mu1 + T * (Y – mu1) / e control_term = mu0 + (1 – T) * (Y – mu0) / (1 – e) ate = np.mean(treatment_term – control_term) # Error estándar a través de la función de influencia influencia = (tratado_term – control_term) – ate se = np.std(influence, ddof=1) / np.sqrt(n) return ate, se
Cuando se queda corto: La propiedad DR protege contra errores de especificación de forma funcional, pero no puede proteger contra confusión no medida. Si en ambos modelos falta un factor de confusión clave, nuestra estimación sigue estando sesgada. Esta es una limitación fundamental de todos los métodos que se basan en el supuesto de selección de observables, lo que nos lleva directamente a nuestro siguiente método.
Parte 2: Variables instrumentales
A veces, ningún ajuste de covariables puede salvarnos. Considere el desafío de la capacidad desmedida. Las personas que se inscriben voluntariamente en capacitación laboral probablemente estén más motivadas y sean más capaces que aquellas que no lo hacen. Estos rasgos afectan directamente los ingresos, creando confusión que ningún conjunto de covariables observadas puede captar por completo.
Ahora supongamos que el programa de capacitación envía anuncios publicitarios promocionales a hogares seleccionados al azar para fomentar la inscripción. No todos los que reciben un correo se inscriben y algunas personas se inscriben sin recibirlo. Pero el envío publicitario crea una variación exógena en la matrícula, que no está relacionada con la capacidad o la motivación.
Este correo es nuestro instrumento. Su efecto sobre las ganancias fluye enteramente a través de su efecto sobre la participación en el programa. Podemos utilizar esta variación limpia para estimar el impacto causal del programa.
La idea central: las variables instrumentales (IV) explotan la poderosa idea de encontrar algo que impulse a las personas hacia el tratamiento pero que no tenga un efecto directo sobre el resultado excepto a través de ese tratamiento. Este “instrumento” proporciona variación en el tratamiento libre de factores de confusión.
Los tres requisitos: Para que un instrumento Z sea válido, deben cumplirse tres condiciones:
Relevancia: Z debe afectar el tratamiento (una regla general común es una estadística F de primera etapa > 10). Restricción de exclusión: Z afecta el resultado sólo a través del tratamiento. Independencia: Z no está relacionado con factores de confusión no medidos.
Las condiciones 2 y 3 son fundamentalmente no comprobables y requieren un conocimiento profundo del dominio.
Mínimos cuadrados de dos etapas: el estimador común, mínimos cuadrados de dos etapas (2SLS), se utiliza para estimar IV. Aísla la variación en el tratamiento impulsada por el instrumento para estimar el efecto. Como sugiere el nombre, funciona en dos etapas:
Primera etapa: tratamiento de regresión en el instrumento (y cualquier control). Esto aísla la porción de variación del tratamiento impulsada por el instrumento. Segunda etapa: hacer una regresión del resultado del tratamiento previsto desde la etapa uno. Debido a que el tratamiento previsto sólo refleja la variación impulsada por los instrumentos, el coeficiente de la segunda etapa captura el efecto causal para los cumplidores.
Aquí hay una implementación simple en Python:
importar pandas como pd importar statsmodels.formula.api como smf desde linearmodels.iv importar IV2SLS # Supongamos que 'datos' es un DataFrame de pandas con columnas: # ganancias, entrenamiento (endógeno), correo (instrumento), edad, educación # —- 1. Verifique la potencia del instrumento (primera etapa) —- first_stage = smf.ols('training ~ mailer + age + education', data=data).fit() # Para un solo instrumento, la estadística t en 'mailer' prueba la relevancia t_stat = first_stage.tvalues['mailer'] f_stat = t_stat ** 2 print(f"Estadística F de primera etapa en el instrumento: {f_stat:.1f} (t = {t_stat:.2f})") # Regla general: F > 10 indica un instrumento fuerte # —- 2. Mínimos cuadrados de dos etapas —- # Sintaxis de la fórmula: resultado ~ exógeno + [endógeno ~ instrumento] iv_formula = 'ganancias ~ 1 + edad + educación + [capacitación ~ correo]' iv_result = IV2SLS.from_formula(iv_formula, data=data).fit() # Mostrar resultados clave print("nIV Estimates (2SLS)") print(f"Coeficiente de capacitación: {iv_result.params['training']:.3f}") print(f"Error estándar: {iv_result.std_errors['training']:.3f}") print(f"95% CI: {iv_result.conf_int().loc['training'].values}") # Opcional: resumen completo # print(iv_result.summary)
La trampa de la interpretación: TARDE versus ATE: Un matiz clave de la vía intravenosa es que no estima el efecto del tratamiento para todos. Estima el efecto de tratamiento promedio local (LATE), es decir, el efecto para los cumplidores. Estos son los individuos que reciben el tratamiento sólo porque recibieron el instrumento. En nuestro ejemplo, los cumplidores son personas que se inscriben porque recibieron el correo. No aprendemos nada sobre los “siempre interesados” (inscribirse independientemente) o los “nunca interesados” (nunca inscribirse). Este es un contexto esencial a la hora de interpretar los resultados.
Parte 3: Discontinuidad de regresión (RD)
Ahora, imaginemos que el programa de capacitación laboral se ofrece sólo a trabajadores que obtuvieron una puntuación inferior a 70 en una evaluación de habilidades. Un trabajador con una puntuación de 69,5 es esencialmente idéntico a uno con una puntuación de 70,5. La pequeña diferencia en la puntuación es prácticamente un ruido aleatorio. Sin embargo, uno recibe capacitación y el otro no.
Al comparar los resultados de las personas justo por debajo del límite (que recibieron capacitación) con aquellas justo por encima (que no lo hicieron), nos aproximamos a un experimento aleatorio en las proximidades del umbral. Se trata de un diseño de regresión discontinua (DR) y proporciona estimaciones causales que rivalizan con la credibilidad de los ensayos controlados aleatorios reales.
A diferencia de la mayoría de los métodos de observación, la RD permite realizar comprobaciones diagnósticas potentes:
La prueba de densidad: si las personas pueden manipular su puntuación para situarse justo por debajo del límite, los que están justo debajo diferirán sistemáticamente de los que están justo encima. Podemos verificar esto trazando la densidad de la variable en ejecución alrededor del umbral. Una densidad suave respalda el diseño, mientras que un pico sospechoso justo debajo del límite sugiere juegos. Continuidad de la covariable: las características previas al tratamiento deben ser uniformes hasta el límite. Si la edad, la educación u otras covariables saltan discontinuamente en el umbral, algo más que el tratamiento está cambiando y nuestra estimación de RD no es confiable. Probamos esto formalmente comprobando si las propias covariables muestran una discontinuidad en el punto de corte.
El dilema del ancho de banda: el diseño de RD enfrenta un dilema inherente:
Ancho de banda estrecho (observando sólo puntuaciones muy cercanas al límite): esto es más creíble, porque las personas son verdaderamente comparables, pero menos preciso, porque utilizamos menos observaciones. Amplio ancho de banda (incluidas puntuaciones más alejadas del límite): esto es más preciso, porque tenemos más datos; sin embargo, también es más riesgoso, porque las personas que están lejos del límite pueden diferir sistemáticamente.
La práctica moderna utiliza métodos de selección de ancho de banda basados en datos desarrollados por Calonico, Cattaneo y Titiunik, que formalizan esta compensación. Pero la regla de oro es comprobar siempre que nuestras conclusiones no cambian cuando ajustamos el ancho de banda.
Modelado de RD: en la práctica, ajustamos regresiones lineales locales separadas a cada lado del límite y ponderamos las observaciones según su distancia desde el umbral. Esto da más peso a las observaciones más cercanas al límite, donde la comparabilidad es mayor. El efecto del tratamiento es la diferencia entre las dos líneas de regresión en el punto de corte.
Aquí hay una implementación simple en Python:
from rdrobust import rdrobust # Estimación del ancho de banda predeterminado (óptimo) result = rdrobust(y=data['earnings'], x=data['score'], c=70) print(result.summary()) # Análisis de sensibilidad sobre anchos de banda fijos para bw en [3, 5, 7, 10]: r = rdrobust(y=data['earnings'], x=data['score'], c=70, h=bw) #Utilice índices enteros: 0 = convencional, 1 = corregido por sesgo, 2 = robusto eff = r.coef[0]ci_low, ci_high = r.ci[0, :] print(f"Ancho de banda={bw}: Efecto={eff:.2f}, " f"95% CI=[{ci_low:.2f}, {ci_high:.2f}]")
Parte 4: Diferencias en diferencias
Si ha estudiado la inferencia causal, probablemente se haya encontrado con el método básico de diferencias en diferencias (DiD), que compara el cambio en los resultados de un grupo tratado antes y después del tratamiento, resta el cambio correspondiente para un grupo de control y atribuye la diferencia restante al tratamiento. La lógica es intuitiva y poderosa. Pero en los últimos años, los investigadores metodológicos han descubierto un problema grave que ha planteado varias preguntas.
El problema de la adopción escalonada: en el mundo real, los tratamientos rara vez se inician en un solo momento para un solo grupo. Nuestro programa de capacitación laboral podría implementarse ciudad por ciudad durante varios años. El enfoque estándar, que consiste en incluir todos nuestros datos en una regresión de efectos fijos bidireccionales (TWFE) con efectos fijos unitarios y temporales, parece natural, pero puede ser potencialmente muy erróneo.
El problema, formalizado por Goodman-Bacon (2021), es que con tiempos de tratamiento escalonados y efectos heterogéneos, el estimador TWFE no produce un promedio ponderado limpio de los efectos del tratamiento. En cambio, hace comparaciones que pueden incluir unidades ya tratadas como controles para unidades tratadas posteriormente. Imagine que la ciudad A recibe tratamiento en 2018 y la ciudad B en 2020. Al estimar el efecto en 2021, TWFE puede comparar el cambio en la ciudad B con el cambio en la ciudad A, pero si el efecto del tratamiento de la ciudad A evoluciona con el tiempo (por ejemplo, crece o disminuye), esa comparación está contaminada porque estamos usando una unidad tratada como control. La estimación resultante puede estar sesgada.
La solución: el trabajo reciente de Callaway y Sant'Anna (2021), Sun y Abraham (2021) y otros ofrece soluciones prácticas al problema de la adopción escalonada:
Efectos específicos del tiempo de grupo: en lugar de estimar un único coeficiente de tratamiento, estime los efectos por separado para cada cohorte de tratamiento en cada período de tiempo posterior al tratamiento. Esto evita las problemáticas comparaciones implícitas en TWFE. Grupos de control limpios: utilice únicamente unidades que nunca hayan sido tratadas o que aún no hayan sido tratadas como controles. Esto evita que las unidades ya tratadas contaminen su grupo de comparación. Agregación cuidadosa: una vez que tenga estimaciones limpias específicas de la cohorte, agréguelas en medidas resumidas utilizando ponderaciones adecuadas, generalmente ponderadas por tamaño de cohorte.
Diagnóstico: trama del estudio del evento: antes de ejecutar cualquier estimador, debemos visualizar la dinámica de los efectos del tratamiento. Un gráfico de estudio de eventos muestra los efectos estimados en los períodos antes y después del tratamiento, en relación con un período de referencia (generalmente el período justo antes del tratamiento). Los coeficientes previos al tratamiento cercanos a cero respaldan el supuesto de tendencias paralelas. El enfoque DiD se basa en el supuesto de que, en ausencia de tratamiento, los resultados promedio para los grupos tratados y de control habrían seguido caminos paralelos, es decir, cualquier diferencia entre ellos permanecería constante en el tiempo.
Estos enfoques se implementan en el paquete did en R y el paquete csdid en Python. Aquí hay una implementación simple de Python:
import matplotlib.pyplot as plt import numpy as np def plot_event_study(estimates, ci_lower, ci_upper, event_times): """ Visualiza los efectos dinámicos del tratamiento con intervalos de confianza. Parámetros ———- estimaciones: en forma de matriz Efectos estimados para cada tiempo de evento. ci_lower, ci_upper: en forma de matriz Límites inferior y superior de los intervalos de confianza. event_times: en forma de matriz Períodos de tiempo relativos al tratamiento (por ejemplo, -5, -4, …, +5). """ fig, ax = plt.subplots(figsize=(10, 6)) ax.fill_between(event_times, ci_lower, ci_upper, alpha=0.2, color='steelblue') ax.plot(event_times, estimaciones, 'o-', color='steelblue', linewidth=2) ax.axhline(y=0, color='gris', estilo de línea='–', ancho de línea=1) ax.axvline(x=-0.5, color='ladrillo refractario', estilo de línea='–', alfa=0.7, etiqueta='Inicio del tratamiento') ax.set_xlabel('Períodos relativos al tratamiento', tamaño de fuente=12) ax.set_ylabel('Efecto estimado', tamaño de fuente=12) ax.set_title('Estudio de evento', tamaño de fuente=14) ax.legend(fontsize=11) ax.grid(alpha=0.3) return fig # Pseudocódigo usando csdid (si está disponible) de csdid import did_multiplegt # resultados hipotéticos = did_multiplegt(df, 'ganancias', 'tratamiento', 'ciudad', 'año') plot_event_study(resultados.estimaciones, resultados.ci_lower, resultados.ci_upper, resultados.event_times)
Parte 5: Efectos del tratamiento heterogéneo
Todos los métodos que hemos visto hasta ahora se basan en el efecto promedio, pero eso puede inducir a error. Supongamos que la formación aumenta los ingresos en 5.000 dólares para los no graduados pero no tiene ningún efecto para los graduados. Al informar solo el ATE se pierde la información más procesable: ¿a quién debemos dirigirnos?
La heterogeneidad del efecto del tratamiento es la norma, no la excepción. Un medicamento podría ayudar a los pacientes más jóvenes y perjudicar a los mayores. Una intervención educativa podría beneficiar a los estudiantes con dificultades sin tener ningún impacto en los de alto rendimiento.
Comprender esta heterogeneidad tiene tres propósitos:
Focalización: Asignar tratamientos a quienes más se benefician. Mecanismo: Los patrones de heterogeneidad revelan cómo funciona un tratamiento. Si la formación sólo ayuda a los trabajadores de industrias específicas, eso nos dice algo sobre el mecanismo subyacente. Generalización: si realizamos un estudio en una población y queremos aplicar los hallazgos en otra parte, necesitamos saber si los efectos dependen de características que difieren entre las poblaciones.
El efecto de tratamiento promedio condicional (CATE): CATE captura cómo varían los efectos con características observables:
τ(x) = E[Y(1) − Y(0) | X=x]
Esta función nos indica el efecto del tratamiento esperado para individuos con características X = x.
Herramientas modernas para estimar CATE: Causal Forests, desarrolladas por Athey y Wager, extienden los bosques aleatorios para estimar CATE. La innovación clave es que los datos utilizados para determinar la estructura del árbol están separados de los datos utilizados para estimar los efectos dentro de las hojas, lo que permite intervalos de confianza válidos. El algoritmo funciona mediante:
Cultivar muchos árboles, cada uno en una submuestra de datos. En cada división, elige la variable que maximiza la heterogeneidad en los efectos del tratamiento entre los nodos secundarios resultantes. Dentro de cada hoja, estima un efecto de tratamiento (normalmente utilizando una diferencia de medias o un modelo lineal pequeño). El CATE final para un nuevo punto es el promedio de las estimaciones específicas de las hojas de todos los árboles.
Aquí hay un fragmento de la implementación de Python:
de econml.dml importar CausalForestDML de sklearn.ensemble importar GradientBoostingRegressor, GradientBoostingClassifier importar numpy como np importar pandas como pd # X: covariables (edad, educación, industria, ingresos anteriores, etc.) # T: tratamiento binario (inscrito en capacitación) # Y: resultado (ganancias después del programa) # Para la importancia de las funciones más adelante, necesitamos nombres de funciones feature_names = ['age', 'educación', 'industria_manufactura', 'industria_servicios', 'ganancias_anteriores', 'duración_desempleo'] causal_forest = CausalForestDML( model_y=GradientBoostingRegressor(n_estimators=200, max_profundidad=4), # modelo de resultados model_t=GradientBoostingClassifier(n_estimators=200, max_profundidad=4), # modelo de propensión n_estimators=2000, # número de árboles min_samples_leaf=20, # tamaño mínimo de hoja random_state=42 ) causal_forest.fit(Y=Y, T=T, X=X) # Estimaciones del efecto del tratamiento individual (ITE, pero interpretado como CATE dado X) individual_effects = causal_forest.effect(X) # Resumen de estadísticas print(f"Efecto promedio (ATE): ${individual_effects.mean():,.0f}") print(f"Cuartil inferior: ${np.percentile(individual_effects, 25):,.0f}") print(f"Cuartil superior: ${np.percentile(individual_effects, 75):,.0f}") # Importancia de la variable: ¿qué características impulsan la heterogeneidad? # (econml devuelve importancia para cada característica; ordenamos y mostramos las principales) importancias = causal_forest.feature_importances_ para nombre, imp en sorted(zip(feature_names, importancias), key=lambda x: -x[1]): si imp > 0.05: # mostrar solo características con >5% de importancia print(f" {name}: {imp:.3f}")
Parte 6: Análisis de Sensibilidad
Ahora hemos cubierto cinco métodos sofisticados. Cada uno de ellos requiere suposiciones que no podemos verificar completamente. La cuestión no es si nuestras suposiciones son exactamente correctas sino si las violaciones son lo suficientemente graves como para revocar nuestras conclusiones. Aquí es donde entra en juego el análisis de sensibilidad. No hará que nuestros resultados parezcan más impresionantes. Pero puede ayudarnos a fortalecer nuestro análisis causal.
Si un factor de confusión no medido tuviera que ser inverosímilmente fuerte, es decir, más poderoso que cualquier covariable observada, nuestros hallazgos son sólidos. Si una ligera confusión pudiera eliminar el efecto, debemos interpretar los resultados con cautela.
El marco de sesgo de variable omitida: un enfoque práctico, formalizado por Cinelli y Hazlett (2020), enmarca la sensibilidad en términos de dos cantidades:
¿Qué tan fuertemente se relacionaría el factor de confusión con la asignación del tratamiento? (R² parcial con tratamiento) ¿Qué tan fuertemente se relacionaría el factor de confusión con el resultado? (R² parcial con resultado)
Usando estos dos enfoques, podemos crear un gráfico de contorno de sensibilidad, que es un mapa que muestra qué regiones de fuerza de confusión anularían nuestros hallazgos y cuáles no.
Aquí hay una implementación simple de Python:
def sensibilidad_summary(estimated_effect, se, r2_benchmarks): """ Ilustra la robustez ante factores de confusión no medidos utilizando un enfoque simplificado. r2_benchmarks: dict asigna nombres de covariables a su R² parcial con el resultado, proporcionando anclajes del mundo real para "¿qué tan fuerte es fuerte?" """ print("ANÁLISIS DE SENSIBILIDAD") print("=" * 55) print(f"Efecto estimado: ${estimated_effect:,.0f} (SE: ${se:,.0f})") print(f"El efecto se explicaría completamente por el sesgo >= ${abs(estimated_effect):,.0f}") print() print("Evaluación comparativa de las covariables observadas:") print("-" * 55) for name, r2 in r2_benchmarks.items(): # Simplificado: asumir que el factor de confusión con el mismo R² que la covariable observada # induciría un sesgo proporcional a ese R² implied_bias = abs(estimated_effect) * r2 restante = estimated_effect – implied_bias print(f"n Si el factor de confusión no observado es tan fuerte como '{name}':") print(f" Sesgo implícito: ${implied_bias:,.0f}") print(f" Efecto ajustado: ${remaining:,.0f}") haría_overturn = "YES" if abs(remaining) < 1.96 * se else "No" print(f" ¿Anularía la conclusión? {would_overturn}") # Ejemplo de uso de sensibilidad_summary (efecto_estimado=3200, se=800, r2_benchmarks={ 'educación': 0.15, 'prior_earnings': 0,25, 'edad': 0,05 } )
Poniéndolo todo junto: un marco de decisión
Con cinco métodos y un conjunto de herramientas de sensibilidad a su disposición, la pregunta práctica ahora es ¿cuál deberíamos utilizar y cuándo? Aquí hay un diagrama de flujo para ayudar con esa decisión.
Pensamientos finales
La inferencia causal consiste fundamentalmente en razonar cuidadosamente en condiciones de incertidumbre. Los métodos que hemos explorado en este artículo son herramientas poderosas, pero siguen siendo herramientas. Cada uno exige juicio sobre cuándo se aplica y vigilancia sobre cuándo falla. Un método simple aplicado cuidadosamente siempre superará a un método complejo aplicado a ciegas.
Recursos recomendados para profundizar
Estos son los recursos que he encontrado más valiosos:
Para desarrollar la intuición estadística en torno al pensamiento causal:
Regresión y otras historias de Gelman, Hill y Vehtari Para un marco riguroso de resultados potenciales: Inferencia causal para estadísticas, ciencias sociales y biomédicas de Imbens y Rubin Para un razonamiento causal basado en dominios: Inferencia causal en salud pública de Glass et al. Athey e Imbens (2019), “Métodos de aprendizaje automático que los economistas deberían conocer” – Une el aprendizaje automático y la inferencia causal. Callaway y Sant'Anna (2021) Lectura esencial sobre el DiD moderno con adopción escalonada. Cinelli y Hazlett (2020) La guía práctica definitiva para el análisis de sensibilidad.
Nota: La imagen destacada de este artículo se creó utilizando la herramienta de generación de imágenes Gemini AI de Google.