Veröffentlicht am :
Statistik CREATION_INTERNE

Dokumentationsbeispiel 18 für PROC MI

Dieser Code ist auch verfügbar auf: Español Français
Wartet auf Validierung
Das Hauptziel dieses Skripts ist es, die Verwendung von PROC MI in einem Szenario zu demonstrieren, in dem die fehlenden Daten als MNAR angenommen werden. Es beginnt mit der Erstellung eines synthetischen Datensatzes 'Mono3', der die Variablen 'Trt', 'Y0' und 'Y1' enthält, wobei 'Y1' absichtlich eingeführte fehlende Werte aufweist. Anschließend wird PROC IML verwendet, um spezifische Verschiebungsparameter für zwei Gruppen ('Trt=0' und 'Trt=1') zu simulieren, die im Datensatz 'parm1' gespeichert werden. Diese Parameter sind entscheidend für die MNAR-Anpassung in PROC MI. Schließlich wird PROC MI mit der Option `monotone reg` für die Regressionsimputation und der Option `mnar adjust` aufgerufen, um die simulierten Verschiebungen anzuwenden, wodurch ein imputierter Datensatz 'outex18' erzeugt wird. PROC PRINT-Schritte sind enthalten, um die generierten Daten, die Verschiebungsparameter und die imputierten Beobachtungen zu visualisieren.
Datenanalyse

Type : CREATION_INTERNE


Der Datensatz 'Mono3' wird direkt im Skript über einen DATA-Schritt erstellt, wobei die Funktionen `rannor` (normalverteilte Zufallszahlen) und `ranuni` (gleichverteilte Zufallszahlen) verwendet werden, um Beobachtungen zu simulieren und kontrolliert fehlende Werte einzuführen. Der Datensatz 'parm1', der die Verschiebungsparameter für die MNAR-Anpassung enthält, wird ebenfalls intern von PROC IML durch die Simulation bivariater normaler Variablen generiert.

1 Codeblock
DATA STEP Data
Erklärung :
Dieser Codeblock erstellt einen SAS-Datensatz namens 'Mono3'. Er simuliert Daten für zwei Behandlungsgruppen (Trt=0, Trt=1). Die Variablen 'Y0' und 'Y1' werden mit einer normalen Zufallskomponente (`rannor`) generiert. Fehlende Werte werden zufällig (mit einer Wahrscheinlichkeit von 30%) in die Variable 'Y1' mit der Funktion `ranuni` eingefügt. Die Schleifen `do j=1 to 5` und `do j=1 to 45` ermöglichen die Erstellung unterschiedlicher Anzahlen von Beobachtungen für die anfänglichen und nachfolgenden Beobachtungen, was potenziell eine Studie mit einem Stichprobenungleichgewicht oder einer Pilotphase, gefolgt von einer Hauptphase, simuliert. Die temporäre Variable 'j' wird vor dem Speichern des Datensatzes gelöscht.
Kopiert!
1DATA Mono3;
2 DO Trt=0 to 1;
3 DO j=1 to 5;
4 y0=10 + rannor(999);
5 y1= y0 + 0.9*Trt + rannor(999);
6 IF (ranuni(999) < 0.3) THEN y1=.;
7 OUTPUT;
8 END; END;
9 DO Trt=0 to 1;
10 DO j=1 to 45;
11 y0=10 + rannor(999);
12 y1= y0 + 0.9*Trt + rannor(999);
13 IF (ranuni(999) < 0.3) THEN y1=.;
14 OUTPUT;
15 END; END;
16 drop j;
17RUN;
2 Codeblock
PROC PRINT
Erklärung :
Dieser Block verwendet die Prozedur `PROC PRINT`, um die ersten 10 Beobachtungen des Datensatzes 'Mono3' anzuzeigen. Dies ermöglicht eine schnelle Überprüfung der Struktur der generierten Daten, einschließlich des Vorhandenseins fehlender Werte in 'Y1'. Nur die Variablen 'Trt', 'Y0' und 'Y1' werden angezeigt.
Kopiert!
1PROC PRINT DATA=mono3(obs=10);
2 var Trt Y0 Y1;
3 title 'First 10 Obs in the Trial Data';
4RUN;
3 Codeblock
PROC IML Data
Erklärung :
Dieser Block verwendet die Interactive Matrix Language (IML), um die Verschiebungsparameter zu simulieren, die für die MNAR-Anpassung in `PROC MI` erforderlich sind. Er generiert 10 (nimpute) Beobachtungen bivariater normaler Variablen ('d') mit spezifizierten Mittelwerten und einer Kovarianzmatrix. Diese Werte werden dann mit einem Imputationsidentifikator (`impu`) kombiniert, um die Matrix `delta` zu bilden. Schließlich wird `delta` im SAS-Datensatz 'parm1' gespeichert, der die Spalten '_Imputation_', 'Shift_C' (Verschiebung für die Kontrollgruppe, Trt=0) und 'Shift_T' (Verschiebung für die Behandlungsgruppe, Trt=1) enthält. Diese Werte stellen die Anpassungen dar, die auf die Verteilung der beobachteten Werte für die Imputation angewendet werden.
Kopiert!
1PROC IML;
2 
3 nimpute= 10;
4 call randseed( 15323);
5 mean= { -0.5 -1};
6 cov= { 0.01 0.001 , 0.001 0.01};
7 
8 /*---- Simulate nimpute bivariate normal variates ----*/
9 d= randnormal( nimpute, mean, cov);
10 
11 impu= j(nimpute, 1, 0);
12 DO j=1 to nimpute; impu[j,]= j; END;
13 delta= impu || d;
14 
15 /*--- Output shift parameters for groups ----*/
16 create parm1 from delta[colname={_Imputation_ Shift_C Shift_T}];
17 append from delta;
18QUIT;
4 Codeblock
PROC PRINT
Erklärung :
Dieser Block verwendet `PROC PRINT`, um den vollständigen Inhalt des Datensatzes 'parm1' anzuzeigen. Dieser Datensatz enthält die Verschiebungsparameter (`Shift_C`, `Shift_T`), die von PROC IML für jede Imputation (`_Imputation_`) simuliert wurden. Die Anzeige dieser Parameter ermöglicht die Überprüfung der Werte, die von `PROC MI` zur Anpassung der Verteilungen während der MNAR-Imputation verwendet werden.
Kopiert!
1PROC PRINT DATA=parm1;
2 var _Imputation_ Shift_C Shift_T;
3 title 'Shift Parameters for Imputations';
4RUN;
5 Codeblock
PROC MI Data
Erklärung :
Dieser Block ist das Herzstück der Analyse und verwendet die Prozedur `PROC MI`, um die multiple Imputation durchzuführen. Der Eingabedatensatz ist 'Mono3', und der Ausgabedatensatz ('outex18') enthält 10 imputierte Versionen des ursprünglichen Datensatzes. `seed` gewährleistet die Reproduzierbarkeit. Die Anweisung `class Trt;` deklariert 'Trt' als kategoriale Variable. `monotone reg;` gibt an, dass die Imputation mit einer monotonen Regressionsmethode durchgeführt wird. Die Option `mnar adjust` ist hier entscheidend: Sie zeigt eine Anpassung für nicht zufällig fehlende Daten für die Variable 'Y1' an. Es werden zwei Anpassungen angegeben: eine für die Gruppe 'Trt=0' unter Verwendung der Werte 'shift_c' aus dem Datensatz 'parm1' und eine weitere für die Gruppe 'Trt=1' unter Verwendung der Werte 'shift_t' aus 'parm1'. Dies ermöglicht die Modellierung unterschiedlicher Mechanismen fehlender Daten für jede Gruppe. Die Variablen 'Trt', 'Y0' und 'Y1' sind im Imputationsprozess enthalten.
Kopiert!
1PROC MI DATA=Mono3 seed=1423741 nimpute=10 out=outex18;
2 class Trt;
3 monotone reg;
4 mnar adjust( y1 / adjustobs=(Trt='0') parms(shift=shift_c)=parm1)
5 adjust( y1 / adjustobs=(Trt='1') parms(shift=shift_t)=parm1);
6 var Trt y0 y1;
7RUN;
6 Codeblock
PROC PRINT
Erklärung :
Dieser letzte Block verwendet `PROC PRINT`, um die ersten 10 Beobachtungen des imputierten Datensatzes 'outex18' anzuzeigen. Der Datensatz 'outex18' enthält alle ursprünglichen und imputierten Beobachtungen mit einer neuen Variablen '_Imputation_', die den Imputationsindex angibt. Dies ermöglicht die Visualisierung, wie die fehlenden Werte für die Variable 'Y1' über die verschiedenen Imputationen hinweg ergänzt wurden. Die Variablen 'Trt', 'Y0' und 'Y1' sowie die Variable '_Imputation_' werden angezeigt.
Kopiert!
1PROC PRINT DATA=outex18(obs=10);
2 var _Imputation_ Trt Y0 Y1;
3 title 'First 10 Observations of the Imputed Data Set';
4RUN;
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.
Urheberrechtsinformationen : /****************************************************************/ /* S A S S A M P L E L I B R A R Y */ /* */ /* NAME: MIEX18 */ /* TITLE: Documentation Example 18 for PROC MI */ /* PRODUCT: STAT */ /* SYSTEM: ALL */ /* KEYS: multiple imputation */ /* PROCS: MI */ /* DATA: */ /* */ /* REF: PROC MI, EXAMPLE 18 */ /* MISC: */ /****************************************************************/