Ce script effectue un test de randomisation (test de permutation) pour évaluer la différence d'âge entre les employés licenciés (Fired) et non licenciés. Il calcule d'abord la différence observée via PROC TTEST. Ensuite, il utilise PROC IML pour générer 1000 permutations aléatoires des données. Ces jeux de données permutés sont analysés en masse par PROC TTEST pour construire la distribution nulle de la différence des moyennes. Enfin, une p-value empirique est estimée en comparant la statistique observée à la distribution générée.
Analyse des données
Type : CREATION_INTERNE
Les données sont créées directement dans le script via un step DATA avec l'instruction DATALINES (variables Status et Age).
1 Bloc de code
DATA STEP Data
Explication : Création du jeu de données initial 'discriminate' contenant le statut et l'âge des individus via des données internes (datalines).
Copié !
data discriminate;
input Status Age;
/* Status = 0 = Fired
Status = 1 = Not Fired */
datalines;
0 34
0 37
...
1 54
;
run;
1
DATA discriminate;
2
INPUTSTATUS Age;
3
4
/* Status = 0 = Fired
5
Status = 1 = Not Fired */
6
7
DATALINES;
8
0 34
9
0 37
10
...
11
154
12
;
13
RUN;
2 Bloc de code
PROC TTEST
Explication : Exécution du test T de Student sur les données réelles pour obtenir la différence de moyenne observée (référence).
Copié !
proc ttest data=discriminate;
class Status;
*may need to convert School to numeric;
var Age;
run;
1
PROC TTESTDATA=discriminate;
2
class STATUS;
3
*may need to convert School to numeric;
4
var Age;
5
RUN;
3 Bloc de code
PROC IML Data
Explication : Utilisation du langage matriciel IML pour générer 1000 permutations aléatoires de la variable 'Age'. Création d'un tableau large 'newds' où la première colonne est le statut et les suivantes sont les permutations.
Copié !
ods output off;
ods exclude all;
proc iml ;
use discriminate;
read all var{Status Age} into x;
p=t(ranperm(x[, 2], 1000));
paf=x[, 1]||p;
create newds from paf;
append from paf;
quit;
1
ods OUTPUT off;
2
ods exclude all;
3
PROC IML ;
4
use discriminate;
5
read all var{STATUS Age} into x;
6
p=t(ranperm(x[, 2], 1000));
7
paf=x[, 1]||p;
8
create newds from paf;
9
append from paf;
10
QUIT;
4 Bloc de code
PROC TTEST Data
Explication : Exécution massive de tests T sur les 1000 colonnes permutées (col2 à col1001) contre le statut (col1). Les sorties ODS sont supprimées pour la performance, sauf la table 'conflimits' qui est sauvegardée dans 'diff'.
Copié !
ods output conflimits=diff;
proc ttest data=newds plots=none;
class col1;
var col2 - col1001;
run;
ods output on;
ods exclude none;
1
ods OUTPUT conflimits=diff;
2
3
PROC TTESTDATA=newds plots=none;
4
class col1;
5
var col2 - col1001;
6
RUN;
7
8
ods OUTPUT on;
9
ods exclude none;
5 Bloc de code
PROC UNIVARIATE
Explication : Analyse de la distribution des différences de moyennes générées aléatoirement (méthode Pooled) et affichage d'un histogramme.
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 : Filtrage des résultats pour compter combien de permutations ont produit une différence absolue supérieure ou égale à la valeur observée (ici hardcodée à 1.9238, qui devrait correspondre au résultat du premier PROC TTEST).
Copié !
data numdiffs;
set diff;
where method="Pooled";
if abs(mean) >=1.9238;
run;
1
DATA numdiffs;
2
SET diff;
3
where method="Pooled";
4
5
IF abs(mean) >=1.9238;
6
RUN;
7 Bloc de code
PROC PRINT
Explication : Affichage des permutations extrêmes pour permettre le calcul manuel de la p-value (nombre d'observations extrêmes / 1000).
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.
Informations de Copyright : Mention 'borrowed code from internet' présente dans les commentaires.
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.