/*---------------------------------------------------------------------------------------------------------------- LA SELECTION DE VARIABLES Exemple dans le cas d'une variable réponse binaire Procédure (Hosmer et al.) employée avec le modèle de régression logistique binaire ---------------------------------------------------------------------------------------------------------------- ____________________________________ Préalable : préparation des données ____________________________________ VARIABLE REPONSE : EVALDEMO2 = "How democratic Belgium is overall - 2 levels" 0-6 : "Low" (évaluation plutôt négative de la démocratie en Belgique) 7- 10 : "High" (évaluation plutôt positive de la démocratie en Belgique) VARIABLES EXPLICATIVES : - region 'BE10'='Région de Bruxelles-Capitale /Brussels Hoofdstedelijk Gewest' 'BE21'='Prov. Antwerpen' 'BE22'='Prov. Limburg' 'BE23'='Prov. Oost-Vlaanderen' 'BE24'='Prov. Vlaams-Brabant' 'BE25'='Prov. West-Vlaanderen' 'BE31'='Prov. Brabant Wallon' 'BE32'='Prov. Hainaut' 'BE33'='Prov. Liège' 'BE34'='Prov. Luxembourg' 'BE35'='Prov. Namur' - eisced = "Highest level of education, ES-ISCED" **** 0='Not possible to harmonise into ES-ISCED' 1='ES-ISCED I , less than lower secondary' 2='ES-ISCED II, lower secondary' 3='ES-ISCED IIIb, lower tier upper secondary' 4='ES-ISCED IIIa, upper tier upper secondary' 5='ES-ISCED IV, advanced vocational, sub-degree' 6='ES-ISCED V1, lower tertiary education, BA level' 7='ES-ISCED V2, higher tertiary education, >= MA level' **** 55='Other' - plinsoc = "Your place in society" 0='Bottom of our society' 1='1' 2='2' 3='3' 4='4' 5='5' 6='6' 7='7' 8='8' 9='9' 10='Top of our society' - polintr = "How interested in politics" 1='Very interested' 2='Quite interested' 3='Hardly interested' 4='Not at all interested' - hincfel = "Feeling about household's income nowadays" 1='Living comfortably on present income' 2='Coping on present income' 3='Difficult on present income' 4='Very difficult on present income' - blgetmg = "Belong to minority ethnic group in Belgium" 1='Yes' 2='No' Pour rappel, lors du TP1, nous avons créé un dataset SAS (out.datalabel) reprenant toutes ces variables ainsi que leurs versions recatégorisées. ---------------------------------------------------------------------------------------------------------------*/ LIBNAME LIBRARY 'C:\Users\gemarchand\Desktop\QUALI-TP\FORMATS'; LIBNAME OUT 'C:\Users\gemarchand\Desktop\QUALI-TP\DATA'; * VARIABLES EXPLICATIVES : Ecarter éventuellement les catégories non pertinentes (perte de ddl qui peut être nuisible dans la sélection du modèle); data out.selection; set out.datalabel; if eisced = 55 or eisced = 0 then eisced = .; *pour mettre la catégorie "Niveau d'éducation Autre" en VM (perte de ddl inutile); run; proc freq data = out.selection; tables eisced/nocol norow nopercent; *pour vérifier que les catégories non exploitables de eisced sont traitées comme VM; run; *_________________________________________________________________ SELECTION DU MODELE AVEC LA PROC GENMOD __________________________________________________________________; /*Etape 1 : Identifier isolément toutes les variables explicatives présentant un P < 0.25 */ %macro ef_princ(expl); proc genmod data = out.selection descending; class &expl / param=ref ref=first; model evaldemo2 = &expl /dist=bin link=logit type3; run; %mend ef_princ; %ef_princ(region) *ddl = 10, G² = 52.77 , p <.0001 ; %ef_princ(eisced) *ddl = 6 , G² = 77.54 , p <.0001 ; %ef_princ(plinsoc) *ddl = 10, G² = 49.69 , p <.0001 ; %ef_princ(polintr) *ddl = 3 , G² = 60.43 , p <.0001 ; %ef_princ(hincfel) *ddl = 3 , G² = 37.60 , p <.0001 ; %ef_princ(blgetmg) *ddl = 1 , G² = 6.15 , p =0.0131 ; *Conclusion étape1 : toutes les explicatives présentent un P < 0.25 isolément; /*Etape 2 : Ajuster le modèle multivarié avec toutes les variables retenues en (1) */ %ef_princ(region eisced plinsoc polintr hincfel blgetmg) *LR Statistics For Type 3 Analysis Source DF Khi-2 Pr > Khi-2 region 10 66.86 <.0001 eisced 6 24.83 0.0004 plinsoc 10 19.10 0.0390 polintr 3 30.08 <.0001 hincfel 3 20.58 0.0001 blgetmg 1 5.36 0.0206 ; *Constat : Toutes les variables conservent un p < 0.05 ; /* Etape 3 : Tenter de simplifier, variable par variable, le modèle en (2) (avec critère de P < 0.05 pour conserver une variable). Garder malgré tout une variable si son retrait inuence fortement les estimations liées aux variables toujours présentes dans le modèle.*/ *Aucune variable ne peut être retirée; /* Etape 4 : Tenter de réintroduire une par une chacune des variables écartées à l'étape (1) au modèle issu de l'étape (3).*/ *Aucune variable n'a été écartée à l'étape 1 --> rien à faire ici; /* Etape 5 : Examiner dans quelle mesure certaines catégories d'une variable explicative retenue en fin d'étape (4) peuvent être regroupées.*/ *On reprend les versions recatégorisées des variables telles que définies lors du TP1; %ef_princ(reg3 educ3 plinsoc3 polintr2 hincfel2 blgetmg) *LR Statistics For Type 3 Analysis Source DF Khi-2 Pr > Khi-2 Source DF Khi-2 Pr > Khi-2 region 10 66.86 <.0001 reg3 2 68.21 <.0001 eisced 6 24.83 0.0004 educ3 2 30.53 <.0001 plinsoc 10 19.10 0.0390 plinsoc3 2 9.03 0.0110 polintr 3 30.08 <.0001 polintr2 1 24.99 <.0001 hincfel 3 20.58 0.0001 hincfel2 1 16.15 <.0001 blgetmg 1 5.36 0.0206 blgetmg 1 3.78 0.0518 ; *Constat, le fait de recatégoriser les variables explicatives (sauf blgetmg - 2 catégories initiales) a un impact sur les statistiques calculées, les ddl (et les p-valeurs qui en découlent). NB : plinsoc et hincfel --> intuition d'interaction au regard de l'impact de la recatégorisation + blgetmg reste inchangée mais sa p-valeur, faiblement < à 0.05 supra passe au-dessus du seuil 0.05 une fois qu'on contrôle les autres explicatives recatégorisées --> retrait de cette variable pour la suite; /* Etape 6 : Déterminer quelles interactions d'ordre 2 pourraient faire sens dans le contexte de l'application et identifier (comme en (1) avec les effets principaux) celles qui sont signicatives lorsqu'on les ajoute au modèle en (5) (mais cette fois avec un P < 0.05 comme critère d'inclusion). */ %macro sel_inter(expl, inter); proc genmod data = out.selection descending; class &expl / param=ref ref=first; model evaldemo2 = &expl &inter/dist=bin link = logit type3; run; %mend sel_inter; %sel_inter(reg3 educ3 plinsoc3 polintr2 hincfel2, reg3*educ3) *reg3*educ3 p = 0.2967; %sel_inter(reg3 educ3 plinsoc3 polintr2 hincfel2, reg3*plinsoc3) *reg3*plinsoc3 p = 0.0001 --> à investiguer; %sel_inter(reg3 educ3 plinsoc3 polintr2 hincfel2, reg3*polintr2) *reg3*polintr2 p = 0.1100; %sel_inter(reg3 educ3 plinsoc3 polintr2 hincfel2, reg3*hincfel2) *reg3*hincfel2 p = 0.0651 --> ?; %sel_inter(reg3 educ3 plinsoc3 polintr2 hincfel2, educ3*plinsoc3) *educ3*plinsoc3 p = 0.1223; %sel_inter(reg3 educ3 plinsoc3 polintr2 hincfel2, educ3*polintr2) *educ3*polintr2 p = 0.3707; %sel_inter(reg3 educ3 plinsoc3 polintr2 hincfel2, educ3*hincfel2) *educ3*hincfel2 p = 0.7566; %sel_inter(reg3 educ3 plinsoc3 polintr2 hincfel2, plinsoc3*polintr2) *plinsoc3*polintr2 p = 0.3748; %sel_inter(reg3 educ3 plinsoc3 polintr2 hincfel2, plinsoc3*hincfel2) *plinsoc3*hincfel2 p = 0.0045 --> à investiguer; %sel_inter(reg3 educ3 plinsoc3 polintr2 hincfel2, polintr2*hincfel2) *polintr2*hincfel2 p = 0.0345 --> à investiguer; *Conclusion : potentiellement 3 interactions significatives reg3*plinsoc3 p = 0.0001, plinsoc3*hincfel2 p = 0.0045, polintr2*hincfel2 p = 0.0345; /*Etape 7 : Ajouter toutes les interactions identifiées en (6) aux effets principaux retenus en (5) et chercher à éliminer des interactions du modèle (comme lors de l'étape (3) avec les effets principaux).*/ %sel_inter(reg3 educ3 plinsoc3 polintr2 hincfel2, plinsoc3*hincfel2 polintr2*hincfel2 reg3*plinsoc3) *TYPE3 : Source DF Khi-2 Pr > Khi-2 plinsoc3*hincfel2 2 4.43 0.1093 --> > 0.05 polintr2*hincfel2 1 3.41 0.0650 --> > 0.05 reg3*plinsoc3 4 17.66 0.0014 ; %sel_inter(reg3 educ3 plinsoc3 polintr2 hincfel2, polintr2*hincfel2 reg3*plinsoc3) *TYPE3 : Source DF Khi-2 Pr > Khi-2 polintr2*hincfel2 1 4.24 0.0396 reg3*plinsoc3 4 22.89 0.0001 --> on ne peut plus simplifier davantage le modèle ;