Test de Permutation (Randomisation) pour comparaison de moyennes

Ce code est également disponible en : Deutsch English Español
Niveau de difficulté
Débutant
Publié le :
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é !
1DATA discriminate;
2 INPUT STATUS Age;
3 
4/* Status = 0 = Fired
5 Status = 1 = Not Fired */
6 
7DATALINES;
80 34
90 37
10...
111 54
12;
13RUN;
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é !
1PROC TTEST DATA=discriminate;
2 class STATUS;
3 *may need to convert School to numeric;
4 var Age;
5RUN;
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é !
1ods OUTPUT off;
2ods exclude all;
3PROC 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é !
1ods OUTPUT conflimits=diff;
2 
3PROC TTEST DATA=newds plots=none;
4 class col1;
5 var col2 - col1001;
6RUN;
7 
8ods OUTPUT on;
9ods 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é !
1PROC UNIVARIATE DATA=diff;
2 where method="Pooled";
3 var mean;
4 histogram mean;
5RUN;
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é !
1DATA numdiffs;
2 SET diff;
3 where method="Pooled";
4 
5 IF abs(mean) >=1.9238;
6RUN;
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é !
1 
2PROC PRINT
3DATA=numdiffs;
4where method="Pooled";
5RUN;
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.