[PYTHON] Concernant la méthode de la variable d'opération

Quelle est la méthode des variables manipulées?

Il s'agit d'une méthode pour estimer l'effet causal à l'aide d'une variable appelée variable d'opération sans ajuster l'intrication lorsque l'on tente d'estimer l'effet causal moyen sous une structure avec enchevêtrement qui ne peut être ajusté ou observé.

Il est particulièrement utile pour l'analyse des données en sciences sociales où de nombreux enchevêtrements non observables peuvent être pris en compte.

Ce qui suit est un graphique appelé DAG (Directed Acyclic Graph) qui montre la relation causale de chaque variable. Je vais expliquer pourquoi l'effet causal de A à Y peut être estimé en utilisant la variable d'opération utilisant ce DAG.

image.png ici,

--A: Mesures / mesures --Y: variable de résultat --Z: Variables d'opération
--U: variables interdépendantes non observables

Il existe quatre variables appelées, chacune reliée par une flèche. Dans DAG ** La variable pointant la flèche affecte la variable du côté poignardé ** Interpréter comme.

Supposons maintenant que vous souhaitiez estimer l'effet de A (mesure) sur Y. Cependant, la variable U, qui est corrélée à la fois à A et à Y, ne permet pas d'interpréter la corrélation entre A et Y comme une cause et un effet.

Cette fois, quand U ne peut pas être observé, nous introduirons la méthode IV comme méthode d'estimation de cette relation causale sans ajuster l'intrication. (Cf: biais variable manquant)

Quelles sont les variables de fonctionnement ici encore? Je veux expliquer. Les variables d'opération sont

  1. Corrèle avec la variable de mesure A
  2. ** A une relation causale avec la variable objective Y uniquement via la variable de mesure A ** (contrainte d'exclusion)

C'est une variable comme.

Comme le sait tous ceux qui connaissent DAG, Z est connecté à Y uniquement via A. La condition de 1.2 ci-dessus est bien décrite par ce DAG.

Cette fois, En considérant l'estimation $ \ displaystyle \ frac {Cov (Z, Y)} {Cov (Z, A)} $, il s'agit d'une estimation non biaisée de l'effet causal moyen de A à Y. [^ 1]

Pourquoi cette estimation (appelée ci-après estimation IV) est-elle une estimation non biaisée? Ici, je voudrais donner une explication intuitive en me référant à Yamaguchi (2019) [^ 2].

image.png Supposons que l'effet causal de Z à A soit $ \ alpha $ et que l'effet causal de A à Y soit $ \ beta $.

A ce moment, le dénominateur de $ \ displaystyle \ frac {Cov (Z, Y)} {Cov (Z, A)} $ est le montant estimé de $ \ alpha $, et la molécule est le montant estimé de $ \ alpha \ beta $. Je vais. Par conséquent, en divisant la molécule par le dénominateur, vous pouvez estimer le $ \ beta $ que vous vouliez estimer.

Eh bien, voici une explication de la méthode des variables manipulées avec les détails coupés. [^ 3]

Dans ce qui suit, je vais introduire l'estimation de la variable d'opération en simulant réellement la situation de type DAG ci-dessus.

Simulation using Python

--Générer la variable explicative A, la variable d'exploitation Z et la variable d'intrication U à partir de la distribution normale multivariée $ N (\ mu, \ Sigma) $ - \mu = [\mu_A = 0.5, \mu_Z = 1.5, \mu_U = 20.0]

import numpy as np
Sigma = np.eye(3)
#1 ligne/La colonne est A,2 lignes/La ligne est U,3 lignes/La colonne correspond à Z.
Sigma[1, 0] = -0.7
Sigma[0, 1] = -0.7
Sigma[2, 0] = 0.4
Sigma[0, 2] = 0.4
#Variable explicative A,Variable de fonctionnement Z,Et la distribution normale multivariée de la variable d'intrication U$N(\mu, \Sigma)$Générer à partir de
d = np.random.multivariate_normal([0.5, 1.5, 20.0], Sigma, size=10000)

>>> Sigma
array([[ 1. , -0.7,  0.4],
       [-0.7,  1. ,  0. ],
       [ 0.4,  0. ,  1. ]])
# error term
e = np.random.randn(len(d))
#Décomposer la matrice d pour créer chaque variable
A = d[:, 0]
u = d[:, 1]
Z = d[:, 2]
#Véritable modèle de variable objective
# y = 2 A + 6U + \epsilon
y = A*2 + 6*u + e
#Confirmation de corrélation
print("Cov(A, u)=", np.corrcoef(A, u)[0, 1])
print("Cov(Z, u)=", np.corrcoef(Z, u)[0, 1])
print("Cov(A, Z)=", np.corrcoef(A, Z)[0,1 ])
Cov(A, u)= -0.701004490456518
Cov(Z, u)= 0.0043542162380179215
Cov(A, Z)= 0.39744458663706667

On peut dire que $ Cov (Z, U) $ est presque 0, et la relation de chaque variable définie dans $ \ Sigma $ reproduit la situation de DAG!

Maintenant, si vous regardez simplement la relation entre A et Y dans un diagramme de dispersion?

g=sns.scatterplot(x=A, y=y, )
g.set_ylabel("y");g.set_xlabel("A");

image.png

On dirait qu'il existe une corrélation négative comme celle-ci! Cependant, dans la formule ci-dessus, $ y = 2 A + 6U + \ epsilon $, et l'effet causal de A sur Y est de 2. C'est parce que U affecte à la fois A et Y. réellement,

g = sns.scatterplot(x=A, y=y-6*u, hue=u)
g.set_ylabel("outcome variable")
g.set_xlabel("Explainary variable")

image.png

Puisqu'il y a une corrélation négative entre A et U, nous pouvons voir que lorsque A augmente, U diminue.

from statsmodels.regression.linear_model import OLS 
lm = OLS(endog=y, exog=np.c_[A, u])
results = lm.fit()
results.params
#  ordinary least squares
X = sm.add_constant(A)
>>> print("Si vous renvoyez simplement y avec X", OLS(X, y).fit().params[0])
>>> print("Si vous intégrez les facteurs d'intrication et effectuez une régression multiple,", results.params[0])
Si vous renvoyez simplement y avec A-2.1853899626462927
Si vous intégrez les facteurs d'intrication et effectuez une régression multiple, 2.022653523550131

Si le facteur d'intrication U peut être observé, l'effet causal moyen peut être estimé en effectuant plusieurs régressions dans ce vrai modèle.

Essayez d'utiliser la méthode des variables manipulées

Je voudrais introduire la fonction suivante pour calculer $ \ displaystyle \ frac {Cov (Z, Y)} {Cov (Z, A)} $ et estimer réellement IV.

def IV(A, y, z):
    denom = np.cov(A, z)[1, 0]
    nomi = np.cov(z, y)[1, 0]
    return nomi/denom

print("Effet causal lorsqu'il est estimé à l'aide de la méthode des variables manipulées", IV(A, y, Z))
Effet causal lorsque estimé à l'aide de la méthode des variables manipulées 2.0858603407321765

J'ai pu estimer avec succès l'effet causal moyen sans être affecté par U!

À la fin

Il a été constaté que l'effet causal moyen de A sur Y peut être estimé en utilisant la méthode IV même si la variable d'intrication U ne peut pas être observée.

Cependant, il y a deux choses à savoir.

  1. Les contraintes d'exclusion ne peuvent pas être justifiées à partir des données! Malheureusement, ** il n'y a aucun moyen d'être sûr que Z est réellement une variable générée dans une situation comme le DAG décrit ci-dessus. ** (Parce que U ne peut pas être observé) Lorsque vous l'utilisez réellement dans la recherche, il est nécessaire d'utiliser pleinement les connaissances du domaine, etc. et d'utiliser des variables générées aléatoirement dans des situations expérimentales naturelles pour convaincre que la situation ci-dessus telle que DAG se produit. il y a.
  2. Si la corrélation entre A et Z est faible, la dispersion du montant estimé sera importante. (Problème d'instruments faibles)

Lorsque j'ai déplacé uniquement la valeur de $ Cov (A, Z) $ avec les paramètres ci-dessus et vérifié comment le montant estimé change, image.png Si $ Cov (A, Z) $ est trop petit, vous pouvez voir que l'estimation de la méthode IV est loin de la valeur vraie. Ce qui précède est une brève introduction à la méthode des variables manipulées et une explication à l'aide de données de simulation.

C'est une méthode d'estimation qui revient chaque fois que vous lisez un manuel d'économie métrique, alors veuillez l'étudier!

Documents connexes

  1. Introduction au test comparatif randomisé sur la façon de trouver des relations causales pour l'évaluation des politiques
  2. Introduction à l'identification partielle par le professeur Tsunao Okumura
  3. Professeur Naoya Sueishi, économie quantitative Pas besoin d'analyser les micro-données

De plus, @mns_econ a introduit la méthode IV à TokyoR, je vais donc la présenter également.

  1. @mns_econ https://speakerdeck.com/mns54/cao-zuo-bian-shu-fa-ru-men?slide=10

[^ 1]: D'après ce document, ce n'est pas exactement une estimation ** impartiale **. C'était mon manque de compréhension. C'est juste une estimation de correspondance. $ \ frac {Cov (Z, Y)} {Cov (Z, A)} = \ frac {Cov (Z, 2A + 6U + \ epsilon)} {Cov (Z, A)} = 2 + \ frac {Cov L'histoire est que la partie $ \ frac {Cov (Z, U)} {Cov (Z, A)} $ de (Z, U)} {Cov (Z, A)} $ converge progressivement vers 0. fait. J’ai l’impression de ne pas comprendre un peu l’impartialité et la cohérence, je vais donc la revoir. [^ 2]: Le graphique a été référencé à partir du document de travail RIETI du professeur Yamaguchi. https://www.rieti.go.jp/jp/publications/dp/19j003.pdf [^ 3]: En pratique, les estimations ci-dessus nécessitent également l'hypothèse que les effets causaux de A sur Y sont homogènes chez chaque individu.

Recommended Posts

Concernant la méthode de la variable d'opération
Concernant la méthode Sort de Python