Dieses Dokument beschreibt die Anwendung doppelt robuster Methoden (AIPW und TMLE) mittels der CAEFFECT-Prozedur. Diese Methoden sind besonders nützlich, da sie konsistent bleiben, wenn entweder das Behandlungsmodell oder das Ergebnismodell korrekt spezifiziert ist (aber nicht notwendigerweise beide). Das Beispiel verwendet `PROC LOGSELECT` zur Modellierung der Wahrscheinlichkeit einer Behandlung (hier: Raucherentwöhnung) und `PROC BART` zur Modellierung des Ergebnisses (Gewichtsveränderung). Die Vorhersagen dieser Zwischenmodelle (`pTrt`, `pCnt`, `P_Change`) werden dann als Eingaben für die Prozedur `CAEFFECT` verwendet. Die CAEFFECT-Prozedur schätzt die mittleren potenziellen Ergebnisse (POM) für verschiedene Behandlungsniveaus und berechnet die Differenz zwischen diesen POMs, um den durchschnittlichen Behandlungseffekt (ATE) zu schätzen. Dieser Ansatz ist robust gegenüber Fehlspezifikationen in einem der beiden Modelle.
Datenanalyse
Type : CREATION_INTERNE
Die Beispiele verwenden synthetische Daten, die mit einem `DATA step` und `datalines` generiert wurden, um deren Autonomie zu gewährleisten. Eine Tabelle `SmokingWeight` wird in der CAS-Sitzung erstellt.
1 Codeblock
PROC CAEFFECT Data
Erklärung : Dieses Beispiel zeigt die grundlegende Schätzung kausaler Effekte mittels der AIPW (Augmented Inverse Probability Weighting) Methode.
1. **Datenvorbereitung:** Eine Tabelle `mylib.SmokingWeight` wird in der CAS-Sitzung mit synthetischen Daten erstellt.
2. **Behandlungsmodell:** `PROC LOGSELECT` wird verwendet, um die Wahrscheinlichkeit des Raucherentzugs (`Quit=1`) in Abhängigkeit von Kovariaten zu modellieren, wobei die Wahrscheinlichkeit `pTrt` und `pCnt` (Wahrscheinlichkeit, nicht aufzuhören) generiert wird.
3. **Ergebnismodell:** `PROC BART` (Bayesian Additive Regression Trees) wird ausgeführt, um die Gewichtsveränderung (`Change`) in Abhängigkeit von Kovariaten und dem Raucherstatus (`Quit`) zu modellieren, und das angepasste Modell wird in `mylib.bartOutMod` gespeichert.
4. **PROC CAEFFECT:** Die Prozedur `CAEFFECT` wird dann mit `METHOD=AIPW` aufgerufen, wobei die Behandlungsvariable (`Quit`), die Ergebnisvariable (`Change`) und das Ergebnismodell (`mylib.bartOutMod`) angegeben werden. Die `POM`-Anweisungen definieren die potenziellen Ergebnisse für jedes Behandlungsniveau (aufhören oder nicht) unter Verwendung der vorhergesagten Wahrscheinlichkeiten. Die `DIFFERENCE`-Anweisung berechnet die Differenz zwischen den Mittelwerten der potenziellen Ergebnisse.
Kopiert!
/* Création d'une session CAS si elle n'existe pas */
cas;
/* Assurez-vous que la caslib mylib est disponible et mappée */
caslib _all_ assign;
/* Création de la table de données SmokingWeight */
data mylib.SmokingWeight;
infile datalines;
input Sex $ Race $ Education $ Exercise $ Activity $ Age YearsSmoke PerDay Quit Change;
datalines;
Female White HighSchool Light Active 30 10 15 0 2.5
Male Black College Moderate Sedentary 45 20 20 1 5.0
Female Asian GradSchool Heavy Active 55 30 25 1 7.2
Male White HighSchool Light Sedentary 35 12 10 0 1.8
Female Black College Moderate Active 40 18 18 1 4.5
Male Asian GradSchool Heavy Sedentary 60 25 22 0 3.1
Female White HighSchool Light Active 28 8 12 1 6.0
Male Black College Moderate Sedentary 50 22 19 0 2.0
Female Asian GradSchool Heavy Active 48 28 24 1 8.0
Male White HighSchool Light Sedentary 32 10 11 0 1.5
;
run;
/* 1. Modélisation de la variable de traitement 'Quit' avec PROC LOGSELECT */
proc logselect data=mylib.SmokingWeight;
class Sex Race Education Exercise Activity;
model Quit(Event='1') = Sex Race Education
Exercise Activity Age YearsSmoke PerDay;
output out=mylib.swDREstData pred=pTrt copyvars=(_ALL_);
run;
/* Calcul de la probabilité de la condition de contrôle (Quit=0) */
data mylib.swDREstData;
set mylib.swDREstData;
pCnt = 1 - pTrt;
run;
/* 2. Modélisation de la variable de résultat 'Change' avec PROC BART */
proc bart data=mylib.swDREstData nTree=100 nMC=200 seed=2156;
class Sex Race Education Exercise Activity Quit;
model Change = Sex Race Education Exercise Quit Activity
Age YearsSmoke PerDay;
store out=mylib.bartOutMod;
run;
/* 3. Estimation des effets causaux avec PROC CAEFFECT (AIPW) */
proc caeffect data=mylib.swDREstData method=aipw;
treatvar Quit;
outcomevar Change;
outcomemodel restore=mylib.bartOutMod predName=P_Change;
pom treatLev=1 treatProb=pTrt;
pom treatLev=0 treatProb=pCnt;
difference evtLev=1;
run;
1
/* Création d'une session CAS si elle n'existe pas */
2
cas;
3
4
/* Assurez-vous que la caslib mylib est disponible et mappée */
5
caslib _all_ assign;
6
7
/* Création de la table de données SmokingWeight */
8
DATA mylib.SmokingWeight;
9
INFILEDATALINES;
10
INPUT Sex $ Race $ Education $ Exercise $ Activity $ Age YearsSmoke PerDay QUIT Change;
11
DATALINES;
12
Female White HighSchool Light Active 301015 0 2.5
13
Male Black College Moderate Sedentary 45202015.0
14
Female Asian GradSchool Heavy Active 55302517.2
15
Male White HighSchool Light Sedentary 351210 0 1.8
16
Female Black College Moderate Active 40181814.5
17
Male Asian GradSchool Heavy Sedentary 602522 0 3.1
18
Female White HighSchool Light Active 2881216.0
19
Male Black College Moderate Sedentary 502219 0 2.0
20
Female Asian GradSchool Heavy Active 48282418.0
21
Male White HighSchool Light Sedentary 321011 0 1.5
22
;
23
RUN;
24
25
/* 1. Modélisation de la variable de traitement 'Quit' avec PROC LOGSELECT */
Erklärung : Dieses Beispiel demonstriert die Verwendung der TMLE (Targeted Maximum Likelihood Estimation) Methode, einer Alternative zu AIPW, zur Schätzung kausaler Effekte.
1. **Datenvorbereitung und Zwischenmodelle:** Die Schritte zur Datenerstellung, Modellierung der Behandlung mit `PROC LOGSELECT` und Modellierung des Ergebnisses mit `PROC BART` sind identisch mit Beispiel 1.
2. **PROC CAEFFECT mit TMLE:** Der einzige Unterschied ist der Parameter `METHOD=tmle` in der `PROC CAEFFECT`-Anweisung. Die TMLE-Methode zielt direkt auf den Parameter von Interesse (den ATE) ab, indem sie die Vorhersagen des Ergebnismodells iterativ anpasst, was in einigen Fällen die Robustheit und Effizienz der Schätzung im Vergleich zu AIPW verbessern kann. Die erzielten Ergebnisse sind in der Regel sehr ähnlich denen von AIPW, wie die Dokumentation zeigt.
Kopiert!
/* Création d'une session CAS si elle n'existe pas */
cas;
/* Assurez-vous que la caslib mylib est disponible et mappée */
caslib _all_ assign;
/* Création de la table de données SmokingWeight */
data mylib.SmokingWeight;
infile datalines;
input Sex $ Race $ Education $ Exercise $ Activity $ Age YearsSmoke PerDay Quit Change;
datalines;
Female White HighSchool Light Active 30 10 15 0 2.5
Male Black College Moderate Sedentary 45 20 20 1 5.0
Female Asian GradSchool Heavy Active 55 30 25 1 7.2
Male White HighSchool Light Sedentary 35 12 10 0 1.8
Female Black College Moderate Active 40 18 18 1 4.5
Male Asian GradSchool Heavy Sedentary 60 25 22 0 3.1
Female White HighSchool Light Active 28 8 12 1 6.0
Male Black College Moderate Sedentary 50 22 19 0 2.0
Female Asian GradSchool Heavy Active 48 28 24 1 8.0
Male White HighSchool Light Sedentary 32 10 11 0 1.5
;
run;
/* 1. Modélisation de la variable de traitement 'Quit' avec PROC LOGSELECT */
proc logselect data=mylib.SmokingWeight;
class Sex Race Education Exercise Activity;
model Quit(Event='1') = Sex Race Education
Exercise Activity Age YearsSmoke PerDay;
output out=mylib.swDREstData pred=pTrt copyvars=(_ALL_);
run;
/* Calcul de la probabilité de la condition de contrôle (Quit=0) */
data mylib.swDREstData;
set mylib.swDREstData;
pCnt = 1 - pTrt;
run;
/* 2. Modélisation de la variable de résultat 'Change' avec PROC BART */
proc bart data=mylib.swDREstData nTree=100 nMC=200 seed=2156;
class Sex Race Education Exercise Activity Quit;
model Change = Sex Race Education Exercise Quit Activity
Age YearsSmoke PerDay;
store out=mylib.bartOutMod;
run;
/* 3. Estimation des effets causaux avec PROC CAEFFECT (TMLE) */
proc caeffect data=mylib.swDREstData method=tmle;
treatvar Quit;
outcomevar Change;
outcomemodel restore=mylib.bartOutMod predName=P_Change;
pom treatLev=1 treatProb=pTrt;
pom treatLev=0 treatProb=pCnt;
difference evtLev=1;
run;
1
/* Création d'une session CAS si elle n'existe pas */
2
cas;
3
4
/* Assurez-vous que la caslib mylib est disponible et mappée */
5
caslib _all_ assign;
6
7
/* Création de la table de données SmokingWeight */
8
DATA mylib.SmokingWeight;
9
INFILEDATALINES;
10
INPUT Sex $ Race $ Education $ Exercise $ Activity $ Age YearsSmoke PerDay QUIT Change;
11
DATALINES;
12
Female White HighSchool Light Active 301015 0 2.5
13
Male Black College Moderate Sedentary 45202015.0
14
Female Asian GradSchool Heavy Active 55302517.2
15
Male White HighSchool Light Sedentary 351210 0 1.8
16
Female Black College Moderate Active 40181814.5
17
Male Asian GradSchool Heavy Sedentary 602522 0 3.1
18
Female White HighSchool Light Active 2881216.0
19
Male Black College Moderate Sedentary 502219 0 2.0
20
Female Asian GradSchool Heavy Active 48282418.0
21
Male White HighSchool Light Sedentary 321011 0 1.5
22
;
23
RUN;
24
25
/* 1. Modélisation de la variable de traitement 'Quit' avec PROC LOGSELECT */
Erklärung : Dieses erweiterte Beispiel veranschaulicht eine Untergruppenanalyse mit der AIPW-Methode und speichert die Ergebnisse in Ausgabetabellen. Ziel ist es zu untersuchen, ob der Behandlungseffekt (Raucherentwöhnung) auf die Gewichtsveränderung je nach Geschlecht variiert.
1. **Datenvorbereitung und Zwischenmodelle:** Die Schritte sind die gleichen wie in den vorherigen Beispielen.
2. **Untergruppenanalyse:** Die Anweisung `CLASS Sex;` deklariert die Variable `Sex` als Klassifikationsvariable, und die Anweisung `BY Sex;` weist `PROC CAEFFECT` an, die Analyse für jedes Niveau von `Sex` (Männlich und Weiblich) zu wiederholen.
3. **Ausgabeoptionen:** Die `ODS OUTPUT`-Anweisungen werden verwendet, um die von der Prozedur generierten Schätzungstabellen (`Estimates`) und Differenztabellen (`OutDiff`) in neuen CAS-Tabellen (`mylib.aipwEstimates` und `mylib.aipwDifferences`) zu speichern. Dies ermöglicht eine weitere Analyse der Ergebnisse oder deren Integration in andere Berichte.
Kopiert!
/* Création d'une session CAS si elle n'existe pas */
cas;
/* Assurez-vous que la caslib mylib est disponible et mappée */
caslib _all_ assign;
/* Création de la table de données SmokingWeight */
data mylib.SmokingWeight;
infile datalines;
input Sex $ Race $ Education $ Exercise $ Activity $ Age YearsSmoke PerDay Quit Change;
datalines;
Female White HighSchool Light Active 30 10 15 0 2.5
Male Black College Moderate Sedentary 45 20 20 1 5.0
Female Asian GradSchool Heavy Active 55 30 25 1 7.2
Male White HighSchool Light Sedentary 35 12 10 0 1.8
Female Black College Moderate Active 40 18 18 1 4.5
Male Asian GradSchool Heavy Sedentary 60 25 22 0 3.1
Female White HighSchool Light Active 28 8 12 1 6.0
Male Black College Moderate Sedentary 50 22 19 0 2.0
Female Asian GradSchool Heavy Active 48 28 24 1 8.0
Male White HighSchool Light Sedentary 32 10 11 0 1.5
;
run;
/* 1. Modélisation de la variable de traitement 'Quit' avec PROC LOGSELECT */
proc logselect data=mylib.SmokingWeight;
class Sex Race Education Exercise Activity;
model Quit(Event='1') = Sex Race Education
Exercise Activity Age YearsSmoke PerDay;
output out=mylib.swDREstData pred=pTrt copyvars=(_ALL_);
run;
/* Calcul de la probabilité de la condition de contrôle (Quit=0) */
data mylib.swDREstData;
set mylib.swDREstData;
pCnt = 1 - pTrt;
run;
/* 2. Modélisation de la variable de résultat 'Change' avec PROC BART */
proc bart data=mylib.swDREstData nTree=100 nMC=200 seed=2156;
class Sex Race Education Exercise Activity Quit;
model Change = Sex Race Education Exercise Quit Activity
Age YearsSmoke PerDay;
store out=mylib.bartOutMod;
run;
/* 3. Estimation des effets causaux avec PROC CAEFFECT (AIPW) par sous-groupe */
proc caeffect data=mylib.swDREstData method=aipw;
class Sex; /* Ajout d'une variable de classification pour l'analyse par groupe */
treatvar Quit;
outcomevar Change;
outcomemodel restore=mylib.bartOutMod predName=P_Change;
pom treatLev=1 treatProb=pTrt;
pom treatLev=0 treatProb=pCnt;
difference evtLev=1;
by Sex; /* Analyse séparée par le sexe */
ods output Estimates=mylib.aipwEstimates OutDiff=mylib.aipwDifferences; /* Sauvegarde des résultats */
run;
1
/* Création d'une session CAS si elle n'existe pas */
2
cas;
3
4
/* Assurez-vous que la caslib mylib est disponible et mappée */
5
caslib _all_ assign;
6
7
/* Création de la table de données SmokingWeight */
8
DATA mylib.SmokingWeight;
9
INFILEDATALINES;
10
INPUT Sex $ Race $ Education $ Exercise $ Activity $ Age YearsSmoke PerDay QUIT Change;
11
DATALINES;
12
Female White HighSchool Light Active 301015 0 2.5
13
Male Black College Moderate Sedentary 45202015.0
14
Female Asian GradSchool Heavy Active 55302517.2
15
Male White HighSchool Light Sedentary 351210 0 1.8
16
Female Black College Moderate Active 40181814.5
17
Male Asian GradSchool Heavy Sedentary 602522 0 3.1
18
Female White HighSchool Light Active 2881216.0
19
Male Black College Moderate Sedentary 502219 0 2.0
20
Female Asian GradSchool Heavy Active 48282418.0
21
Male White HighSchool Light Sedentary 321011 0 1.5
22
;
23
RUN;
24
25
/* 1. Modélisation de la variable de traitement 'Quit' avec PROC LOGSELECT */
ods OUTPUT Estimates=mylib.aipwEstimates OutDiff=mylib.aipwDifferences; /* Sauvegarde des résultats */
58
RUN;
59
4 Codeblock
PROC CAEFFECT Data
Erklärung : Dieses Beispiel konzentriert sich auf die Integration und Optimierung für SAS Viya/CAS-Umgebungen, insbesondere für große Datensätze, unter Verwendung der TMLE-Methode.
1. **CAS-Sitzungsverwaltung und Bereinigung:** Die Befehle `cas;` und `caslib _all_ assign;` stellen sicher, dass die CAS-Sitzung aktiv und die Caslib zugeordnet ist. `PROC CASUTIL` wird verwendet, um verbleibende CAS-Tabellen vor der Erstellung neuer Daten zu bereinigen.
2. **Generierung von Daten in großem Umfang:** Eine Tabelle `mylib.SmokingWeight` mit 10.000 Beobachtungen wird generiert, um einen großen Datensatz zu simulieren, wobei `promote=yes` verwendet wird, um sicherzustellen, dass es sich um eine CAS-Tabelle handelt.
3. **Optimierung von Prozeduren:** Für `PROC LOGSELECT` und `PROC BART` werden Parameter wie `nthreads` (für `LOGSELECT`) verwendet, um die parallele Verarbeitung von CAS zu nutzen. Die Anzahl der Bäume (`nTree`) und Monte-Carlo-Iterationen (`nMC`) für `BART` wird erhöht, um ein robusteres Modell für größere Datenmengen widerzuspiegeln.
4. **PROC CAEFFECT:** Die Prozedur `CAEFFECT` wird dann mit `METHOD=TMLE` ausgeführt, um ihre Anwendbarkeit und Leistung bei größeren Datenmengen in der CAS-Umgebung zu demonstrieren.
Kopiert!
/* Création d'une session CAS si elle n'existe pas */
cas;
/* Assurez-vous que la caslib mylib est disponible et mappée */
caslib _all_ assign;
/* Nettoyage des tables existantes pour s'assurer d'un redémarrage propre */
proc casutil;
droptable casdata='SmokingWeight' incaslib='mylib' quiet;
droptable casdata='swDREstData' incaslib='mylib' quiet;
droptable casdata='bartOutMod' incaslib='mylib' quiet;
run;
/* Création d'un ensemble de données plus grand simulé */
data mylib.SmokingWeight(promote=yes);
array char_vars Sex $ Race $ Education $ Exercise $ Activity $;
do i = 1 to 10000; /* Simule 10000 observations */
call streaminit(12345 + i);
do _n_ = 1 to dim(char_vars);
char_vars(_n_) = ranword(char_vars(_n_)); /* Générer des valeurs de caractères aléatoires */
end;
if rand('UNIFORM') < 0.5 then Sex = 'Female'; else Sex = 'Male';
if rand('UNIFORM') < 0.7 then Race = 'White'; else Race = 'Black';
if rand('UNIFORM') < 0.6 then Education = 'HighSchool'; else Education = 'College';
if rand('UNIFORM') < 0.5 then Exercise = 'Light'; else Exercise = 'Moderate';
if rand('UNIFORM') < 0.5 then Activity = 'Active'; else Activity = 'Sedentary';
Age = round(rand('NORMAL', 40, 10));
YearsSmoke = round(rand('NORMAL', 15, 5));
PerDay = round(rand('NORMAL', 15, 5));
if rand('UNIFORM') < 0.5 then Quit = 0; else Quit = 1;
Change = rand('NORMAL', 3, 1.5) + (Quit * rand('NORMAL', 2, 0.5)) - (PerDay * 0.1);
output;
end;
drop i;
label Quit = "Arrêt du Tabac (0=Non, 1=Oui)";
label Change = "Changement de Poids (kg)";
run;
/* 1. Modélisation de la variable de traitement 'Quit' avec PROC LOGSELECT */
/* Utilisation de l'option NTHREADS pour le parallélisme en CAS */
proc logselect data=mylib.SmokingWeight nthreads=4;
class Sex Race Education Exercise Activity;
model Quit(Event='1') = Sex Race Education
Exercise Activity Age YearsSmoke PerDay;
output out=mylib.swDREstData pred=pTrt copyvars=(_ALL_);
run;
/* Calcul de la probabilité de la condition de contrôle (Quit=0) */
data mylib.swDREstData;
set mylib.swDREstData;
pCnt = 1 - pTrt;
run;
/* 2. Modélisation de la variable de résultat 'Change' avec PROC BART */
/* Utilisation d'un Ntree et Nmc appropriés pour de grands jeux de données */
proc bart data=mylib.swDREstData nTree=200 nMC=500 seed=2156;
class Sex Race Education Exercise Activity Quit;
model Change = Sex Race Education Exercise Quit Activity
Age YearsSmoke PerDay;
store out=mylib.bartOutMod;
run;
/* 3. Estimation des effets causaux avec PROC CAEFFECT (TMLE) pour grands ensembles de données */
proc caeffect data=mylib.swDREstData method=tmle;
treatvar Quit;
outcomevar Change;
outcomemodel restore=mylib.bartOutMod predName=P_Change;
pom treatLev=1 treatProb=pTrt;
pom treatLev=0 treatProb=pCnt;
difference evtLev=1;
run;
1
/* Création d'une session CAS si elle n'existe pas */
2
cas;
3
4
/* Assurez-vous que la caslib mylib est disponible et mappée */
5
caslib _all_ assign;
6
7
/* Nettoyage des tables existantes pour s'assurer d'un redémarrage propre */
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.
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.