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!
/* --- 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 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!
/* --- É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 --- */
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!
/* --- É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 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!
/* --- É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 --- */
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!
/* --- É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
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
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.