Université de CAEN 1 M2-MASS Modèles de régression Profil complet enseignement 1.1 Description On veut modéliser l’appréciation notée d’un enseignement fait par un étudiant en fonction de trois variables à l’aide d’un modèle linéaire. – La nature de l’enseignemnt – Les prérequis – Le niveau du cours. 1 2 3 4 5 6 7 8 1.2 nature professionnel professionnel professionnel professionnel theorique theorique theorique theorique prerequis M1 M1 sans sans M1 M1 sans sans niveau difficile facile difficile facile difficile facile difficile facile note 7 6 6 4 9 8 9 7 Enoncé 1. Lire les données contenues dans le fichier enseignement.tx. 2. Quels sont le codage associé aux variables qualitatives. Changer le codage par defaut de toutes les variables qualitatives en utilissant le contraste R contr.sum. Interprétez les nouvelles inconnues associées à ce contraste. 3. Constuire un modèle linéaire expliquant la moyenne des notes par un modèle additif sans interactions. Quel sont les degrés de libertés utilisés ? quel est le nombre minimal de personne que l’on aurait pu interroger ? (Intercept) nature1 prerequis1 niveau1 Estimate 7.0000 -1.2500 0.5000 0.7500 Std. Error 0.1768 0.1768 0.1768 0.1768 t value 39.60 -7.07 2.83 4.24 Pr(>|t|) 0.0000 0.0021 0.0474 0.0132 4. Soit x = (nature, prerequis, niveau) un stimuli, calculer la note prédite pour x : E(Ybx ) de deux manières différentes. 5. Quel est le stimuli le moins apprécié, le mieux apprécié. 6. soit x2 ∈ X 2 une modalité de la variable prerequis et x3 ∈ X 3 une modalité de la variable niveau. On appelle variation de la variable Yb pour la variable X 1 : P → X 1 : range(X 1 )(x2 , x3 ) = maxx1 ∈X 1 ,x′1 ∈X 1 |E(Yb(x1 ,x2 ,x3 ) − Yb(x′1 ,x2 ,x3 ) )| Expliquez pourquoi range(X 1 ) ne dépend ni de x2 ni de x3 . 7. On appelle importance de la variable X 1 le nombre exprimé en pourcentage de variation total. 100 ∗ range(X 1 ) range(X 1 ) + range(X 2 ) + range(X 3 ) Calculer alors le tableau des importances de chaque variables nature prerequis 50 20 niveau 30 8. Dans SAS, lire la table et faire l’analyse conjointe du profil avec l’aide de la procédure transreg proc transreg utilities data=table; title2 ’Analyse conjointe metrique’; model linear(note) = class(nature prerequis niveau / zero=sum); run; AC 1 [email protected] Université de CAEN 1.3 1.3.1 M2-MASS Modèles de régression Solutions Solution R require(xtable) X=read.table(’enseignement.txt’,header=TRUE) summary(X) contrasts(X$nature) options("contrasts") # tout est en facteur # contr.treatment ordre alphabetique # defaut unordered="contr.treatment" ordered="contr.poly" # modifier les contrastes contr.sum(5) # delta(ieme modalite) - delta(dernire modalite) contrasts(X$nature) =contr.sum(2) contrasts(X$prerequis)=contr.sum(2) contrasts(X$niveau) =contr.sum(2) contrasts(X$niveau) # difficile -facile # modèle linéaire sans interaction Z=model.matrix(~nature+prerequis+niveau,data=X) m=lm(note~nature+prerequis+niveau,data=X) # interprétation des coefficients du modèle nature="professionnel";prerequis="M1";niveau="difficile" note.pred1=predict(m,newdata=data.frame(nature,prerequis,niveau)) note.pred= coef(m)[["(Intercept)"]]+ coef(m)[["nature1"]]*((nature=="professionnel") -(nature=="therorique"))+ coef(m)[["prerequis1"]]*((prerequis=="M1") -(prerequis=="sans"))+ coef(m)[["niveau1"]]*((niveau=="difficile")-(niveau=="facile")) # R2 summary(m) # 0.95 # stimuli les moins apréciés X[X$note==min(X$note),] # stimuli les plus apréciés X[X$note==max(X$note),] # importance noms=strsplit(deparse(formula(m)),"~")[[1]][2] noms=strsplit(noms,’+’,extended=FALSE)[[1]] noms=gsub(" ","",noms) importances=list() for (nom in noms) importances[[nom]]=2*max(abs(coef(m)[grep(nom,names(coef(m)))])) importances=unlist(importances) importances=importances/sum(importances)*100 # graphiques X.pred=X;X.pred$note=predict(m) #pdf(file="ps/plot_design.pdf") plot.design(note~.,data=X.pred) #dev.off() # non métrique pas de succes dans R # echec prog lineaire quadratique # echec reg multinomiale ordonnée # ERREUR G PAS DEFINI POSITIVE.... library(quadprog) Y=matrix(0,nrow(X),nrow(X)) for (c in 1:ncol(Y)) { for (l in c:nrow(X)) { Y[l,c]=1 } } Y=cbind(Y, -Z) G=t(Y)%*%Y Gl=rep(0,nrow(G)) C=diag(1,nrow(X),ncol(Y)) C=t(C[-1,]) C0=rep(0.5,ncol(C)) solve.QP.compact(G*2,Gl,C,C0) # ERR par def positif.... AC 2 [email protected] Université de CAEN # regression ordinale singulier 7 M2-MASS Modèles de régression dl pour les termes constants tmp=polr(factor(note,ordered=TRUE)~nature,data=X) AC 3 [email protected] Université de CAEN 1.3.2 M2-MASS Modèles de régression Solution SAS /* ---------------------------------------------------------------INITIALISATION ---------------------------------------------------------------*/ %let titre=Preferences en enseignement; %let home=C:\users\francois\SAS\enseignement;/*HOME DIRECTORY*/ options user="C:\users\francois\SAS\lib"; /* LIBRAIRIE UTILISATEUR */ goptions reset=all; /* option par defaut */ proc datasets library=user KILL;run; /* effecement librairie */ %let idate=%sysfunc(datetime()); %let date=%sysfunc(putn(&idate,datetime20.)); title1 "&titre"; footnote j=r "&titre" j=l "FK &date";/* les textes sont entre quote */ title &titre; /* ---------------------------------------------------------------LECTURE TABLE ---------------------------------------------------------------*/ data table; infile "&home\enseignement.txt" firstobs=2; input nature ~$15. prerequis ~$15. niveau ~$15. note; ;run; /* preferences */ proc sort data=table; by note; run; /* ---------------------------------------------------------------ANALYSE CONJOINTE ---------------------------------------------------------------*/ proc transreg utilities data=table; title2 ’Analyse conjointe metrique’; model linear(note) = class(nature prerequis niveau / zero=sum); run; ods latex file="&home\transreg.tex"; proc transreg utilities data=table; title2 ’Analyse conjointe non metrique’; model monotone(note) = class(nature prerequis niveau / zero=sum); output out=conjoint; run; ods latex close; title2 h=1 ’Analyse conjointe non metrique’; symbol1 v=plus i=join; axis1 order=(1 to 10) label=(angle=90 ’f(note)’); axis2 order=(1 to 9) label=(’note’); proc gplot data=conjoint gout=user.graphes; plot tnote * note = 1 / frame haxis=axis2 vaxis=axis1 name=’transre’; format tnote 4.; run; goptions reset=all; /* ---------------------------------------------------------------MODELE LINEAIRE ---------------------------------------------------------------*/ /* identique au modele transreg linear(note) ne marche pas en multinomial+cumlogit PB =monotone(note) */ ods latex file="&home\genmod.tex"; proc genmod data=table; class nature prerequis niveau (param=effect ref=LAST) ; model note =nature prerequis niveau/ dist=normal link=id; run; ods latex close; AC 4 [email protected] Université de CAEN M2-MASS Modèles de régression /* ------------------------------------------------------------SORTIES GRAPHIQUES PS ------------------------------------------------------------*/ FILENAME psdir "&home\PS"; goptions reset=all gsfname=psdir device=pslepsfc; proc greplay igout=user.graphes nofs; replay _ALL_; run; quit; AC 5 [email protected]