Dieses Beispiel untersucht die CAEFFECT-Prozedur zur Schätzung des kausalen Effekts von Rauchen (Smoking) auf die Kindersterblichkeit (Death). Ein Gradient-Boosting-Modell (PROC GRADBOOST) wird zunächst an einem synthetischen Datensatz (inspiriert von SASHELP.BIRTHWGT) angepasst, um das Outcome 'Death' basierend auf dem Rauchen und mehreren Störvariablen (AgeGroup, Drinking, Married, SomeCollege) vorherzusagen. Das vorhergesagte Modell wird dann von PROC CAEFFECT verwendet, um die potenziellen Outcome-Mittelwerte für jede Behandlungsebene ('Yes' und 'No') zu schätzen. Das Beispiel zeigt auch, wie vorhergesagte kontrafaktische Outcome-Werte direkt an PROC CAEFFECT übergeben werden können, indem PROC ASTORE für das Scoring des wiederhergestellten GRADBOOST-Modells verwendet wird, sowie eine alternative Methode (IPW) mit PROC LOGSELECT für die Propensity-Modellierung.
Datenanalyse
Type : CREATION_INTERNE
Die Beispiele verwenden synthetische Daten, die mittels DATA STEP generiert und vom SASHELP.BIRTHWGT-Datensatz inspiriert wurden, um die Autonomie und Reproduzierbarkeit jedes Codeblocks zu gewährleisten.
1 Codeblock
DATA STEP / PROC CAS Data
Erklärung : Dieser Codeblock initialisiert eine CAS-Sitzung, erstellt eine 'mylib'-Bibliothek, falls sie nicht existiert, und generiert dann einen kleinen synthetischen Datensatz 'birthwgt_synth_local' in der SAS-Arbeitsbibliothek. Dieser Datensatz wird anschließend unter dem Namen 'mylib.birthwgt_synth' in die CAS-Sitzung geladen, um von den CAS-Prozeduren verwendet zu werden.
Kopiert!
/* --- Configuration de la session CAS et de la bibliothèque --- */
proc cas;
session casauto;
/* Crée une bibliothèque CAS temporaire 'mylib' si elle n'existe pas */
if not caslibexists('mylib') then do;
caslib mylib datasource=(path='/tmp/') global;
end;
quit;
/* --- Données synthétiques pour la démonstration (SAS Data Step local) --- */
data work.birthwgt_synth_local;
input Smoking $ AgeGroup $ Married $ Drinking $ SomeCollege $ Death $;
datalines;
Yes '1' Yes No Yes No
No '1' No No No No
Yes '2' Yes Yes Yes Yes
No '2' Yes No No No
Yes '3' No Yes No No
No '3' No No Yes No
Yes '1' Yes No Yes No
No '1' No No No No
Yes '2' Yes Yes Yes Yes
No '2' Yes No No No
Yes '3' No Yes No No
No '3' No No Yes No
;
run;
proc cas;
session casauto;
/* Charge les données synthétiques de la session SAS locale (WORK) vers la session CAS (mylib) */
upload caslib="mylib" data="work.birthwgt_synth_local" casout="birthwgt_synth" promote;
quit;
/* Les exemples suivants utiliseront 'mylib.birthwgt_synth' */
1
/* --- Configuration de la session CAS et de la bibliothèque --- */
2
PROC CAS;
3
SESSION casauto;
4
/* Crée une bibliothèque CAS temporaire 'mylib' si elle n'existe pas */
5
IF not caslibexists('mylib') THENDO;
6
caslib mylib datasource=(path='/tmp/') global;
7
END;
8
QUIT;
9
10
/* --- Données synthétiques pour la démonstration (SAS Data Step local) --- */
11
DATA work.birthwgt_synth_local;
12
INPUT Smoking $ AgeGroup $ Married $ Drinking $ SomeCollege $ Death $;
13
DATALINES;
14
Yes '1' Yes No Yes No
15
No '1' No No No No
16
Yes '2' Yes Yes Yes Yes
17
No '2' Yes No No No
18
Yes '3' No Yes No No
19
No '3' No No Yes No
20
Yes '1' Yes No Yes No
21
No '1' No No No No
22
Yes '2' Yes Yes Yes Yes
23
No '2' Yes No No No
24
Yes '3' No Yes No No
25
No '3' No No Yes No
26
;
27
RUN;
28
29
PROC CAS;
30
SESSION casauto;
31
/* Charge les données synthétiques de la session SAS locale (WORK) vers la session CAS (mylib) */
/* Les exemples suivants utiliseront 'mylib.birthwgt_synth' */
2 Codeblock
PROC GRADBOOST / PROC CAEFFECT
Erklärung : Dieses Beispiel demonstriert die minimale Verwendung von PROC CAEFFECT zur Schätzung mittels Regressionsanpassung. Ein GRADBOOST-Modell wird zunächst auf dem Datensatz 'mylib.birthwgt_synth' trainiert und in einem Analytic Store (mylib.gbOutMod_ex1) gespeichert. Anschließend verwendet PROC CAEFFECT dieses vortrainierte Modell, spezifiziert durch die Option RESTORE=, um die potenziellen Outcome-Mittelwerte (POM) für die verschiedenen Ebenen der Behandlungsvariablen 'Smoking' zu berechnen.
Kopiert!
/* --- Étape 1 : Entraîner un modèle GRADBOOST et le sauvegarder --- */
proc gradboost data=mylib.birthwgt_synth ntrees=10 seed=12345;
target Death / level=nominal;
input Smoking AgeGroup Married Drinking SomeCollege / level=nominal;
savestate rstore=mylib.gbOutMod_ex1;
run;
/* --- Étape 2 : Exécuter PROC CAEFFECT avec le modèle restauré --- */
proc caeffect data=mylib.birthwgt_synth;
treatvar Smoking;
outcomevar Death(event='Yes') / type=Categorical;
outcomemodel restore=mylib.gbOutMod_ex1 predname=P_DeathYes;
pom treatlev='Yes';
pom treatlev='No';
run;
/* --- Nettoyage de l'analytic store --- */
proc astore;
delete rstore=mylib.gbOutMod_ex1;
quit;
1
/* --- Étape 1 : Entraîner un modèle GRADBOOST et le sauvegarder --- */
Erklärung : Dieses Beispiel erweitert die Verwendung von PROC CAEFFECT, indem die für die Anpassung verwendeten Kovariaten explizit über die ADJUST-Anweisung spezifiziert werden. Es zeigt auch, wie die detaillierten Ergebnisse der POM-Schätzung in einer CAS-Ausgabetabelle (mylib.caeffect_stats_ex2) mit Hilfe der OUTSTAT-Option gespeichert werden können, was eine spätere Analyse der Schätzergebnisse ermöglicht.
Kopiert!
/* --- Étape 1 : Entraîner un modèle GRADBOOST et le sauvegarder --- */
proc gradboost data=mylib.birthwgt_synth ntrees=20 seed=54321; /* Plus d'arbres pour l'exemple */
target Death / level=nominal;
input Smoking AgeGroup Married Drinking SomeCollege / level=nominal;
savestate rstore=mylib.gbOutMod_ex2;
run;
/* --- Étape 2 : Exécuter PROC CAEFFECT avec des options supplémentaires --- */
proc caeffect data=mylib.birthwgt_synth;
treatvar Smoking;
outcomevar Death(event='Yes') / type=Categorical;
outcomemodel restore=mylib.gbOutMod_ex2 predname=P_DeathYes;
pom treatlev='Yes';
pom treatlev='No';
/* Spécification explicite des variables d'ajustement (confounding variables) */
adjust AgeGroup Married Drinking SomeCollege;
/* Sauvegarde des statistiques d'estimation dans une table CAS */
outstat mylib.caeffect_stats_ex2;
run;
/* --- Afficher les résultats sauvegardés --- */
proc print data=mylib.caeffect_stats_ex2; run;
/* --- Nettoyage --- */
proc astore;
delete rstore=mylib.gbOutMod_ex2;
quit;
proc cas;
droptable "caeffect_stats_ex2" incaslib="mylib";
quit;
1
/* --- Étape 1 : Entraîner un modèle GRADBOOST et le sauvegarder --- */
2
PROC GRADBOOSTDATA=mylib.birthwgt_synth ntrees=20 seed=54321; /* Plus d'arbres pour l'exemple */
3
target Death / level=nominal;
4
INPUT Smoking AgeGroup Married Drinking SomeCollege / level=nominal;
5
savestate rstore=mylib.gbOutMod_ex2;
6
RUN;
7
8
/* --- Étape 2 : Exécuter PROC CAEFFECT avec des options supplémentaires --- */
/* Spécification explicite des variables d'ajustement (confounding variables) */
16
adjust AgeGroup Married Drinking SomeCollege;
17
/* Sauvegarde des statistiques d'estimation dans une table CAS */
18
outstat mylib.caeffect_stats_ex2;
19
RUN;
20
21
/* --- Afficher les résultats sauvegardés --- */
22
PROC PRINTDATA=mylib.caeffect_stats_ex2; RUN;
23
24
/* --- Nettoyage --- */
25
PROC ASTORE;
26
delete rstore=mylib.gbOutMod_ex2;
27
QUIT;
28
PROC CAS;
29
droptable "caeffect_stats_ex2" incaslib="mylib";
30
QUIT;
4 Codeblock
PROC GRADBOOST / PROC ASTORE / PROC CAEFFECT
Erklärung : Dieses fortgeschrittene Beispiel demonstriert einen Ansatz, bei dem kontrafaktische Outcome-Vorhersagen für jede Behandlungsebene zunächst separat mit PROC ASTORE berechnet werden. Das vortrainierte GRADBOOST-Modell wird verwendet, um den Datensatz zweimal zu bewerten: einmal, indem 'Smoking' auf 'Yes' gesetzt wird, und einmal, indem 'Smoking' auf 'No' gesetzt wird. Die resultierenden Vorhersagespalten werden dann direkt an PROC CAEFFECT über die Option PREDOUT= der POM-Anweisung übergeben. Diese Methode ist flexibel für komplexe Outcome-Modelle oder spezifische Datenverarbeitungsketten.
Kopiert!
/* --- Étape 1 : Entraîner un modèle GRADBOOST et le sauvegarder --- */
proc gradboost data=mylib.birthwgt_synth ntrees=15 seed=67890;
target Death / level=nominal;
input Smoking AgeGroup Married Drinking SomeCollege / level=nominal;
savestate rstore=mylib.gbOutMod_ex3;
run;
/* --- Étape 2 : Calculer les prédictions contrefactuelles pour Smoking='Yes' --- */
data mylib.gbPredData_temp;
set mylib.birthwgt_synth;
tempSmoking = Smoking; /* Sauvegarde la valeur observée de Smoking */
Smoking = 'Yes'; /* Impose 'Yes' pour la prédiction contrefactuelle */
run;
proc astore;
score data=mylib.gbPredData_temp out=mylib.gbPredData_temp_scored_yes
rstore=mylib.gbOutMod_ex3
copyvars=(tempSmoking AgeGroup Married Drinking SomeCollege Death);
run;
/* --- Étape 3 : Calculer les prédictions contrefactuelles pour Smoking='No' --- */
data mylib.gbPredData_final;
set mylib.gbPredData_temp_scored_yes;
rename P_DeathYes = Pred_DeathYes_SmokingYes; /* Renomme la première prédiction */
Smoking = 'No'; /* Impose 'No' pour la deuxième prédiction contrefactuelle */
run;
proc astore;
score data=mylib.gbPredData_final out=mylib.gbPredData_final_scored
rstore=mylib.gbOutMod_ex3
copyvars=(tempSmoking Pred_DeathYes_SmokingYes Death);
run;
/* --- Étape 4 : Nettoyage et préparation des données finales pour CAEFFECT --- */
data mylib.gbPredData_final_scored;
set mylib.gbPredData_final_scored;
rename P_DeathYes = Pred_DeathYes_SmokingNo;
Smoking=tempSmoking; /* Restaure la variable Smoking observée */
drop tempSmoking;
run;
/* --- Étape 5 : Exécuter PROC CAEFFECT avec les prédictions précalculées --- */
proc caeffect data=mylib.gbPredData_final_scored;
treatvar Smoking;
outcomevar Death(event='Yes') / type=Categorical;
pom treatlev='Yes' predOut=Pred_DeathYes_SmokingYes;
pom treatlev='No' predOut=Pred_DeathYes_SmokingNo;
run;
/* --- Nettoyage --- */
proc astore;
delete rstore=mylib.gbOutMod_ex3;
quit;
proc cas;
droptable "gbPredData_temp" incaslib="mylib";
droptable "gbPredData_temp_scored_yes" incaslib="mylib";
droptable "gbPredData_final" incaslib="mylib";
droptable "gbPredData_final_scored" incaslib="mylib";
quit;
1
/* --- Étape 1 : Entraîner un modèle GRADBOOST et le sauvegarder --- */
Erklärung : Dieses Beispiel illustriert die Schätzung des kausalen Effekts mittels der Inverse Probability Weighting (IPW)-Methode, einer Alternative zur Regressionsanpassung. Die IPW-Methode erfordert die Modellierung der Propensity-Scores (die Wahrscheinlichkeit, einer bestimmten Behandlung basierend auf den Kovariaten zugewiesen zu werden). Hier wird ein logistisches Modell (PROC LOGSELECT) verwendet, um diese Scores vorherzusagen, die dann über die Option PROPENSITY= in der OUTCOMEMODEL-Anweisung an PROC CAEFFECT übergeben werden, wobei METHOD IPW spezifiziert wird. Dies ist ein Beispiel für die Flexibilität von PROC CAEFFECT bei der Verwendung verschiedener Methoden zur kausalen Schätzung.
Kopiert!
/* --- Étape 1 : Estimer les scores de propension avec PROC LOGSELECT --- */
/* Pour la méthode IPW, nous modélisons la probabilité de recevoir le traitement (Smoking) */
proc logselect data=mylib.birthwgt_synth;
model Smoking = AgeGroup Married Drinking SomeCollege;
output out=mylib.propensity_scores pred=Propensity;
run;
/* --- Étape 2 : Exécuter PROC CAEFFECT avec la méthode IPW --- */
proc caeffect data=mylib.propensity_scores;
treatvar Smoking;
outcomevar Death(event='Yes') / type=Categorical;
outcomemodel propensity=Propensity; /* Utilise les scores de propension prédits */
pom treatlev='Yes';
pom treatlev='No';
method ipw; /* Spécifie la méthode IPW */
run;
/* --- Nettoyage --- */
proc cas;
droptable "propensity_scores" incaslib="mylib";
quit;
1
/* --- Étape 1 : Estimer les scores de propension avec PROC LOGSELECT --- */
2
/* Pour la méthode IPW, nous modélisons la probabilité de recevoir le traitement (Smoking) */
3
PROC LOGSELECTDATA=mylib.birthwgt_synth;
4
model Smoking = AgeGroup Married Drinking SomeCollege;
/* --- Étape 2 : Exécuter PROC CAEFFECT avec la méthode IPW --- */
9
PROC CAEFFECTDATA=mylib.propensity_scores;
10
treatvar Smoking;
11
outcomevar Death(event='Yes') / type=Categorical;
12
outcomemodel propensity=Propensity; /* Utilise les scores de propension prédits */
13
pom treatlev='Yes';
14
pom treatlev='No';
15
method ipw; /* Spécifie la méthode IPW */
16
RUN;
17
18
/* --- Nettoyage --- */
19
PROC CAS;
20
droptable "propensity_scores" incaslib="mylib";
21
QUIT;
22
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 : Last updated: November 25, 2025
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.