Publié le :
Statistique CREATION_INTERNE

Test de permutation de Monte Carlo avec PROC IML

Ce code est également disponible en : Deutsch English Español
En attente de validation
Ce programme génère d'abord un petit jeu de données 'cash'. Il effectue un test t de Student standard pour obtenir la différence observée. Ensuite, il utilise PROC IML pour générer 1000 permutations aléatoires de la variable réponse ('Money'), simulant l'hypothèse nulle. Il exécute des tests t sur ces 1000 itérations et compare la distribution des différences simulées à la différence observée pour dériver une p-value empirique.
Analyse des données

Type : CREATION_INTERNE


Les données sont créées manuellement via l'instruction DATALINES dans le premier DATA step.

1 Bloc de code
DATA STEP Data
Explication :
Création du jeu de données 'cash' contenant deux variables : School (groupe) et Money (valeur numérique).
Copié !
1DATA cash;
2 INPUT School Money;
3 
4DATALINES;
50 34
60 1200
70 23
80 50
90 60
100 50
110 0
120 0
130 30
140 89
150 0
160 300
170 400
180 20
190 10
200 0
211 20
221 10
231 5
241 0
251 30
261 50
271 0
281 100
291 110
301 0
311 40
321 10
331 3
341 0
35;
2 Bloc de code
PROC TTEST
Explication :
Exécution du test t de Student initial sur les données observées pour calculer la différence de moyenne réelle entre les groupes.
Copié !
1PROC TTEST DATA=cash;
2 class School;
3 *may need to convert School to numeric;
4 var Money;
5RUN;
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' (rééchantillonnage sans remise) et créer une grande table 'newds' contenant les groupes originaux et les 1000 vecteurs permutés.
Copié !
1ods OUTPUT off;
2ods exclude all;
3 
4PROC IML ;
5 use cash;
6 read all var{School Money} into x;
7 p=t(ranperm(x[, 2], 1000));
8 paf=x[, 1]||p;
9 create newds from paf;
10 append from paf;
11 QUIT;
4 Bloc de code
PROC TTEST Data
Explication :
Exécution massive de tests t sur les 1000 colonnes permutées (col2 à col1001) par rapport au groupe (col1). Les résultats (limites de confiance/différences) sont capturés dans la table 'diff' via ODS OUTPUT.
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 (variable 'mean' dans la table de sortie 'diff') obtenues par permutation, avec génération 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 permutations dont la différence de moyenne est aussi extrême ou plus extrême que la différence observée (codée en dur ici à 114.6). Le nombre d'observations résultant divisé par 1000 donne la p-value estimée.
Copié !
1DATA numdiffs;
2 SET diff;
3 where method="Pooled";
4 
5 IF abs(mean) >=114.6;
6RUN;
7 
8PROC PRINT DATA=numdiffs;
9 where method="Pooled";
10RUN;
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.