Publicado el :
Estadística CREATION_INTERNE

Procedimiento CAEFFECT: Estimación por Ajuste de Regresión

Este código también está disponible en: Deutsch English Français
En espera de validación
Este ejemplo explora el procedimiento CAEFFECT para estimar el efecto causal de fumar (Smoking) en la mortalidad infantil (Death). Un modelo de boosting de gradiente (PROC GRADBOOST) se ajusta primero en un conjunto de datos sintético (inspirado en SASHELP.BIRTHWGT) para predecir el resultado 'Death' en función del tabaquismo y varias variables de confusión (AgeGroup, Drinking, Married, SomeCollege). El modelo predicho se utiliza luego por PROC CAEFFECT para estimar las medias de resultado potencial para cada nivel de tratamiento ('Yes' y 'No'). El ejemplo también muestra cómo proporcionar valores de resultado contrafactuales predichos directamente a PROC CAEFFECT utilizando PROC ASTORE para la puntuación del modelo GRADBOOST restaurado, y un método alternativo (IPW) con PROC LOGSELECT para el modelado de propensión.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos sintéticos generados por DATA STEP, inspirados en el conjunto de datos SASHELP.BIRTHWGT, para garantizar la autonomía y la reproducibilidad de cada bloque de código.

1 Bloque de código
DATA STEP / PROC CAS Data
Explicación :
Este bloque de código inicializa una sesión CAS, crea una biblioteca 'mylib' si no existe, y luego genera un pequeño conjunto de datos sintéticos 'birthwgt_synth_local' en la biblioteca de trabajo de SAS. Este conjunto de datos se carga luego en la sesión CAS bajo el nombre 'mylib.birthwgt_synth' para ser utilizado por los procedimientos CAS.
¡Copiado!
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 Bloque de código
PROC GRADBOOST / PROC CAEFFECT
Explicación :
Este ejemplo ilustra el uso mínimo de PROC CAEFFECT para la estimación por ajuste de regresión. Un modelo GRADBOOST se entrena primero en el conjunto de datos 'mylib.birthwgt_synth' y se guarda en un almacén analítico (mylib.gbOutMod_ex1). Luego, PROC CAEFFECT utiliza este modelo preentrenado, especificado por la opción RESTORE=, para calcular las medias de resultado potencial (POM) para los diferentes niveles de la variable de tratamiento 'Smoking'.
¡Copiado!
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 Bloque de código
PROC GRADBOOST / PROC CAEFFECT / PROC PRINT
Explicación :
Este ejemplo amplía el uso de PROC CAEFFECT especificando explícitamente las covariables utilizadas para el ajuste a través de la instrucción ADJUST. También muestra cómo guardar los resultados detallados de la estimación de los POM en una tabla de salida CAS (mylib.caeffect_stats_ex2) usando la opción OUTSTAT, permitiendo un análisis posterior de los resultados de la estimación.
¡Copiado!
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 Bloque de código
PROC GRADBOOST / PROC ASTORE / PROC CAEFFECT
Explicación :
Este ejemplo avanzado demuestra un enfoque en el que las predicciones de resultado contrafactual para cada nivel de tratamiento se calculan primero por separado usando PROC ASTORE. El modelo GRADBOOST preentrenado se utiliza para puntuar el conjunto de datos dos veces, una vez forzando 'Smoking' a 'Yes' y otra vez forzando 'Smoking' a 'No'. Las columnas de predicción resultantes se proporcionan luego directamente a PROC CAEFFECT a través de la opción PREDOUT= de la instrucción POM. Este método es flexible para modelos de resultado complejos o cadenas de procesamiento de datos específicas.
¡Copiado!
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 Bloque de código
PROC LOGSELECT / PROC CAEFFECT
Explicación :
Este ejemplo ilustra la estimación del efecto causal usando el método de Ponderación de Probabilidad Inversa (IPW), una alternativa al ajuste por regresión. El método IPW requiere el modelado de los scores de propensión (la probabilidad de ser asignado a un tratamiento dado en función de las covariables). Aquí, un modelo logístico (PROC LOGSELECT) se utiliza para predecir estos scores, que luego se pasan a PROC CAEFFECT a través de la opción PROPENSITY= en la instrucción OUTCOMEMODEL, especificando METHOD IPW. Este es un ejemplo de la flexibilidad de PROC CAEFFECT para usar diferentes métodos de estimación causal.
¡Copiado!
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 
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Last updated: November 25, 2025