{"word_count": 565, "character_count": 4325}
Hier, sur Twitter, @JF_Godbout partageait un joli graphique relatif aux élections québécoises, avec les nombres de votes obtenus (ici en pourcentage des votes totaux) et le pourcentage de sièges que cela donne,Il faut dire qu'hier, c'était jour d'élection. Ce sont des élections à un tour, avec plusieurs partis (disons 4 grands partis si on se limite aux élections les plus récentes). Jusqu'à lundi, le PQ (Parti Québécois) avait une majorité (relative), et depuis lundi, le PLQ (Parti Libéral) est revenu au pouvoir. Et il y a à côté de ces deux grands partis d'autres partis, que l'on va regrouper. @JF_Godbout m'ayant envoyé ses données, j'ai pu reproduire les graphiques.La grande différence ici, entre nos approches est - je pense - la méthode de lissage: alors que  @JF_Godbout faisait des régressions locales, j'ai opté pour des splines.reg=glm(Seat~bs(Election),data=d,family=binomial)yp=predict(reg,newdata=data.frame(Election=1970:2015),type="response")J'utilise des splines parce que ça se généralise facilement à d'autres lois, et qu'on peut aussi les utiliser quand on régresse sur plusieurs variables continues. Si on rajoute les résultats de l'élection de lundi, on obtient le graphique suivantCe qui me gêne dans cette modélisation, c'est qu'on considère nos trois dernières régressions comme indépendantes.... alors que ce n'est pas le cas: on a trois modalités possibles, et la somme doit forcément faire 1. D'ailleurs, quand on somme les prédictions, on dépasse 1.Avec deux partis, notre régression logistique nous garantie d'avoir une somme à un, mais plus ici. A moins d'utiliser un modèle multinomial. Si on oublie le lissage, l'idée est d'écrirequi est tout simplement l'extension du modèle logistique. La difficulté technique est que, sous R, quand on fait une régression logistique, la variable d'intérêt doit être une variable prenant trois facteurs, et non pas un vecteur de probabilités. Au lieu d'utiliser des taux, ou des pourcentages, je devrais utiliser des nombres d'observations de chaque modalités. On va donc crééer une fausse base&#62; vote=data.frame(+ plq=plq$Vote,+ pq=pq$Vote,+ autre=autre$Vote,+ Election=pq$Election)&#62; vote      plq     pq  autre Election1  0.5465 0.3022 0.1513     19722  0.3378 0.4137 0.2485     19763  0.4608 0.4926 0.0466     19814  0.5599 0.3869 0.0532     19855  0.4995 0.4016 0.0989     19896  0.4440 0.4475 0.1085     19947  0.4355 0.4287 0.1358     19988  0.4599 0.3324 0.2077     20039  0.3308 0.2835 0.3857     200710 0.4208 0.3517 0.2275     200811 0.3120 0.3195 0.3685     201212 0.4140 0.2538 0.3312     2014&#62; M=t(round(vote[,1:3]*1000))&#62; M      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]plq    546  338  461  560  500  444  436  460  331   421   312   414pq     302  414  493  387  402  448  429  332  284   352   320   254autre  151  249   47   53   99  108  136  208  386   227   368   331On réplique alors autant de fois le nom du parti qu'on a de (pseudo) votes&#62; Y=X=NULL&#62; for(i in 1:3){+ for(j in 1:ncol(M)){+ Y=c(Y,rep(c("PLQ","PQ","Autre")[i],M[i,j]))+ X=c(X,rep(pq$Election[j],M[i,j]))+ }}&#62; basev=data.frame(Y=as.factor(Y),X=X)C'est un peu artificiel, j'en conviens, mais ça marche... On peut alors faire la régression&#62; library(nnet)&#62; regv=multinom(Y~bs(X),data=basev)# weights:  15 (8 variable)initial  value 13186.643301 iter  10 value 12241.931805final  value 12221.591172 convergedet des prévisions&#62; ypv=predict(regv,newdata=+ data.frame(X=1973:2014),type="probs")&#62; ypv        Autre       PLQ        PQ1  0.18426281 0.4705415 0.34519572  0.16051060 0.4767408 0.36274863  0.14149153 0.4805514 0.37795714  0.12631826 0.4826100 0.39107185  0.11426236 0.4834165 0.40232126  0.10474046 0.4833543 0.41190537  0.09729304 0.4827117 0.41999538  0.09156246 0.4817016 0.42673609  0.08727323 0.4804776 0.432249110 0.08421535 0.4791477 0.436637011 0.08223095 0.4777835 0.439985512 0.08120364 0.4764292 0.442367213 0.08105030 0.4751066 0.443843114 0.08171457 0.4738203 0.4444651Et on notera que cette fois, nos prévisions somment à un.Cela dit, visuellement, on obtient des choses proches de ce qu'on avait auparavant,mais intellectuellement, je trouve plus logique d'utiliser autre chose que des régressions logistiques quand on est dans une élection où plusieurs partis sont en compétition.