Le script commence par utiliser PROC POWER pour calculer la puissance théorique pour diverses combinaisons de paramètres d'un test de deux moyennes. Il génère ensuite des graphiques pour visualiser ces relations. Une implémentation manuelle du calcul de puissance est également incluse pour comparaison. La deuxième partie du script met en œuvre une simulation de Monte Carlo pour estimer empiriquement la puissance : il génère des milliers de jeux de données sous différentes conditions, effectue des tests t sur chacun, puis calcule la proportion de tests significatifs, fournissant ainsi une estimation simulée de la puissance.
Analyse des données
Type : CREATION_INTERNE
Toutes les données utilisées dans ce script sont générées en interne, soit par PROC POWER (calculs de puissance), soit par des étapes DATA STEP (génération de données simulées pour le test t et calcul manuel de puissance).
1 Bloc de code
PROC POWER
Explication : Ce bloc utilise la procédure PROC POWER pour calculer la puissance statistique pour un test de comparaison de deux moyennes indépendantes (test=diff). Il explore différentes combinaisons de la différence des moyennes (meandiff), de l'écart-type (stddev), du niveau de signification (alpha) et de la taille totale de l'échantillon (ntotal). La valeur `power = .` indique que la puissance est la valeur à calculer.
Explication : Ce bloc active le système de destination de sortie (ODS) pour générer des graphiques. PROC POWER est exécutée avec l'option `plotonly` pour ne produire que des graphiques de puissance, sans les tables textuelles. La sous-commande `plot` personnalise l'apparence des graphiques, permettant de faire varier la couleur, le type de ligne et le symbole en fonction de différentes variables. `ods output output=powdata;` sauvegarde les données utilisées pour les graphiques dans un jeu de données nommé `powdata`.
Copié !
ods graphics on;
proc power plotonly;
twosamplemeans test=diff
meandiff = 5 6
stddev = 12 18
alpha = 0.05 0.1
ntotal = 100 200
power = .;
plot;
run;
ods graphics off;
plot
min=60
yopts=(ref=0.9 crossref=yes)
vary(color by stddev, linestyle by meandiff, symbol by alpha);
ods output output=powdata;
1
ods graphics on;
2
3
PROC POWER plotonly;
4
twosamplemeans test=diff
5
meandiff = 56
6
stddev = 1218
7
alpha = 0.050.1
8
ntotal = 100200
9
power = .;
10
plot;
11
RUN;
12
13
ods graphics off;
14
15
plot
16
min=60
17
yopts=(ref=0.9 crossref=yes)
18
vary(color BY stddev, linestyle BY meandiff, symbol BY alpha);
19
20
ods OUTPUTOUTPUT=powdata;
3 Bloc de code
DATA STEP Data
Explication : Ce DATA STEP crée un jeu de données nommé `tpow` en calculant la puissance pour chaque combinaison des paramètres spécifiés. `ncp` (paramètre de non-centralité) et `critval` (valeur critique de la distribution F) sont calculés. La puissance est ensuite déterminée à l'aide de la fonction `sdf` (fonction de densité de survie) de la distribution F non centrale.
Copié !
data tpow;
do meandiff = 5, 6;
do stddev = 12, 18;
do alpha = 0.05, 0.1;
do ntotal = 100, 200;
ncp = ntotal * 0.5 * 0.5 * meandiff**2 / stddev**2;
critval = finv(1-alpha, 1, ntotal-2, 0);
power = sdf('f', critval, 1, ntotal-2, ncp);
output;
end;
end;
end;
end;
run;
Explication : Ce bloc utilise PROC PRINT pour afficher le contenu du jeu de données `tpow`, permettant de visualiser les valeurs de puissance calculées manuellement.
Copié !
proc print data=tpow;
run;
1
PROC PRINTDATA=tpow;
2
RUN;
5 Bloc de code
DATA STEP Data
Explication : Ce bloc initialise plusieurs variables macro (`meandiff`, `stddev`, `alpha`, `ntotal`, `nsim`) qui seront utilisées dans la simulation. Le DATA STEP `simdata` génère ensuite un grand nombre (`&nsim`) de jeux de données simulées. Pour chaque simulation (`isim`), il crée des observations pour deux groupes (`group` 1 et 2) où la variable `y` est tirée d'une distribution normale. Le groupe 1 a une moyenne de 0, et le groupe 2 a une moyenne égale à `&meandiff`, avec un écart-type commun `&stddev`. `call streaminit(123)` assure la reproductibilité de la génération des nombres aléatoires.
Copié !
%let meandiff = 5;
%let stddev = 12;
%let alpha = 0.05;
%let ntotal = 100;
%let nsim = 10000;
data simdata;
call streaminit(123);
do isim = 1 to ≁
do i = 1 to floor(&ntotal/2);
group = 1;
y = rand('normal', 0 , &stddev);
output;
group = 2;
y = rand('normal', &meandiff, &stddev);
output;
end;
end;
run;
1
%let meandiff = 5;
2
%let stddev = 12;
3
%let alpha = 0.05;
4
%let ntotal = 100;
5
%let nsim = 10000;
6
7
DATA simdata;
8
call streaminit(123);
9
DO isim = 1 to ≁
10
DO i = 1 to floor(&ntotal/2);
11
group = 1;
12
y = rand('normal', 0 , &stddev);
13
OUTPUT;
14
group = 2;
15
y = rand('normal', &meandiff, &stddev);
16
OUTPUT;
17
END;
18
END;
19
RUN;
6 Bloc de code
PROC TTEST
Explication : Ce bloc désactive temporairement toutes les sorties ODS standards pour éviter un affichage excessif. Il exécute ensuite PROC TTEST sur les données simulées (`simdata`). L'instruction `by isim` effectue un test t pour chaque simulation individuelle. `class group` définit les deux groupes à comparer, et `var y` spécifie la variable à tester. `ods output ttests=tests` sauvegarde les résultats des tests t dans un nouveau jeu de données nommé `tests`. Enfin, les sorties ODS sont réactivées.
Copié !
ods exclude all;
proc ttest data=simdata;
ods output ttests=tests;
by isim;
class group;
var y;
run;
ods exclude none;
1
ods exclude all;
2
PROC TTESTDATA=simdata;
3
ods OUTPUT ttests=tests;
4
BY isim;
5
class group;
6
var y;
7
RUN;
8
ods exclude none;
7 Bloc de code
DATA STEP Data
Explication : Ce DATA STEP traite le jeu de données `tests` (issu de PROC TTEST). Il filtre les observations pour ne retenir que les résultats correspondant à la méthode "Pooled" (variance combinée). Une nouvelle variable `issig` est créée, prenant la valeur 1 si la p-value (`probt`) du test est inférieure au seuil alpha (`&alpha`), indiquant un test significatif, et 0 sinon.
Copié !
data tests;
set tests;
where method="Pooled";
issig = probt < α
run;
1
DATA tests;
2
SET tests;
3
where method="Pooled";
4
issig = probt < α
5
RUN;
8 Bloc de code
PROC FREQ
Explication : Ce bloc utilise PROC FREQ sur le jeu de données `tests` pour analyser la fréquence de la variable `issig`. L'option `ods select binomial` permet de n'afficher que les résultats du test binomial. L'instruction `tables issig / binomial(level='1')` calcule la proportion de tests significatifs (`issig = 1`) et fournit un intervalle de confiance binomial pour cette proportion, ce qui représente l'estimation de la puissance statistique par simulation.
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.