Université de CAEN M2-MASS Modèles de régression
1.3 Solutions
1.3.1 Solution R
require(xtable)
X=read.table(’enseignement.txt’,header=TRUE)
summary(X) # tout est en facteur
contrasts(X$nature) # contr.treatment ordre alphabetique
options("contrasts") # 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 francois.kauffmann@unicaen.fr