Publié le :
Statistique CREATION_INTERNE

CAEFFECT Procedure: Estimation par Ajustement de Régression

Ce code est également disponible en : Deutsch English Español
En attente de validation
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é !
1/* --- Configuration de la session CAS et de la bibliothèque --- */
2PROC CAS;
3 SESSION casauto;
4 /* Crée une bibliothèque CAS temporaire 'mylib' si elle n'existe pas */
5 IF not caslibexists('mylib') THEN DO;
6 caslib mylib datasource=(path='/tmp/') global;
7 END;
8QUIT;
9 
10/* --- Données synthétiques pour la démonstration (SAS Data Step local) --- */
11DATA work.birthwgt_synth_local;
12 INPUT Smoking $ AgeGroup $ Married $ Drinking $ SomeCollege $ Death $;
13 DATALINES;
14Yes '1' Yes No Yes No
15No '1' No No No No
16Yes '2' Yes Yes Yes Yes
17No '2' Yes No No No
18Yes '3' No Yes No No
19No '3' No No Yes No
20Yes '1' Yes No Yes No
21No '1' No No No No
22Yes '2' Yes Yes Yes Yes
23No '2' Yes No No No
24Yes '3' No Yes No No
25No '3' No No Yes No
26;
27RUN;
28 
29PROC CAS;
30 SESSION casauto;
31 /* Charge les données synthétiques de la session SAS locale (WORK) vers la session CAS (mylib) */
32 upload caslib="mylib" DATA="work.birthwgt_synth_local" casout="birthwgt_synth" promote;
33QUIT;
34 
35/* 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é !
1/* --- Étape 1 : Entraîner un modèle GRADBOOST et le sauvegarder --- */
2PROC GRADBOOST DATA=mylib.birthwgt_synth ntrees=10 seed=12345;
3 target Death / level=nominal;
4 INPUT Smoking AgeGroup Married Drinking SomeCollege / level=nominal;
5 savestate rstore=mylib.gbOutMod_ex1;
6RUN;
7 
8/* --- Étape 2 : Exécuter PROC CAEFFECT avec le modèle restauré --- */
9PROC CAEFFECT DATA=mylib.birthwgt_synth;
10 treatvar Smoking;
11 outcomevar Death(event='Yes') / type=Categorical;
12 outcomemodel restore=mylib.gbOutMod_ex1 predname=P_DeathYes;
13 pom treatlev='Yes';
14 pom treatlev='No';
15RUN;
16 
17/* --- Nettoyage de l'analytic store --- */
18PROC ASTORE;
19 delete rstore=mylib.gbOutMod_ex1;
20QUIT;
21 
3 Bloc de code
PROC GRADBOOST / PROC CAEFFECT / PROC PRINT
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é !
1/* --- Étape 1 : Entraîner un modèle GRADBOOST et le sauvegarder --- */
2PROC GRADBOOST DATA=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;
6RUN;
7 
8/* --- Étape 2 : Exécuter PROC CAEFFECT avec des options supplémentaires --- */
9PROC CAEFFECT DATA=mylib.birthwgt_synth;
10 treatvar Smoking;
11 outcomevar Death(event='Yes') / type=Categorical;
12 outcomemodel restore=mylib.gbOutMod_ex2 predname=P_DeathYes;
13 pom treatlev='Yes';
14 pom treatlev='No';
15 /* 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;
19RUN;
20 
21/* --- Afficher les résultats sauvegardés --- */
22PROC PRINT DATA=mylib.caeffect_stats_ex2; RUN;
23 
24/* --- Nettoyage --- */
25PROC ASTORE;
26 delete rstore=mylib.gbOutMod_ex2;
27QUIT;
28PROC CAS;
29 droptable "caeffect_stats_ex2" incaslib="mylib";
30QUIT;
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é !
1/* --- Étape 1 : Entraîner un modèle GRADBOOST et le sauvegarder --- */
2PROC GRADBOOST DATA=mylib.birthwgt_synth ntrees=15 seed=67890;
3 target Death / level=nominal;
4 INPUT Smoking AgeGroup Married Drinking SomeCollege / level=nominal;
5 savestate rstore=mylib.gbOutMod_ex3;
6RUN;
7 
8/* --- Étape 2 : Calculer les prédictions contrefactuelles pour Smoking='Yes' --- */
9DATA mylib.gbPredData_temp;
10 SET mylib.birthwgt_synth;
11 tempSmoking = Smoking; /* Sauvegarde la valeur observée de Smoking */
12 Smoking = 'Yes'; /* Impose 'Yes' pour la prédiction contrefactuelle */
13RUN;
14 
15PROC ASTORE;
16 score DATA=mylib.gbPredData_temp out=mylib.gbPredData_temp_scored_yes
17 rstore=mylib.gbOutMod_ex3
18 copyvars=(tempSmoking AgeGroup Married Drinking SomeCollege Death);
19RUN;
20 
21/* --- Étape 3 : Calculer les prédictions contrefactuelles pour Smoking='No' --- */
22DATA mylib.gbPredData_final;
23 SET mylib.gbPredData_temp_scored_yes;
24 rename P_DeathYes = Pred_DeathYes_SmokingYes; /* Renomme la première prédiction */
25 Smoking = 'No'; /* Impose 'No' pour la deuxième prédiction contrefactuelle */
26RUN;
27 
28PROC ASTORE;
29 score DATA=mylib.gbPredData_final out=mylib.gbPredData_final_scored
30 rstore=mylib.gbOutMod_ex3
31 copyvars=(tempSmoking Pred_DeathYes_SmokingYes Death);
32RUN;
33 
34/* --- Étape 4 : Nettoyage et préparation des données finales pour CAEFFECT --- */
35DATA mylib.gbPredData_final_scored;
36 SET mylib.gbPredData_final_scored;
37 rename P_DeathYes = Pred_DeathYes_SmokingNo;
38 Smoking=tempSmoking; /* Restaure la variable Smoking observée */
39 drop tempSmoking;
40RUN;
41 
42 
43/* --- Étape 5 : Exécuter PROC CAEFFECT avec les prédictions précalculées --- */
44PROC CAEFFECT DATA=mylib.gbPredData_final_scored;
45 treatvar Smoking;
46 outcomevar Death(event='Yes') / type=Categorical;
47 pom treatlev='Yes' predOut=Pred_DeathYes_SmokingYes;
48 pom treatlev='No' predOut=Pred_DeathYes_SmokingNo;
49RUN;
50 
51/* --- Nettoyage --- */
52PROC ASTORE;
53 delete rstore=mylib.gbOutMod_ex3;
54QUIT;
55PROC CAS;
56 droptable "gbPredData_temp" incaslib="mylib";
57 droptable "gbPredData_temp_scored_yes" incaslib="mylib";
58 droptable "gbPredData_final" incaslib="mylib";
59 droptable "gbPredData_final_scored" incaslib="mylib";
60QUIT;
5 Bloc de code
PROC LOGSELECT / PROC CAEFFECT
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é !
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) */
3PROC LOGSELECT DATA=mylib.birthwgt_synth;
4 model Smoking = AgeGroup Married Drinking SomeCollege;
5 OUTPUT out=mylib.propensity_scores pred=Propensity;
6RUN;
7 
8/* --- Étape 2 : Exécuter PROC CAEFFECT avec la méthode IPW --- */
9PROC CAEFFECT DATA=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 */
16RUN;
17 
18/* --- Nettoyage --- */
19PROC CAS;
20 droptable "propensity_scores" incaslib="mylib";
21QUIT;
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