1.5.1 modellering kausala antaganden
i föregående inlägg täckte vi riktade acykliska grafer. I det här avsnittet lär vi oss hur vi kan använda DAGs för att resonera om orsakssambanden i våra modeller.
matematiskt består en strukturell Kausalmodell (SCM) av en uppsättning endogena (V) och en uppsättning exogena (U) variabler kopplade av en uppsättning funktioner (F) som bestämmer värdena för variablerna i V baserat på värdena för variablerna i U.
intuitivt, om vi tänker på en DAG som representerar ett informationsflöde, är variablerna U ingångarna till systemet, medan variablerna V är noderna där den informationen behandlas.
varje SCM är associerad med en grafisk modell (dag) där varje nod är en variabel i U eller V och varje kant är en funktion f. Varje kant (funktion) motsvarar ett kausalt antagande:
om variabeln Y är barnet till en variabel X, säger vi att Y orsakas av X, eller att X är den direkta orsaken till Y.
om variabeln Y är ättling till en variabel X, säger vi att Y potentiellt orsakas av X, eller att X är den potentiella orsaken till Y.
låt oss betrakta exemplet i Fig 1.9:
Fig 1.9 — grafisk modell av SCM 1.5.1 från att bara titta på denna graf, vi omedelbart och intuitivt, förstå en hel del av detaljerna i den underliggande SCM:
X och Y har inga inkommande kanter, så de är exogena variabler (tillhör U).
Z har två inkommande kanter, så det är en endogen variabel (som tillhör V).
Z har två direkta orsaker X och Y, eller med andra ord beror värdet på Z uttryckligen på värdena X och Y och fz=f(X, Y).
vi behöver dock den fullständiga specifikationen för SCM för att veta exakt vad som är funktionen fz som bestämmer värdet på Z. den strukturella Kausalmodellen är endast fullständigt specificerad när vi, förutom DAG ovan, också specificerar:
SCM 1.5.1 här är det viktigt att notera att även om dag innehåller mindre information än den fullständigt angivna SCM, är de ofta mer användbara. Grafer är extremt visuella objekt, vilket gör dem lättare att tolka och analysera. Det är också ofta fallet där vi helt enkelt inte har tillräckligt med information för att fullständigt specificera SCM men kan intuitivt definiera hur kausalgrafen ska se ut.
simulera modeller
en av fördelarna med en fullständigt specificerad SCM är att de är ganska lätta att simulera. Till exempel kan vi skapa några falska (deterministiska) data för SCM som beskrivs ovan:
som genererar en enkel pandas DataFrame med värdena X, Y och Z:
Jag förlåter dig om du inte är särskilt imponerad av detta exempel. Det enda vi gjorde var trots allt att generera några falska data baserat på en enkel ekvation. Detta är inte särskilt imponerande, tills vi ser lite under ytan:
denna DataFrame representerar en helt numerisk beskrivning av vår modell… med andra ord är detta en leksaksversion av vad de ursprungliga data som kunde ha använts, tillsammans med DAG ovan, för att passa funktionen fz.
om vi behandlar denna DataFrame som våra ”empiriska data” och vi antar (baserat på viss domänkunskap) att fz ska vara en linjär regression av X och Y, kan vi helt enkelt passa Z ~ X + Y:
att återhämta sig som koefficienterna multiplicerar X och Y, respektive:
Vi kommer att titta mycket mer detaljerat på hur man utvärderar och passar kausalmodeller senare, men även den här enkla leksaksmodellen ger oss redan en smak av vad som kommer och enkelheten (och generaliteten) av detta tillvägagångssätt.
ett stokastiskt exempel
Låt oss nu ta en titt på ett mer komplext exempel, SCM 1.5.3. I detta fall ges SCM av:
SCM 1.5.3
From this specification, we can easily obtain the corresponding DAG:
Graphical Model for SCM 1.5.3
We are also told that all exogenous variables are independently distributed with an expected value zero. Detta innebär att de exogena variablerna motsvarar observerade influenser i vår modell, så att de kan behandlas som felfaktorer.
plugga in normalt distribuerade slumpmässiga värden för Ux, Uy och Uz kan vi snabbt bygga en DataFrame som anger värdena för X, Y och Z.
låt oss glömma en sekund att vi har de explicita analytiska formlerna som producerar värdena för våra endogena variabler och använder bara de numeriska värdena i vår DataFrame.
alla frågor som vi kan ha om beteendet hos denna modell kan besvaras med en liknande procedur som den som används ovan: montering av en linjär modell (eftersom vi antar att alla beroenden är linjära) där våra observerade värden är de oberoende variablerna och våra okända är de beroende variablerna.
om vi till exempel vill veta vad värdet på Z kan vara för ett specifikt värde på Y, skulle vi helt enkelt passa Z ~ Y och sedan plugga motsvarande värde på Y. Om Y=3 är det förväntade värdet på Z 0,189261, vilket lätt kan verifieras genom att ansluta Y=3 i uttrycket för fZ ovan (där vi snabbt ser att Z=3/16).
å andra sidan, vad skulle vara värdet på Z om vi förutom att observera Y=3 också observerar att X=1? För att svara på denna fråga kan vi passa Z~X+Y. När vi utför denna passform får vi:
där vi bara kan läsa av koefficienterna för Y och X. Om vi nu kopplar in värdena på X och Y får vi Z=0.189821 vilket liknar det värde som erhållits ovan.
Vi kunde ha gissat att detta skulle vara resultatet genom att titta på sammanfattningstabellen ovan. Vi fröer att koefficienten för X är 0,0053 0,003 0,003, vilket gör det mycket nära noll, praktiskt taget försumbar.
även om detta kan tyckas förvånande, är det en av de främsta anledningarna till att denna klass av modeller är så kraftfull.
värdet på en specifik endogen variabel kan bara bero på värdena för sina föräldrar
denna enkla observation innebär att vi kan förenkla våra beräkningar avsevärt genom att ignorera alla variabler som inte är bland föräldrarna till den vi är intresserade av.
vilket leder oss till vårt nästa ämne…
1.5.2 produktnedbrytning
Vi kan bygga upp vår observation ovan för att definiera en enkel men ändå kraftfull regel, ”regeln om produktnedbrytning” som definieras i boken som:
för varje modell vars graf är acyklisk ges den gemensamma fördelningen av variablerna i modellen av produkten av de villkorliga fördelningarna P(barn|föräldrar) över alla ”familjer” i grafen
så för en enkel kedjediagram:
Vi kan omedelbart skriva:
det betyder att istället för en stor tabell med observationer för varje möjlig kombination av X, Y och X behöver vi bara mycket mindre tabeller för X, Y / X och Z / Y som innehåller samma information och är mycket lättare att få.
ännu viktigare, grafiska modeller tillåter oss att skriva ner denna sönderdelning utan att behöva uttryckligen veta något om de funktioner som ligger bakom varje variabel.
In general, we write:
Let us now consider the example in Fig 1.10:
DAG from Fig 1.10 with the associated probability tables.
From this figure, we can immediately write:
and:
Which could also be obtained from the definition of the conditional probability P(X|Z). We can further write:
by the theorem of total probability. And if we plugin the values from the conditional probability tables above, we obtain:
And, similarly:
slutligen kan vi uppskatta effekten på dödligheten (y=1) för att ta läkemedlet (x=1) genom att beräkna skillnaden p(y=1 / x=1)-p(y=1 / x=0). För befolkningen med (Z=1) och utan (Z=0) sjukdomen har vi:
här bör det vara tydligt varför vi konditionerar både X och z: vi påtvingar att varje individ tillhör en specifik population (Z) och tar eller inte medicinen (X).
å andra sidan, om vi bara vill ha en genomsnittlig effekt över hela befolkningen, måste vi konditionera bara på behandlingen (X). I det här fallet vill vi beräkna P(Y=1|X=1)-P(Y=1|X=0). Vi skriver om detta uttryck som:
Where we can easily plugin the expressions defined above.