Veröffentlicht am :
Statistik CREATION_INTERNE

Monte-Carlo-Permutationstest mit PROC IML und PROC TTEST

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Das Skript erstellt zunächst einen manuellen Datensatz. Es berechnet die beobachtete Mittelwertsdifferenz mittels eines klassischen PROC TTEST. Anschließend wird PROC IML verwendet, um 1000 Permutationen der Antwortvariablen ('Money') zu generieren, während die Gruppen ('School') fest bleiben. Diese Permutationen werden massenhaft von PROC TTEST analysiert, um eine Nullverteilung der Mittelwertsdifferenzen zu erzeugen. Schließlich vergleicht das Skript die beobachtete Differenz mit dieser Verteilung, um einen empirischen p-Wert zu schätzen.
Datenanalyse

Type : CREATION_INTERNE


Die Daten werden direkt im Code über einen Data Step mit DATALINES (Variablen School und Money) definiert.

1 Codeblock
DATA STEP Data
Erklärung :
Erstellung des Datensatzes 'cash', der die Beobachtungen für zwei Schulen (Schule 0 und 1) und die zugehörigen Geldbeträge enthält.
Kopiert!
1DATA cash;
2 INPUT School Money;
3 
4/* School = 0 = SMU
5 School = 1 = Seattle U */
6 
7DATALINES;
80 34
90 1200
100 23
110 50
120 60
130 50
140 0
150 0
160 30
170 89
180 0
190 300
200 400
210 20
220 10
230 0
241 20
251 10
261 5
271 0
281 30
291 50
301 0
311 100
321 110
331 0
341 40
351 10
361 3
371 0
38;
2 Codeblock
PROC TTEST
Erklärung :
Ausführung des initialen T-Tests auf den realen Daten, um die beobachtete Statistik (die tatsächliche Mittelwertsdifferenz) zu erhalten.
Kopiert!
1PROC TTEST DATA=cash;
2 class School;
3 *may need to convert School to numeric;
4 var Money;
5RUN;
3 Codeblock
PROC IML Data
Erklärung :
Verwendung der IML-Matrixsprache, um Daten zu lesen, 1000 zufällige Permutationen der Spalte 'Money' (Funktion ranperm) zu generieren und das Ergebnis in einer breiten Tabelle 'newds' zu speichern. ODS-Ausgaben sind zur Leistungsverbesserung deaktiviert.
Kopiert!
1ods OUTPUT off;
2ods exclude all;
3*borrowed code from internet ... randomizes observations and creates a matrix ... one row per randomization ;
4 
5PROC IML ;
6 use cash;
7 read all var{School Money} into x;
8 *change varibale names here ... make sure it is class then var ... in that order.;
9 p=t(ranperm(x[, 2], 1000));
10 *Note that the "1000" here is the number of permutations. ;
11 paf=x[, 1]||p;
12 create newds from paf;
13 append from paf;
14 QUIT;
15 *calculates differences and creates a histogram;
16 ods OUTPUT conflimits=diff;
4 Codeblock
PROC TTEST Data
Erklärung :
Massenhafte Ausführung von T-Tests auf den 1000 permutierten Spalten. Die Tabelle 'newds' enthält die Klasse in col1 und die Permutationen in col2-col1001. Die Ergebnisse (Konfidenzgrenzen/Differenzen) werden in der Tabelle 'diff' über das zuvor deklarierte 'ods output conflimits=diff' erfasst.
Kopiert!
1PROC TTEST DATA=newds plots=none;
2 class col1;
3 var col2 - col1001;
4RUN;
5 
6ods OUTPUT on;
7ods exclude none;
5 Codeblock
PROC UNIVARIATE
Erklärung :
Analyse der Verteilung der simulierten Mittelwertsdifferenzen (gespeichert in der Variablen 'mean' der Tabelle 'diff') zur Visualisierung der Nullverteilung.
Kopiert!
1PROC UNIVARIATE DATA=diff;
2 where method="Pooled";
3 var mean;
4 histogram mean;
5RUN;
6 Codeblock
DATA STEP Data
Erklärung :
Berechnung des empirischen p-Werts: Es werden die Iterationen gefiltert, in denen die simulierte Differenz (im Absolutwert) größer oder gleich der tatsächlich beobachteten Differenz ist (hier fest auf 114.6 codiert).
Kopiert!
1DATA numdiffs;
2 SET diff;
3 where method="Pooled";
4 
5 IF abs(mean) >=114.6;
6 *if abs(mean) >=44.0667;
7 *you will need to put the observed difference you got from t test above here. note IF you have a one or two tailed test.;
8RUN;
7 Codeblock
PROC PRINT
Erklärung :
Anzeige der identifizierten Extremfälle zur Überprüfung.
Kopiert!
1 
2PROC PRINT
3DATA=numdiffs;
4where method="Pooled";
5RUN;
6 
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.