Cet exemple explore la procédure CAEFFECT pour estimer l'effet causal de fumer (Smoking) sur la mortalité infantile (Death). Un modèle de boosting de gradient (PROC GRADBOOST) est d'abord ajusté sur un jeu de données synthétique (inspiré de SASHELP.BIRTHWGT) pour prédire l'outcome 'Death' en fonction du tabagisme et de plusieurs variables de confusion (AgeGroup, Drinking, Married, SomeCollege). Le modèle prédit est ensuite utilisé par PROC CAEFFECT pour estimer les moyennes d'outcome potentiel pour chaque niveau de traitement ('Yes' et 'No'). L'exemple montre également comment fournir des valeurs d'outcome contrefactuelles prédites directement à PROC CAEFFECT en utilisant PROC ASTORE pour le scoring du modèle GRADBOOST restauré, et une méthode alternative (IPW) avec PROC LOGSELECT pour la modélisation de propension.
Analyse des données
Type : CREATION_INTERNE
Les exemples utilisent des données synthétiques générées par DATA STEP, inspirées du jeu de données SASHELP.BIRTHWGT, pour garantir l'autonomie et la reproductibilité de chaque bloc de code.
1 Bloc de code
DATA STEP / PROC CAS Data
Explication : Ce bloc de code initialise une session CAS, crée une bibliothèque 'mylib' si elle n'existe pas, puis génère un petit jeu de données synthétique 'birthwgt_synth_local' dans la bibliothèque de travail SAS. Ce jeu de données est ensuite chargé dans la session CAS sous le nom 'mylib.birthwgt_synth' pour être utilisé par les procédures CAS.
Copié !
/* --- 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 Bloc de code
PROC GRADBOOST / PROC CAEFFECT
Explication : Cet exemple illustre l'utilisation minimale de PROC CAEFFECT pour l'estimation par ajustement de régression. Un modèle GRADBOOST est d'abord entraîné sur le jeu de données 'mylib.birthwgt_synth' et sauvegardé dans un analytic store (mylib.gbOutMod_ex1). Ensuite, PROC CAEFFECT utilise ce modèle pré-entraîné, spécifié par l'option RESTORE=, pour calculer les moyennes d'outcome potentiel (POM) pour les différents niveaux de la variable de traitement 'Smoking'.
Copié !
/* --- É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 --- */
Explication : Cet exemple étend l'utilisation de PROC CAEFFECT en spécifiant explicitement les covariables utilisées pour l'ajustement via l'instruction ADJUST. Il montre également comment sauvegarder les résultats détaillés de l'estimation des POM dans une table de sortie CAS (mylib.caeffect_stats_ex2) à l'aide de l'option OUTSTAT, permettant une analyse ultérieure des résultats de l'estimation.
Copié !
/* --- É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 Bloc de code
PROC GRADBOOST / PROC ASTORE / PROC CAEFFECT
Explication : Cet exemple avancé démontre une approche où les prédictions d'outcome contrefactuelles pour chaque niveau de traitement sont d'abord calculées séparément à l'aide de PROC ASTORE. Le modèle GRADBOOST pré-entraîné est utilisé pour scorer le jeu de données deux fois, une fois en forçant 'Smoking' à 'Yes' et une fois en forçant 'Smoking' à 'No'. Les colonnes de prédiction résultantes sont ensuite fournies directement à PROC CAEFFECT via l'option PREDOUT= de l'instruction POM. Cette méthode est flexible pour des modèles d'outcome complexes ou des chaînes de traitement de données spécifiques.
Copié !
/* --- É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 --- */
Explication : Cet exemple illustre l'estimation de l'effet causal à l'aide de la méthode d'Inverse Probability Weighting (IPW), une alternative à l'ajustement par régression. La méthode IPW nécessite la modélisation des scores de propension (la probabilité d'être assigné à un traitement donné en fonction des covariables). Ici, un modèle logistique (PROC LOGSELECT) est utilisé pour prédire ces scores, qui sont ensuite passés à PROC CAEFFECT via l'option PROPENSITY= dans l'instruction OUTCOMEMODEL, en spécifiant METHOD IPW. C'est un exemple de la flexibilité de PROC CAEFFECT à utiliser différentes méthodes d'estimation causale.
Copié !
/* --- É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
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Last updated: November 25, 2025
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.