Veröffentlicht am :
Statistik CREATION_INTERNE

Schätzung kausaler Effekte mittels doppelt robuster Methoden mit PROC CAEFFECT

Dieser Code ist auch verfügbar auf: English Français
Wartet auf Validierung
Dieses Dokument beschreibt die Anwendung doppelt robuster Methoden (AIPW und TMLE) mittels der CAEFFECT-Prozedur. Diese Methoden sind besonders nützlich, da sie konsistent bleiben, wenn entweder das Behandlungsmodell oder das Ergebnismodell korrekt spezifiziert ist (aber nicht notwendigerweise beide). Das Beispiel verwendet `PROC LOGSELECT` zur Modellierung der Wahrscheinlichkeit einer Behandlung (hier: Raucherentwöhnung) und `PROC BART` zur Modellierung des Ergebnisses (Gewichtsveränderung). Die Vorhersagen dieser Zwischenmodelle (`pTrt`, `pCnt`, `P_Change`) werden dann als Eingaben für die Prozedur `CAEFFECT` verwendet. Die CAEFFECT-Prozedur schätzt die mittleren potenziellen Ergebnisse (POM) für verschiedene Behandlungsniveaus und berechnet die Differenz zwischen diesen POMs, um den durchschnittlichen Behandlungseffekt (ATE) zu schätzen. Dieser Ansatz ist robust gegenüber Fehlspezifikationen in einem der beiden Modelle.
Datenanalyse

Type : CREATION_INTERNE


Die Beispiele verwenden synthetische Daten, die mit einem `DATA step` und `datalines` generiert wurden, um deren Autonomie zu gewährleisten. Eine Tabelle `SmokingWeight` wird in der CAS-Sitzung erstellt.

1 Codeblock
PROC CAEFFECT Data
Erklärung :
Dieses Beispiel zeigt die grundlegende Schätzung kausaler Effekte mittels der AIPW (Augmented Inverse Probability Weighting) Methode.
1. **Datenvorbereitung:** Eine Tabelle `mylib.SmokingWeight` wird in der CAS-Sitzung mit synthetischen Daten erstellt.
2. **Behandlungsmodell:** `PROC LOGSELECT` wird verwendet, um die Wahrscheinlichkeit des Raucherentzugs (`Quit=1`) in Abhängigkeit von Kovariaten zu modellieren, wobei die Wahrscheinlichkeit `pTrt` und `pCnt` (Wahrscheinlichkeit, nicht aufzuhören) generiert wird.
3. **Ergebnismodell:** `PROC BART` (Bayesian Additive Regression Trees) wird ausgeführt, um die Gewichtsveränderung (`Change`) in Abhängigkeit von Kovariaten und dem Raucherstatus (`Quit`) zu modellieren, und das angepasste Modell wird in `mylib.bartOutMod` gespeichert.
4. **PROC CAEFFECT:** Die Prozedur `CAEFFECT` wird dann mit `METHOD=AIPW` aufgerufen, wobei die Behandlungsvariable (`Quit`), die Ergebnisvariable (`Change`) und das Ergebnismodell (`mylib.bartOutMod`) angegeben werden. Die `POM`-Anweisungen definieren die potenziellen Ergebnisse für jedes Behandlungsniveau (aufhören oder nicht) unter Verwendung der vorhergesagten Wahrscheinlichkeiten. Die `DIFFERENCE`-Anweisung berechnet die Differenz zwischen den Mittelwerten der potenziellen Ergebnisse.
Kopiert!
1/* Création d'une session CAS si elle n'existe pas */
2cas;
3 
4/* Assurez-vous que la caslib mylib est disponible et mappée */
5caslib _all_ assign;
6 
7/* Création de la table de données SmokingWeight */
8DATA mylib.SmokingWeight;
9 INFILE DATALINES;
10 INPUT Sex $ Race $ Education $ Exercise $ Activity $ Age YearsSmoke PerDay QUIT Change;
11 DATALINES;
12Female White HighSchool Light Active 30 10 15 0 2.5
13Male Black College Moderate Sedentary 45 20 20 1 5.0
14Female Asian GradSchool Heavy Active 55 30 25 1 7.2
15Male White HighSchool Light Sedentary 35 12 10 0 1.8
16Female Black College Moderate Active 40 18 18 1 4.5
17Male Asian GradSchool Heavy Sedentary 60 25 22 0 3.1
18Female White HighSchool Light Active 28 8 12 1 6.0
19Male Black College Moderate Sedentary 50 22 19 0 2.0
20Female Asian GradSchool Heavy Active 48 28 24 1 8.0
21Male White HighSchool Light Sedentary 32 10 11 0 1.5
22;
23RUN;
24 
25/* 1. Modélisation de la variable de traitement 'Quit' avec PROC LOGSELECT */
26PROC LOGSELECT DATA=mylib.SmokingWeight;
27 class Sex Race Education Exercise Activity;
28 model QUIT(Event='1') = Sex Race Education
29 Exercise Activity Age YearsSmoke PerDay;
30 OUTPUT out=mylib.swDREstData pred=pTrt copyvars=(_ALL_);
31RUN;
32 
33/* Calcul de la probabilité de la condition de contrôle (Quit=0) */
34DATA mylib.swDREstData;
35 SET mylib.swDREstData;
36 pCnt = 1 - pTrt;
37RUN;
38 
39/* 2. Modélisation de la variable de résultat 'Change' avec PROC BART */
40PROC BART DATA=mylib.swDREstData nTree=100 nMC=200 seed=2156;
41 class Sex Race Education Exercise Activity QUIT;
42 model Change = Sex Race Education Exercise QUIT Activity
43 Age YearsSmoke PerDay;
44 store out=mylib.bartOutMod;
45RUN;
46 
47/* 3. Estimation des effets causaux avec PROC CAEFFECT (AIPW) */
48PROC CAEFFECT DATA=mylib.swDREstData method=aipw;
49 treatvar QUIT;
50 outcomevar Change;
51 outcomemodel restore=mylib.bartOutMod predName=P_Change;
52 pom treatLev=1 treatProb=pTrt;
53 pom treatLev=0 treatProb=pCnt;
54 difference evtLev=1;
55RUN;
56 
2 Codeblock
PROC CAEFFECT Data
Erklärung :
Dieses Beispiel demonstriert die Verwendung der TMLE (Targeted Maximum Likelihood Estimation) Methode, einer Alternative zu AIPW, zur Schätzung kausaler Effekte.
1. **Datenvorbereitung und Zwischenmodelle:** Die Schritte zur Datenerstellung, Modellierung der Behandlung mit `PROC LOGSELECT` und Modellierung des Ergebnisses mit `PROC BART` sind identisch mit Beispiel 1.
2. **PROC CAEFFECT mit TMLE:** Der einzige Unterschied ist der Parameter `METHOD=tmle` in der `PROC CAEFFECT`-Anweisung. Die TMLE-Methode zielt direkt auf den Parameter von Interesse (den ATE) ab, indem sie die Vorhersagen des Ergebnismodells iterativ anpasst, was in einigen Fällen die Robustheit und Effizienz der Schätzung im Vergleich zu AIPW verbessern kann. Die erzielten Ergebnisse sind in der Regel sehr ähnlich denen von AIPW, wie die Dokumentation zeigt.
Kopiert!
1/* Création d'une session CAS si elle n'existe pas */
2cas;
3 
4/* Assurez-vous que la caslib mylib est disponible et mappée */
5caslib _all_ assign;
6 
7/* Création de la table de données SmokingWeight */
8DATA mylib.SmokingWeight;
9 INFILE DATALINES;
10 INPUT Sex $ Race $ Education $ Exercise $ Activity $ Age YearsSmoke PerDay QUIT Change;
11 DATALINES;
12Female White HighSchool Light Active 30 10 15 0 2.5
13Male Black College Moderate Sedentary 45 20 20 1 5.0
14Female Asian GradSchool Heavy Active 55 30 25 1 7.2
15Male White HighSchool Light Sedentary 35 12 10 0 1.8
16Female Black College Moderate Active 40 18 18 1 4.5
17Male Asian GradSchool Heavy Sedentary 60 25 22 0 3.1
18Female White HighSchool Light Active 28 8 12 1 6.0
19Male Black College Moderate Sedentary 50 22 19 0 2.0
20Female Asian GradSchool Heavy Active 48 28 24 1 8.0
21Male White HighSchool Light Sedentary 32 10 11 0 1.5
22;
23RUN;
24 
25/* 1. Modélisation de la variable de traitement 'Quit' avec PROC LOGSELECT */
26PROC LOGSELECT DATA=mylib.SmokingWeight;
27 class Sex Race Education Exercise Activity;
28 model QUIT(Event='1') = Sex Race Education
29 Exercise Activity Age YearsSmoke PerDay;
30 OUTPUT out=mylib.swDREstData pred=pTrt copyvars=(_ALL_);
31RUN;
32 
33/* Calcul de la probabilité de la condition de contrôle (Quit=0) */
34DATA mylib.swDREstData;
35 SET mylib.swDREstData;
36 pCnt = 1 - pTrt;
37RUN;
38 
39/* 2. Modélisation de la variable de résultat 'Change' avec PROC BART */
40PROC BART DATA=mylib.swDREstData nTree=100 nMC=200 seed=2156;
41 class Sex Race Education Exercise Activity QUIT;
42 model Change = Sex Race Education Exercise QUIT Activity
43 Age YearsSmoke PerDay;
44 store out=mylib.bartOutMod;
45RUN;
46 
47/* 3. Estimation des effets causaux avec PROC CAEFFECT (TMLE) */
48PROC CAEFFECT DATA=mylib.swDREstData method=tmle;
49 treatvar QUIT;
50 outcomevar Change;
51 outcomemodel restore=mylib.bartOutMod predName=P_Change;
52 pom treatLev=1 treatProb=pTrt;
53 pom treatLev=0 treatProb=pCnt;
54 difference evtLev=1;
55RUN;
56 
3 Codeblock
PROC CAEFFECT Data
Erklärung :
Dieses erweiterte Beispiel veranschaulicht eine Untergruppenanalyse mit der AIPW-Methode und speichert die Ergebnisse in Ausgabetabellen. Ziel ist es zu untersuchen, ob der Behandlungseffekt (Raucherentwöhnung) auf die Gewichtsveränderung je nach Geschlecht variiert.
1. **Datenvorbereitung und Zwischenmodelle:** Die Schritte sind die gleichen wie in den vorherigen Beispielen.
2. **Untergruppenanalyse:** Die Anweisung `CLASS Sex;` deklariert die Variable `Sex` als Klassifikationsvariable, und die Anweisung `BY Sex;` weist `PROC CAEFFECT` an, die Analyse für jedes Niveau von `Sex` (Männlich und Weiblich) zu wiederholen.
3. **Ausgabeoptionen:** Die `ODS OUTPUT`-Anweisungen werden verwendet, um die von der Prozedur generierten Schätzungstabellen (`Estimates`) und Differenztabellen (`OutDiff`) in neuen CAS-Tabellen (`mylib.aipwEstimates` und `mylib.aipwDifferences`) zu speichern. Dies ermöglicht eine weitere Analyse der Ergebnisse oder deren Integration in andere Berichte.
Kopiert!
1/* Création d'une session CAS si elle n'existe pas */
2cas;
3 
4/* Assurez-vous que la caslib mylib est disponible et mappée */
5caslib _all_ assign;
6 
7/* Création de la table de données SmokingWeight */
8DATA mylib.SmokingWeight;
9 INFILE DATALINES;
10 INPUT Sex $ Race $ Education $ Exercise $ Activity $ Age YearsSmoke PerDay QUIT Change;
11 DATALINES;
12Female White HighSchool Light Active 30 10 15 0 2.5
13Male Black College Moderate Sedentary 45 20 20 1 5.0
14Female Asian GradSchool Heavy Active 55 30 25 1 7.2
15Male White HighSchool Light Sedentary 35 12 10 0 1.8
16Female Black College Moderate Active 40 18 18 1 4.5
17Male Asian GradSchool Heavy Sedentary 60 25 22 0 3.1
18Female White HighSchool Light Active 28 8 12 1 6.0
19Male Black College Moderate Sedentary 50 22 19 0 2.0
20Female Asian GradSchool Heavy Active 48 28 24 1 8.0
21Male White HighSchool Light Sedentary 32 10 11 0 1.5
22;
23RUN;
24 
25/* 1. Modélisation de la variable de traitement 'Quit' avec PROC LOGSELECT */
26PROC LOGSELECT DATA=mylib.SmokingWeight;
27 class Sex Race Education Exercise Activity;
28 model QUIT(Event='1') = Sex Race Education
29 Exercise Activity Age YearsSmoke PerDay;
30 OUTPUT out=mylib.swDREstData pred=pTrt copyvars=(_ALL_);
31RUN;
32 
33/* Calcul de la probabilité de la condition de contrôle (Quit=0) */
34DATA mylib.swDREstData;
35 SET mylib.swDREstData;
36 pCnt = 1 - pTrt;
37RUN;
38 
39/* 2. Modélisation de la variable de résultat 'Change' avec PROC BART */
40PROC BART DATA=mylib.swDREstData nTree=100 nMC=200 seed=2156;
41 class Sex Race Education Exercise Activity QUIT;
42 model Change = Sex Race Education Exercise QUIT Activity
43 Age YearsSmoke PerDay;
44 store out=mylib.bartOutMod;
45RUN;
46 
47/* 3. Estimation des effets causaux avec PROC CAEFFECT (AIPW) par sous-groupe */
48PROC CAEFFECT DATA=mylib.swDREstData method=aipw;
49 class Sex; /* Ajout d'une variable de classification pour l'analyse par groupe */
50 treatvar QUIT;
51 outcomevar Change;
52 outcomemodel restore=mylib.bartOutMod predName=P_Change;
53 pom treatLev=1 treatProb=pTrt;
54 pom treatLev=0 treatProb=pCnt;
55 difference evtLev=1;
56 BY Sex; /* Analyse séparée par le sexe */
57 ods OUTPUT Estimates=mylib.aipwEstimates OutDiff=mylib.aipwDifferences; /* Sauvegarde des résultats */
58RUN;
59 
4 Codeblock
PROC CAEFFECT Data
Erklärung :
Dieses Beispiel konzentriert sich auf die Integration und Optimierung für SAS Viya/CAS-Umgebungen, insbesondere für große Datensätze, unter Verwendung der TMLE-Methode.
1. **CAS-Sitzungsverwaltung und Bereinigung:** Die Befehle `cas;` und `caslib _all_ assign;` stellen sicher, dass die CAS-Sitzung aktiv und die Caslib zugeordnet ist. `PROC CASUTIL` wird verwendet, um verbleibende CAS-Tabellen vor der Erstellung neuer Daten zu bereinigen.
2. **Generierung von Daten in großem Umfang:** Eine Tabelle `mylib.SmokingWeight` mit 10.000 Beobachtungen wird generiert, um einen großen Datensatz zu simulieren, wobei `promote=yes` verwendet wird, um sicherzustellen, dass es sich um eine CAS-Tabelle handelt.
3. **Optimierung von Prozeduren:** Für `PROC LOGSELECT` und `PROC BART` werden Parameter wie `nthreads` (für `LOGSELECT`) verwendet, um die parallele Verarbeitung von CAS zu nutzen. Die Anzahl der Bäume (`nTree`) und Monte-Carlo-Iterationen (`nMC`) für `BART` wird erhöht, um ein robusteres Modell für größere Datenmengen widerzuspiegeln.
4. **PROC CAEFFECT:** Die Prozedur `CAEFFECT` wird dann mit `METHOD=TMLE` ausgeführt, um ihre Anwendbarkeit und Leistung bei größeren Datenmengen in der CAS-Umgebung zu demonstrieren.
Kopiert!
1/* Création d'une session CAS si elle n'existe pas */
2cas;
3 
4/* Assurez-vous que la caslib mylib est disponible et mappée */
5caslib _all_ assign;
6 
7/* Nettoyage des tables existantes pour s'assurer d'un redémarrage propre */
8PROC CASUTIL;
9 droptable casdata='SmokingWeight' incaslib='mylib' quiet;
10 droptable casdata='swDREstData' incaslib='mylib' quiet;
11 droptable casdata='bartOutMod' incaslib='mylib' quiet;
12RUN;
13 
14/* Création d'un ensemble de données plus grand simulé */
15DATA mylib.SmokingWeight(promote=yes);
16 array char_vars Sex $ Race $ Education $ Exercise $ Activity $;
17 DO i = 1 to 10000; /* Simule 10000 observations */
18 call streaminit(12345 + i);
19 DO _n_ = 1 to dim(char_vars);
20 char_vars(_n_) = ranword(char_vars(_n_)); /* Générer des valeurs de caractères aléatoires */
21 END;
22 
23 IF rand('UNIFORM') < 0.5 THEN Sex = 'Female'; ELSE Sex = 'Male';
24 IF rand('UNIFORM') < 0.7 THEN Race = 'White'; ELSE Race = 'Black';
25 IF rand('UNIFORM') < 0.6 THEN Education = 'HighSchool'; ELSE Education = 'College';
26 IF rand('UNIFORM') < 0.5 THEN Exercise = 'Light'; ELSE Exercise = 'Moderate';
27 IF rand('UNIFORM') < 0.5 THEN Activity = 'Active'; ELSE Activity = 'Sedentary';
28 Age = round(rand('NORMAL', 40, 10));
29 YearsSmoke = round(rand('NORMAL', 15, 5));
30 PerDay = round(rand('NORMAL', 15, 5));
31 IF rand('UNIFORM') < 0.5 THEN QUIT = 0; ELSE QUIT = 1;
32 Change = rand('NORMAL', 3, 1.5) + (QUIT * rand('NORMAL', 2, 0.5)) - (PerDay * 0.1);
33 OUTPUT;
34 END;
35 drop i;
36 label QUIT = "Arrêt du Tabac (0=Non, 1=Oui)";
37 label Change = "Changement de Poids (kg)";
38RUN;
39 
40/* 1. Modélisation de la variable de traitement 'Quit' avec PROC LOGSELECT */
41/* Utilisation de l'option NTHREADS pour le parallélisme en CAS */
42PROC LOGSELECT DATA=mylib.SmokingWeight nthreads=4;
43 class Sex Race Education Exercise Activity;
44 model QUIT(Event='1') = Sex Race Education
45 Exercise Activity Age YearsSmoke PerDay;
46 OUTPUT out=mylib.swDREstData pred=pTrt copyvars=(_ALL_);
47RUN;
48 
49/* Calcul de la probabilité de la condition de contrôle (Quit=0) */
50DATA mylib.swDREstData;
51 SET mylib.swDREstData;
52 pCnt = 1 - pTrt;
53RUN;
54 
55/* 2. Modélisation de la variable de résultat 'Change' avec PROC BART */
56/* Utilisation d'un Ntree et Nmc appropriés pour de grands jeux de données */
57PROC BART DATA=mylib.swDREstData nTree=200 nMC=500 seed=2156;
58 class Sex Race Education Exercise Activity QUIT;
59 model Change = Sex Race Education Exercise QUIT Activity
60 Age YearsSmoke PerDay;
61 store out=mylib.bartOutMod;
62RUN;
63 
64/* 3. Estimation des effets causaux avec PROC CAEFFECT (TMLE) pour grands ensembles de données */
65PROC CAEFFECT DATA=mylib.swDREstData method=tmle;
66 treatvar QUIT;
67 outcomevar Change;
68 outcomemodel restore=mylib.bartOutMod predName=P_Change;
69 pom treatLev=1 treatProb=pTrt;
70 pom treatLev=0 treatProb=pCnt;
71 difference evtLev=1;
72RUN;
73 
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : Copyright © SAS Institute Inc. All Rights Reserved