options nocenter ;
/* ods html file="d:/Travail/Cours/Market_research/MM_ADD2008/Cas/cas_1_08.html"; */
Title1 H=2 J=l "Tests et Expérimentation" J=r "Cas Libraire";
Footnote1 H=1 J=l "Master Marketing - 2011" J=r "(c) Desmet Pierre" ;
* ouverture des possibilités graphiques ;
* à fermer (off)) après la procédure ;
****************************************;
ods graphics on ;
ods graphics off ;
* pour créer une sortie "rtf" avec des "objets" graphiques que l'on peut copier/coller ;
***************************************************************************************;
ods rtf ;
* "http://www.ats.ucla.edu/stat/mult_pkg/whatstat/default.htm";
Proc Import datafile="E:/Travail/Cas/Libraire/Cas_10_1.xls"
out=in dbms=xls replace ;
getnames = yes;
run ;
data in ; set in ;
/* input statut rec sex catotal_0 catotal_1 liv_1 promo_1 club_0 club_1;*/
Numobs = _N_ ; /* création automatique d'un numéro de ligne (il existe dans la variable _N_) */
* traitement des données à problème ;
********************************************;
IF catotal_0=9999 then delete ;
IF catotal_0<1 or catotal_1<1 then delete ;
IF catotal_0>1000 or catotal_1>1000 then delete ;
IF catotal_0=. or catotal_1=. then delete ;
IF sex=. then delete ;
IF rec>6 then delete ;
* transformation des variables ;
********************************************;
IF catotal_0>0 then logCA_0=log(catotal_0) ; else logCA_0=. ;
IF catotal_1>0 then logCA_1=log(catotal_1) ; else logCA_1=. ;
diff_CA = catotal_0 - catotal_1 ;
* des étiquettes (Label) pour les variables ;
********************************************;
label statut ="Statut semestre 2"
rec ="Recrutement"
sex ="Genre"
catotal_0 ="Chiffre d'affaires Semestre 0"
catotal_1 ="Chiffre d'affaires Semestre 1"
liv_1 ="Achat livre semestre 1"
promo_1 ="Pression promotionnelle semestre 1"
club_0 ="Club semestre 0"
club_1 ="Club semestre 1";
run ;
* imprimer les 20 premières observations ;
* (par défaut de toutes les variables, sinon mettre Var X ;
**********************************************************;
proc print data=in (obs =20);
* VAR var1 var2 ... ;
run ;
* dans une procédure, possibilité de ne travailler que sur un groupe avec WHERE ;
****************************************************************************;
title3 "Print pour REC=6";
proc print data=in (obs =20);
where rec=6;
run ;
* insertion directe d'un commentaire sur la page html à partir du programme ;
* ================= ne pas dépasser la longueur de cette ligne ===============================*;
data comments ; length comment $ 100 ;input comment $ & ; cards ;
en tenant compte des individus, le résultat est significatif en tenant compte des individus, le
;
proc print data=comments ;
*=================================================================;
*========= Format des modalités ==================================;
*=================================================================;
* le format est ensuite disponible pendant toute la session ;
* un format supplémentaire peut être créé n'importe quand ;
Proc format ;
Value sexfmt 1="Homme" 2="Femme";
value promofmt 1="Faible" 2="Moyenne" 3="Forte";
value ouifmt 0="Non" 1="Oui";
value recfmt 1="Mailing" 2="Téléphone" 3="Magasin" 4="Porte-à-porte" 5="Parrainage" 6="Autre" 7-high="Inconnu";
value statutfmt 1="Inactif" 0="Actif" ;
run;
*=================================================================;
*========= Graphiques ============================================;
*=================================================================;
* http://support.sas.com/sassamples/graphgallery/PROC_GCHART.html ;
* http://www.nesug.org/proceedings/nesug07/ff/ff17.pdf ;
title3 h=2 'Un histogramme fréquence par mode de recrutement ';
Proc GChart data=in ;
vbar REC / discrete type=percent inside=FREQ outside=PCT;* percent et effectifs ;
format REC recfmt. ;
run;
title3 h=2 'Un histogramme Gchart moyenne par mode de recrutement ';
Proc GChart data=in ;
vbar REC / discrete sumvar=catotal_0 inside=mean errorbar=top clm=95;* mean = moyenne ;
format REC recfmt. ;
run;
title3 h=2 'Un histogramme Gchart fréquence par mode de recrutement et sexe';
Proc gchart data=in ;
vbar REC / discrete type=percent subgroup=sex ;* percent = effectifs ;
format REC recfmt. sex sexfmt.;
run;
title3 'Histogramme de la somme des moyennes de CAtotal_0 selon le recrutement et le sexe';
Proc gchart data=in ;
vbar REC / discrete type=mean sumvar=catotal_0 subgroup=sex inside=mean errorbar=top clm=95; * calcul de la moyenne (mean) au lieu des effectifs ;
format sex sexfmt. REC recfmt. ;
run;
title3 'Histogramme de la somme des moyennes de CAtotal_0 selon le recrutement avec intervalle de confiance';
Proc gchart data=in ;
vbar REC / discrete type=mean sumvar=catotal_0 inside=mean
errorbar=both clm=95; * avec intervalle de confiance ;
format REC recfmt. ;
run;
proc tabulate data=in ;
class rec sex;
var catotal_0;
tables (rec all)*(sex all),
catotal_0*(N mean sum);
format sex sexfmt. REC recfmt. ;
run;
title3 'Un histogramme Horizontal Gchart CAtotal_0 selon le statut';
Proc gchart data=in ;
hbar Statut / discrete type=mean sumvar=catotal_0 group=sex inside=mean ; * group fait deux graphiques ;
format sex sexfmt. statut statutfmt.;
run;
title3 'Un camembert simple (rec) ';
proc gchart data=in;
pie rec /
DISCRETE PERCENT=INSIDE SLICE=OUTSIDE ;* position des informations value= , percent= ;
format rec recfmt.;
run ;
title3 'Un camembert imbriqué sex(rec) selon le catotal_0';
proc gchart data=in;
pie sex /
detail=rec
sumvar=CATOTAL_0
DETAIL_PERCENT=best DETAIL_SLICE=best DETAIL_VALUE=best
slice=arrow percent=arrow value=none DETAIL_THRESHOLD=5
DESCENDING; * type de tri de modalités ;
format sex sexfmt. rec recfmt.;
run ;
title3 'Un graphique en "Block" ';
proc Gchart data=in;
block rec / discrete sumvar=catotal_0 ;
format rec recfmt.;
run;
title3 'Un graphique point*point individuel';
SYMBOL1 V=circle C=black H=0.5;
proc gplot DATA=in;
where sex=1;
PLOT catotal_0*catotal_1 ;
run;
proc gplot DATA=in;
where sex=1;
PLOT logca_0*logca_1 ;
run;
title3 'Un graphique point*point individuel avec point selon le genre';
SYMBOL1 V=circle C=black ;
SYMBOL2 V=star C=red ;
proc gplot DATA=in;
PLOT logCA_0*logCA_1 =sex ; /* les modalités de "sexe" seront identifiées par les SYMBOL définis ci dessus */
run;
*=================================================================;
*========= Tableaux ============================================;
*=================================================================;
* création d'un tableau de statistiques pour les variables ;
* VAR : les variables sur lesquelles on fait des calculs ;
* CLASS : les variables de classification ;
* TABLE (sans "s" !) avant la virgule (les lignes), (puis les colonnes) * (statistiques)*format=;
* ALL pour demander aussi le total des modalités ;
****************************************************************************************;
proc tabulate data=in ;
var catotal_0 catotal_1;
class sex ;
table
(catotal_0 catotal_1)*(n mean std max min skewness kurtosis),
(sex all);
title3 'Procédure TABULATE';
run;
*=================================================================;
*========= Manipulation rang =====================================;
*=================================================================;
* création d'un rang (r_ca_0) pour une variable continue (catotal_0);
****************************************************************************;
proc rank data=in out=in ;
var catotal_0 catotal_1 ;
ranks r_ca_0 r_ca_1 ;
run;
* création de 2 groupes pour une variable continue (median split) ;
****************************************************************************;
proc rank data=in out=in groups= 2;
var catotal_0 catotal_1 ;
ranks r2_ca_0 r2_ca_1 ;
run;
* création de 3 groupes pour une variable continue ;
****************************************************************************;
proc rank data=in out=in groups= 3;
var catotal_0 catotal_1 ;
ranks r3_ca_0 r3_ca_1 ;
run;
* création de 10 groupes (déciles : de 0 à 9 ) pour une variable continue ;
****************************************************************************;
proc rank data=in out=in groups= 10;
var catotal_0 catotal_1 ;
ranks decil_ca_0 decil_ca_1 ;
run;
*=================================================================;
*========= Fréquences ============================================;
*=================================================================;
* http://www.technion.ac.il/docs/sas/proc/zlesstmt.htm;
title3 'Procédure FREQ';
* tableau de fréquences simples ;
********************************;
proc freq data=in ;
tables statut rec sex decil_ca_0 decil_ca_1 liv_1 promo_1 club_0 club_1;
run;
* tableau de fréquences simples avec format pour les modalités;
**************************************************************;
proc freq data=in ;
tables statut rec sex liv_1 promo_1 club_0 club_1;
format statut statutfmt. rec recfmt. sex sexfmt. club_0 clubfmt. club_1 clubfmt. promo_1 promofmt.;
run;
* un format pour discrétiser une variable continue ;
* plusieurs découpages possibles ;
***************************************************;
Proc format ;
value CAfmt 0="0" 1-50="1-50" 51-100="51-100" 101-high=">100";
value CA1fmt low-100="<=100" 101-high=">100";
proc freq data=in ;
tables catotal_0;
format catotal_0 cafmt.;
run;
*=================================================================;
*========= sélection échantillon aléatoire ======================;
*=================================================================;
*création d'une extraction (data_temp) à partir de la population ;
*****************************************************************;
Proc SQL;
create view data_temp /* data_temp , c'est le tableau de sortie */
as select statut, rec, sex, catotal_0, catotal_1, r_ca_0, r_ca_1, liv_1, promo_1, club_0, club_1,
logCA_0, logCA_1, diff_ca
FROM in; /* in , c'est le tableau d'entrée */
quit;
run;
*création d'un échantillon (DATA SAMPLE) par tirage aléatoire sans remise (SRS) de N=500 ;
*****************************************************************************************;
Proc Surveyselect data=data_temp
out = sample
method = SRS
N = 500;
ID statut rec sex catotal_0 catotal_1 r_ca_0 r_ca_1 liv_1 promo_1 club_0 club_1
logCA_0 logCA_1 diff_ca ;
run;
*=================================================================;
*========= redressement ==========================================;
*=================================================================;
* constat des différences de structure ;
***************************************;
proc freq data=in ;
tables sex;
title3 "fréquence genre pour la population" ;
run;
proc freq data= sample;
tables sex;
title3 "fréquence genre pour l'échantillon" ;
run;
* création d'un nouveau tableau DATA SAMPLE1 avec le poids (W) ;
***************************************************************;
data sample;
set sample ;
IF sex="1" then w= 24.66/19 ; else w= 75.34/81 ;
* poids = fréq(population)/fréq (échantillon) ;
* vérification du redressement ;
*******************************;
proc freq data= sample;
weight w;
tables sex;
title3 "fréquence genre redressée" ;
run;
* calcul de la valeur redressée ;
********************************;
proc tabulate data=sample;
class sex ;
var catotal_0;
tables (sex all),catotal_0* (N mean) ;
title3 "Valeur brute" ;
run;
proc tabulate data=sample;
class sex ;
var catotal_0;
weight w;
tables (sex all), N w*sum*F=10.0 catotal_0*(mean) ;
title3 "Valeur redressée de la différence de structure par sexe" ;
run;
proc tabulate data=in;
class sex ;
var catotal_0;
tables (sex all),catotal_0* (N mean) ;
title3 "Valeur sur la population" ;
run;
*=================================================================;
*========= redressement double ===================================;
*=================================================================;
* constat des différences de structure ;
***************************************;
proc freq data=in ;
tables sex*rec / nocol nopercent;
title3 "fréquence genrexrecrutement pour la population" ;
run;
proc freq data= sample;
tables sex*rec / nocol nopercent;
title3 "fréquence genre*recrutement pour l'échantillon" ;
run;
*=================================================================;
*========= Univarié : IC intervalle de confiance Fréquence =======;
*=================================================================;
* Pour générer un intervalle de confiance sur le niveau "1" (homme);
* utiliser l’option BINOMIAL de l’instruction TABLES de la procédure FREQ.;
proc freq data=in;
tables sex /binomial(level="1") ;
title3 "FREQ Intervalle de confiance proportion";
run;
*=================================================================;
*========= Calcul direct d'un IC Fréquence ======================;
*=================================================================;
data direct ;
input x freq ;
cards ;
0 320
1 150
;
proc freq data= direct;
weight freq ;
tables x /binomial(level="1") ;
title3 "FREQ Intervalle de confiance proportion";
run;
data direct ;
input proportion effectif ;
x=0 ; freq= (1-proportion)*effectif ;output ;
x=1 ; freq= effectif-freq ; output ;
cards ;
0.3 300
;
proc freq data= direct;
weight freq ;
tables x /binomial(level="1") ;
title3 "FREQ Intervalle de confiance proportion";
run;
*=================================================================;
*========= Univarié : IC intervalle de confiance Métrique =======;
*=================================================================;
* intervalle de confiance à 95% par CLM (confid limit interval);
* spécifier le risque alpha ;
**************************************************************;
proc means data = in n mean clm alpha=0.05 probt;
var catotal_0;
title3 "MEANS : intervalle de confiance";
run;
proc univariate data=in cibasic;
var catotal_0 catotal_1;
title3 "Univariate : IC de la moy, de lécart-type et de la variance";
run;
*=================================================================;
*========= Test Ajustement distrib (Normal, Lognormal,..) =======;
*=================================================================;
proc univariate data=in normal plot ; /* Normal test de la normalité */
var catotal_0;
histogram / normal (mu=est sigma=est);
qqplot / normal (mu=est sigma=est); /* plot boite à moustache QQ PP */
title3 "Test de la normalité";
run;
*=================================================================;
*====== Univarié : test d'une distribution connue ================;
*=================================================================;
proc freq data=in ;
tables sex /testp=(40, 60 ) ; /* la somme doit faire 100% ! */
format sex sexfmt. ;
title3 "Paramétrique : Test d'une distribution connue ";
run;
*=================================================================;
*========= Test / à un contrôle, proportion ====================;
*=================================================================;
proc freq data=in;
tables sex /binomial(level="1" testp= 0.25);
title3 "FREQ Intervalle de confiance proportion";
run;
proc freq data=in;
tables sex /binomial(level="Homme" testp= 0.25);/* avec le format utiliser l'étiquette du format */
format sex sexfmt.;
title3 "FREQ Intervalle de confiance proportion";
run;
*=================================================================;
*========= Test / à un contrôle, paramétrique (normal) =======;
*=================================================================;
proc univariate data=in normal plot
mu0=70; * test de la valeur d'une moyenne de 70 ;
var catotal_0;
title3 "Paramétrique : Comparaison à moyenne=70";
run;
*=================================================================;
*========= Test / à un contrôle, non paramétrique ===============;
*=================================================================;
* test des signes (non paramétrique)dans Univariate ;
****************************************************;
proc univariate data=in
mu0=2;
var R_CA_0 ;
title3 "Non paramétrique : RCA mu0=2 (lire test signes)";
run;
*=================================================================;
*========= Association NOMINALE ==========================;
*=================================================================;
* tableau croisés avec test du Khi2 (chisq);
* sans les fréquences "cas" ni les fréq colonne, (autre dim = norow) ;
*********************************************************************;
proc freq data =in ;
tables (rec sex liv_1 club_0 club_1 promo_1)*statut / chisq nofreq nocol;
format statut statutfmt. rec recfmt. sex sexfmt. liv_1 ouifmt. club_0 ouifmt. club_1 ouifmt. promo_1 promofmt.;
run ;
proc freq data =in ;
tables (rec )*sex / chisq nofreq nocol;
format rec recfmt. sex sexfmt.;
run ;
* mesures répétées variables nominales (agree) ;
* tableau croisés "carré" avec tests Mc Nemar, Kappa, ...;
* sans les fréquences "cas" ni les fréq colonne, (autre dim = rorow) ;
*********************************************************************;
ods rtf ;
proc freq data= in ;
tables club_0*club_1 / chisq nopercent nocol norow agree;
run ;
* association variables binaires et tableau "carré" (mêmes dimensions);
* mesures répétées test du signe;
* ********************************************************************;
ods rtf ;
data in ; set in ;
club_dif = club_1 - club_0 ;
run ;
proc univariate data=in mu0=0 alpha=0.05;
var club_dif ;
run ;
* association variables binaires et tableau "carré" (mêmes dimensions);
* mesures répétées McNemar 2 modalités;
* ********************************************************************;
data in ; set in ;
club_dif = club_1 - club_0 ;
run ;
proc univariate data=in mu0=0 alpha=0.05;
var club_diff ;
run ;
proc freq data=in;
tables club_0*club_1 / agree ;
format club_0 ouifmt. club_1 ouifmt. ;
title3 "Association avant / après 2 modalités : McNemar";
run;
* association variables binaires et tableau "carré" (mêmes dimensions);
* mesures répétées PLUS de 2 modalités;
* ********************************************************************;
ods trace on/listing; /* pour identifier le nom du tableau dans le journal ici CrossTabFreqs*/
proc freq data=in ;
table r3_ca_0*r3_ca_1 / chisq cmh nocol nopercent;
ods output CrossTabFreqs= tableau;/* sortie du tableau croisé dans tableau*/
run ;
ods trace off ;
proc catmod data=tableau ;
/* test de Stuart Maxwell approximé par le test de Bhapkar */
weight frequency ;
response marginals ;
model r3_ca_0*r3_ca_1 = _response_ / freq ;
repeated TIME 2 ;
title3 "Association avant / après >2 modalités : Stuart-Maxwell (Bhapkar)";
title4 "Lire la significativité de TIME (dans analysis of variance)";
run;
* test de la symétrie nij = n ji ;
* *********************************;
proc freq data=in ;
table r3_ca_0*r3_ca_1 / agree;
run ;
proc corr data=in spearman kendall ;
var r3_ca_0 r3_ca_1;
run ;
*=================================================================;
*========= Association ORDINALE =================================;
*=================================================================;
* association variables ordinales ;
* *********************************;
proc freq data=in;
tables decil_ca_0*decil_ca_1 / CMH agree measures nocol nopercent;
title3 "Association 2 var ordinales";
run;
* association variables non métrique (au moins ordinales ;
* kendall (b) spearman;
* *******************************************************;
proc corr data=in kendall spearman;
var r_ca_0 r_ca_1 ;
title3 "Procédure CORR Association var non métriques";
run;
*=================================================================;
*========= Association METRIQUE =================================;
*=================================================================;
* description des variables métriques par tabulate ;
***************************************************;
proc tabulate data=in ;
var catotal_0 catotal_1 ;
table (catotal_0 catotal_1)*(mean std);
title3 "Tabulate : Description de variables métriques";
run ;
* description des variables métriques par MEANS ;
*************************************************;
proc means data=in n mean median min max skewness kurtosis;
var catotal_0 catotal_1;
title3 "MEANS : Description de variables métriques";
run;
* COV ajoute la matrice de variance-covariance ;
* *********************************************;
proc corr data=in cov;
var catotal_0 catotal_1 ;
title3 "Procédure CORR Association var métriques";
run;
*=================================================================;
*==== Différence entre des groupes PAIRES NON PARAMETRIQUE ======;
*=================================================================;
* test des rangs signés (non paramétrique)dans Univariate ;
* sur la différence des rangs ;
****************************************************;
data in ;
set in ;
diff_rca = R_CA_0 - R_CA_1 ;
run ;
proc univariate data=in mu0=0;
var diff_RCA ;
run;
*=================================================================;
*=== Différence entre des groupes INDépendants NON PARAMETRIQUE ==;
*=================================================================;
* Différence de groupes sur des variables non métriques ;
* analyse de variance non paramétrique univariée NPar1Way ;
* test de la Médiane (median) ;
********************************************************************;
proc npar1way data=in
median ;
class statut;
var catotal_0;
title3 "NPar1Way : test de la médiane, données non normales échant indépendants";
run;
* test de Kolmogorov-Smirnov K-S (edf) ;
********************************************************************;
proc npar1way data=in
edf ;
class statut;
var r_ca_1;
title3 "NPar1Way : Différence de rangs - K-S échantillons indépendants";
run;
* Test de Mann-Whitney (2g) (ou Wilcoxon rangs signés ;
* et Kurskal-Wallis (>2g) (wilcoxon) ;
* equivalent à ANOVA si pas de normalité ;
********************************************************************;
proc npar1way data=in
wilcoxon;
class statut;
var r_ca_1;
title3 "NPar1Way : Différence de rangs - Mann-Whitney (Kurskal-Wallis >2 groupes) échantillons indep";
run;
*=================================================================;
*===== test égalité des variances ====;
*=================================================================;
*** 2 groupes ***;
proc ttest data=in ;
class sex ;
var catotal_0;
run;
*** >2 groupes ***;
proc glm data=in;
class sex;
model catotal_0 =sex / ss3 solution;
means sex / hovtest=LEVENE hovtest=BARTLETT;
run;
*=================================================================;
*===== Différence entre des groupes INDépendants PARAMETRIQUE ====;
*=================================================================;
* comparaison des moyennes de 2 groupes : test en t, intervalle de confiance ;
* CLASS : variable de regroutement VAR : variable de calcul ;
* teste aussi l'homogénéité des variances ;
*****************************************************************************;
proc ttest data=in ;
class statut ;
var catotal_1;
title3 "TTEST ";
run ;
* Dépendante (métrique), indépendante (nominale) ;
* ANOVA - Régression ;
********************************************************************;
proc glm data=in ;
class statut ;
model CATOTAL_1 = statut / ss3 solution;
title3 "Anova - Régression";
run;
*=================================================================;
*===== Différence entre des groupes PAIRES PARAMETRIQUE ==========;
*=================================================================;
* sur la différence de moyenne dans le temps ;
* créer une variable globale CA ;
* et une variable temps ;
* !!! cela double le nombre d'observations ;
************************************************************************;
data in2 ; set in ;
catotal= catotal_0 ; temps = 0 ; output ;
catotal= catotal_1 ; temps = 1 ; output ;
run;
proc ttest data=in2 ;
class temps ;
var catotal ;
run ;
* Différence moyenne échant appariés (mesures répétées) ;
********************************************************;
proc ttest data=in ;
PAIRED CATOTAL_0:CATOTAL_1;
title3 "TTEST Différence de moyennes- échantillons appariés";
run;
proc ttest data=in ;
var diff_ca;
title3 "TTEST Différence de moyennes- échantillons appariés";
run;
* sur la différence de CA ;
**************************;
proc univariate data=in normal;
where diff_ca > -500 ;
var diff_ca ;
histogram /normal ;
title3 "Test de la différence de CA";
run ;
* Dépendante (métrique), indépendante (nominale, plusieurs groupes) ;
* Analyse de variance ;
********************************************************************;
proc glm data=in2 ;
class promo_1;
model CATOTAL = temps /ss3 solution;
title3 "ANOVA Analyse de variance ";
run;
* Dépendante (métrique), indépendante (métrique) ;
* Régression ;
********************************************************************;
proc glm data=in ;
model CATOTAL_1 = catotal_0 / ss3 solution;
title3 "Régression";
run;
*=================================================================;
*========= Explication : multivariée =========================;
*=================================================================;
* test Q de Cochran : Nominale - plusieurs nominales ;
* meme nombre de modalités ;
********************************************************************;
proc freq data=in;
tables sex club_1 statut / nocum;
tables sex club_1 * statut / chisq ;
tables sex*club_1 * statut / agree noprint;
title3 "explication nominale = f(nominaleS) ";
run;
* Dépendante (métrique), indépendante (nominale, plusieurs groupes) ;
* Analyse de variance ;
********************************************************************;
proc anova data=in ;
class promo_1;
model CATOTAL_1 = promo_1 ;
title3 "ANOVA Analyse de variance ";
run;
proc glm data=in ;
class promo_1 ;
model CATOTAL_1 = promo_1 CATOTAL_0 / solution ;
means promo_1 / bon scheffe ;
contrast "1/(2 et 3)" promo_1 1 -.5 -.5;
contrast "1/2" promo_1 1 -1 0;
contrast "1/3" promo_1 1 0 -1;
contrast "2/3" promo_1 0 1 -1;
title3 "GLM ANCOVA Analyse de covariance ";
run;
proc glm data=in ;
class promo_1 ;
model CATOTAL_0 CATOTAL_1 = promo_1 ;
title3 "GLM MANOVA Analyse de variance pour plusieurs variables dépendantes";
run;
*=================================================================;
*========= Explication : nominale ===============================;
*=================================================================;
* Régression logistique binomiale ;
********************************************************************;
title2 H=4 J=c "Régression logistique binomiale ";
proc freq data=in ;
table sex * r2_ca_0;
run ;
ods graphics on ;
proc logistic data=in descending ;
class sex (ref="1") rec / param=ref ; /* choix de la modalité de référence pour X */
model r2_ca_1 (event="1") =sex rec;
oddsratio sex ;
oddsratio rec ;
run;
ods graphics off ;
* Régression logistique ordinale ;
********************************************************************;
title2 H=4 J=c "Régression logistique ordinale ";
proc freq data=in ;
table sex * r3_ca_0;
run ;
/* regarder "test de score" pour l'hypothèse IIA */
proc logistic data=in descending ;
class sex (ref="1") rec / param=ref ; /* choix de la modalité de référence pour X */
model r3_ca_1 =sex rec / link=clogit;
oddsratio sex ;
oddsratio rec ;
run;
* Régression logistique multinomiale ;
********************************************************************;
title2 H=4 J=c "Régression logistique multinomiale ";
proc freq data=in ;
table sex * r3_ca_0;
run ;
/* regarder "test de score" pour l'hypothèse IIA */
proc logistic data=in descending ;
class sex (ref="1") rec / param=ref ; /* choix de la modalité de référence pour X */
model r3_ca_1 =sex rec / link=glogit;
oddsratio sex ;
oddsratio rec ;
run;
* Jonckheere-Terpstra ;
***********************;
* substitut à Kruskal wallis si hyp sur les distributions non validée ;
ods rtf ;
proc freq data=in ;
tables sex*decil_ca_0
/ nopercent nocol JT ; /* JT Jonckheere-Terpstra*/
run ;
ods rtf close ;
* comparaisons multiples par bootstrap ;
***************************************;
proc tabulate data=in ;
class r3_ca_0 ;
var logca_0;
table r3_ca_0, logca_0*(mean std) ;
run ;
proc multtest data=in
boot n=1000 seed=123 /* bootstrap 1000 valeur intiale = 123 */
bon pvals; /* Bonferroni*/
class r3_ca_0;
contrast "2 versus 3" 0 -1 1 0;
contrast "1 versus 3" -1 0 1 0;
contrast "1 versus 2" 1 -1 0 0;
test mean(logca_0);
run;