Le script crée d'abord un jeu de données manuel. Il calcule la différence de moyenne observée via un PROC TTEST classique. Ensuite, il utilise PROC IML pour générer 1000 permutations de la variable réponse ('Money') tout en maintenant les groupes ('School') fixes. Ces permutations sont analysées en masse par PROC TTEST pour générer une distribution nulle des différences de moyennes. Enfin, le script compare la différence observée à cette distribution pour estimer une p-value empirique.
Analyse des données
Type : CREATION_INTERNE
Les données sont définies directement dans le code via un Data Step utilisant DATALINES (variables School et Money).
1 Bloc de code
DATA STEP Data
Explication : Création du jeu de données 'cash' contenant les observations pour deux écoles (School 0 et 1) et les montants associés.
Explication : Exécution du t-test initial sur les données réelles pour obtenir la statistique observée (la différence de moyenne réelle).
Copié !
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 Bloc de code
PROC IML Data
Explication : Utilisation du langage matriciel IML pour lire les données, générer 1000 permutations aléatoires de la colonne 'Money' (fonction ranperm) et sauvegarder le résultat dans une table large 'newds'. Les sorties ODS sont désactivées pour améliorer les performances.
Copié !
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 Bloc de code
PROC TTEST Data
Explication : Exécution massive de t-tests sur les 1000 colonnes permutées. La table 'newds' contient la classe en col1 et les permutations en col2-col1001. Les résultats (limites de confiance/différences) sont capturés dans la table 'diff' via le 'ods output conflimits=diff' déclaré précédemment.
Copié !
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 Bloc de code
PROC UNIVARIATE
Explication : Analyse de la distribution des différences de moyennes simulées (stockées dans la variable 'mean' de la table 'diff') pour visualiser la distribution nulle.
Copié !
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 Bloc de code
DATA STEP Data
Explication : Calcul de la p-value empirique : on filtre les itérations où la différence simulée (en valeur absolue) est supérieure ou égale à la différence réellement observée (hardcodée ici à 114.6).
Copié !
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 Bloc de code
PROC PRINT
Explication : Affichage des cas extrêmes identifiés pour vérification.
Copié !
proc print data=numdiffs;
where method="Pooled";
run;
1
2
PROC PRINT
3
DATA=numdiffs;
4
where method="Pooled";
5
RUN;
6
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.