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.
Erklärung : Ausführung des initialen T-Tests auf den realen Daten, um die beobachtete Statistik (die tatsächliche Mittelwertsdifferenz) zu erhalten.
Kopiert!
proc ttest data=cash;
class School;
*may need to convert School to numeric;
var Money;
run;
1
PROC TTESTDATA=cash;
2
class School;
3
*may need to convert School to numeric;
4
var Money;
5
RUN;
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!
ods output off;
ods exclude all;
*borrowed code from internet ... randomizes observations and creates a matrix ... one row per randomization ;
proc iml ;
use cash;
read all var{School Money} into x;
*change varibale names here ... make sure it is class then var ... in that order.;
p=t(ranperm(x[, 2], 1000));
*Note that the "1000" here is the number of permutations. ;
paf=x[, 1]||p;
create newds from paf;
append from paf;
quit;
*calculates differences and creates a histogram;
ods output conflimits=diff;
1
ods OUTPUT off;
2
ods exclude all;
3
*borrowed code from internet ... randomizes observations and creates a matrix ... one row per randomization ;
4
5
PROC 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!
proc ttest data=newds plots=none;
class col1;
var col2 - col1001;
run;
ods output on;
ods exclude none;
1
PROC TTESTDATA=newds plots=none;
2
class col1;
3
var col2 - col1001;
4
RUN;
5
6
ods OUTPUT on;
7
ods 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!
proc univariate data=diff;
where method="Pooled";
var mean;
histogram mean;
run;
1
PROC UNIVARIATEDATA=diff;
2
where method="Pooled";
3
var mean;
4
histogram mean;
5
RUN;
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!
data numdiffs;
set diff;
where method="Pooled";
if abs(mean) >=114.6;
*if abs(mean) >=44.0667;
*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.;
run;
1
DATA 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.;
8
RUN;
7 Codeblock
PROC PRINT
Erklärung : Anzeige der identifizierten Extremfälle zur Überprüfung.
Kopiert!
proc print data=numdiffs;
where method="Pooled";
run;
1
2
PROC PRINT
3
DATA=numdiffs;
4
where method="Pooled";
5
RUN;
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.
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.