Category Archives: Statistics

Visualizing (censored) lifetime distributions

There are now more than 10,000 R packages available from CRAN, much more if you include those available only on github. So, to be honest, it become difficult to know all of them. But sometimes, you discover a nice function in one of them, and that is really awesome. Consider for instance some (standard) censored lifetime data,

n=10000
idx=sample(1:4,size=n,replace=TRUE)
pd=LETTERS[idx]
lambda=1+(idx-1)/3
t=rexp(n,lambda)
x=rexp(n)
c=t>x
y=pmin(t,x)
df=data.frame(time=y,status=c,product=pd)

(yes, I will generate them here). Consider Kaplan-Meier estimator of the survival function,

library(survival)
km.base = survfit( Surv(time,status) ~ 1  , data = df )
plot(km.base)

This week end, Anat (currently finishing the Data Science for Actuaries program) made me discover a nice R function, to add information to that graph (well, not that graph, since it will be a ggplot version, but the same survival distribution plot)

library(ggplot2)
library(survminer)
ggsurvplot(km.base, main = "", color = "blue" , censor = FALSE, xlim = c(0,3), risk.table = TRUE ,
risk.table.col = "blue" , risk.table.height = 0.2, risk.table.title = "" , legend.labs = "All" , legend.title = "" , break.time.by = 1, xlab = "" , ylab = "")

This is more interesting when we have different lifetimes

km.prod = survfit( Surv(time,status) ~ product  , data = df )
ggsurvplot(km.prod, main = "", censor = FALSE, xlim = c(0,3), risk.table = TRUE , risk.table.col = "strata" , risk.table.height = 0.3, risk.table.title = "" , legend.labs = LETTERS[1:4] , legend.title = "" , break.time.by = 1, xlab = "" , ylab = "")

or, with a different time granularity

ggsurvplot(km.prod, main = "", censor = FALSE, xlim = c(0,3), risk.table = TRUE , risk.table.col = "strata" , risk.table.height = 0.3, risk.table.title = "" , legend.labs = LETTERS[1:4] , legend.title = "" , break.time.by = .5, xlab = "" , ylab = "")

Nice, isn’t it?

Sondages, intentions de vote et “vote utile”

Il y a plusieurs semaines, Ashley Kirk et Patrick Scott publiaient French presidential election: How the polls are shaping up in the race to become president. Force est de constater qu’ils avaient raison: les sondages prennent une place essentielle dans cette période électorale.

Avant, une précaution d’usage s’impose, je pense. Les instituts de sondages le rappellent sans cesse, et ils ont raison : leur métier n’est pas véritablement de faire des sondages d’intention de vote. L’essentiel de leurs revenus vient des études de marché,
et d’opinion, généralement pour le compte d’entreprises privées. Néanmoins, les élections sont une fabuleuse vitrine publicitaire. On peut alors imaginer que l’institut qui aura “prédit” le scrutin avec la plus grande précision devrait s’assurer une rente pour les mois – voire les années – à venir. Cette vitrine publicitaire serait importante car elle empêcherait aux instituts de prendre parti : ils ont intérêt à prédire aussi précisément que possible, probablement plus que chercher à influencer les votes. Mais est-ce aussi simple ?

Depuis une quizaine d’années, on voit régulièrement ressurgir le concept de « vote utile ». Ce concept est particulièrement important en France, pour les élections présidentielles, compte tenu du système de vote : un vote en deux tours, avec seulement les deux meilleurs au second tour. Qui dit “meilleur” dit positionnement relatif, et donc importance du vote des autres. Quelque part, mon vote est important, mais celui des autres l’est tout autant (sinon plus). Pour voter de manière rationnelle, il faut savoir comment les autres vont voter. Et comme souvent dans un jeu statégique – et les élections en sont – l’information joue un rôle essentiel.

Lorsqu’un élécteur ne sait pas quel sera le vote des autres, il aura – a priori – intérêt à voter pour son candidat préféré, Mais si ce même électeur a des croyances quant au vote des autres, il peut avoir intérêt à modifier stratégiquement son choix, en votant pour son second, voire son troisième choix : on parlera alors de « vote utile ». Sans information sur les choix des autres (ou leurs stratégie), il ne peut pas y avoir de comportement stratégique. Et force est de constater que les “sondages” (terme générique pour désigner les estimations d’intension de vote) sont devenus des instruments essentiels pour déterminer justement quel sera le choix des autres électeurs.

Les sondages sont devenus l’élément central du vote stratégique, surtout s’ils sont présenté comme fournissant une information précise, voire “statistiquement rigoureuse” des intentions de vote. Les sondages deviennent alors auto-réalisateurs s’ils poussent à voter pour des candidats qui affichent le plus de chances de gagner, ce qu’on appelle communément le « vote utile ». Mais on peut aussi imaginer des stratégies inverses : si mon candidat préféré a 40% d’intention de votes, dans les derniers sondages, a-t-il vraiment besoin de ma voix ? Ne pourrais-je pas éviter de perdre du temps en allant voter ?

Bref, j’ai encore du mal à comprendre le rôle exact des sondages dans les élections, mais ils sont loin d’être neutres. Et j’ai l’impression que comprendre ce mécanisme est plus important pour quantifier les “marges d’erreurs” que toutes les méthodes statistiques que l’on peut imaginer (dont je parlais dans un précédent billet). Et les sondages en période électorale semblent relever davantage de la théorie des jeux que des problèmes d’inférence statistique.

C’est normal ! (partie 1) et si la normalité n’existait pas?

Il y a quelques semaines, je discutais avec une collègue juriste (alors que j’essayais de glaner des statistiques juridiques), et alors que l’on parlait alors de la lenteur de l’instruction, ou de l’inversion de la charge de la preuve (je ne me souviens plus) j’ai été supris qu’elle me dise que “c’est normal“. Je sais qu’un juriste et un statisticien ne donnent pas forcément le même sens aux mots, et cette phrase m’a dérangé parce qu’une situation qui pourrait sembler “normale” (car observée régulièrement) n’est pas pour autant “juste” (c’est le paradoxe is/ought de Hume, mais j’en parlerais dans un autre billet).

Le point de départ est de comprendre ce qu’est la normalité “empirique”, telle qu’observée dans une population. Ce qui pourrait être “normal” pour un statisticien. Pour commencer, je pensais revenir sur un exemple raconté dans The End of Average de Todd Rose, qui essaye de montrer, exemples à l’appui, que l’homme moyen n’existe pas.

  • L’homme moyen de Quételet

Au XIXème siècle, si plusieurs astronomes mesuraient la vitesse d’un même objet céleste, ils obtenaient (souvent) plusieurs mesures différentes. Pour savoir “laquelle” utiliser dans leurs calculs, l’idée d’utiliser “la méthode des moyennes” s’est rapidement imposée – comme le rappelle Stahl (2006), et surtout Sheynin (1973) – cette “moyenne” ayant une précision plus grande que n’importe quelle autre grandeur (ou dirait aujourd’hui “statistique”).

Adolphe Quetelet fut, semble-t-il, le premier à appliquer ce calcul de moyennes à des mesures humaines, introduisant son fameux concept d'”homme moyen”. Comme j’en avais parlé dans un précédant billet, la moyenne est une grande particulière, dont le sens n’est pas forcément clair. Si on définit la moyenne à l’aide d’une minimisation d’erreur quadratique, on a une interprétation en terme de prévision (on retrouve ici la notion de mesure elicitable dont je parlais dans mon dernier cours): la taille moyenne est la taille de “devrait” mesurer une personne tirée au hasard (à une variation aléatoire – et imprévisible – près). En 1846 dans une lettre (publiée dans l’ouvrage Lettres sur la théorie des probabilités, appliquée aux sciences morales) Adolphe Quételet utilise l’image de la statue du gladiateur pour expliquer ce que peut être l’homme moyen.

  • L’interprétation de Francis Galton

Ce homme moyen a beaucoup plu à l’époque, en particulier au sein de l’école anglaise eugéniste, dirigée à l’époque par Francis Galton, même si ce dernier s’intéresse surtout aux déviations par rapport à cette norme (déviation vers le haut et déviation vers le bas). Comme le rappelle Bulmer (2004),the deviations from that average—upwards towards genius, and downwards towards stupidity—must follow the law that governs deviations from all true averages“. Les travaux de Galton ont visé à comprendre ces déviations. Si Florence Nightingale affirmait que “the Average Man is God’s Will“, Galton de son côté s’intéressait davantage au caractère héréditaire. Mais cet “homme moyen” a-t-il pour autant du sens ?

  • L’être humain moyen n’existe pas

Une anecdote intéressante est celle de deux statues, à Cleveland, celles de Norma et Normann. L’artiste Abram Belskie et l’obstetricien Robert Latou Dickinson ont réalisé ensemble ces statues, en 1943. La particularité est qu’aucun modèle n’a été représenté. En fait, il s’agissait de représenter une femme et un homme qui avaient les mensurations moyennes de l’époque.

Une fois ces statues réalisées, un concours a été organisé pour trouver qui ces statues pouvaient bien représenter. Plusieurs milliers de personnes de l’Ohio ont envoyé leurs mensurations, mais aucun ne correspondaient à celles des statues. Certes, plusieurs centaines avaient la même taille. Plusieurs centaines avaient le même tour de poitrine. Mais aucune n’avait toutes les bonnes mesures. Car comme l’explique Todd Rose, l’homme n’est pas unidimensionnel: c’est sur plusieurs dimensions qu’on le mesure.

Et chercher à le résumer en une grandeur unidimensionnel est beaucoup trop réducteur. C’est ce qu’il montre dans son livre sur les tests d’intelligence, par exemple, où un même QI peut être associé à deux personnes très différentes.

Pareil pour décider de recruter quelqu’un, se focaliser sur un seul indicateur n’a pas de sens. Le soucis quand on travaille dans un contexte multivarié, c’est que la moyenne perd de son sens. Pour reprendre le titre d’un billet mis en ligne voilà 6 mois, être moyen peut être extraordinaire.

  • La malédiction de la dimension (en grande dimension, l’espace est très vide…)

En fait, ce problème est bien connu par les statisticiens, sous le nom de “fléau de la dimension“. Prenons un exemple simple: supposons qu’une grandeur d’intérêt suive une loi normale https://latex.codecogs.com/gif.latex?\mathcal{N}(\mu,\sigma^2), par exemple le poids, la taille, le tour de poitrine, etc. On pourrait dire que la norme, c’est se trouver dans un intervalle https://latex.codecogs.com/gif.latex?[\mu\pm%201.5%20\cdot\sigma]. Si on a une loi normale, cette situation survient dans 85% des cas,

> (1-2*pnorm(-1.5))
[1] 0.8663856

Et 15% seront vues comme “anormales”. Elles peuvent être anormalement petites, ou anormalement grandes. C’est le dessin ci-dessous: on regarde ici seulement une dimension

On peut maintenant regarder deux dimensions, le poids et la taille, par exemple. La norme serait ici que dans les deux dimensions, on soit dans l’intervalle https://latex.codecogs.com/gif.latex?[\mu\pm%201.5%20\cdot\sigma]. Si les grandeurs sont indépendantes, la probabilité que les deux grandeurs soient “normale” est de 75%

> (1-2*pnorm(-1.5))^2
[1] 0.750624

En dimension deux, 75% des observations sont “normales”, et 25% sont “anormales”

En dimension 3, on passe à 65%

> (1-2*pnorm(-1.5))^3
[1] 0.6503298

pour 35% d’observations “anormales” (plus du tiers)

Etc. En dimension cinq, on passe en dessous de 50%

> (1-2*pnorm(-1.5))^5
[1] 0.4881532

autrement dit, être dans la norme dans les 5 dimensions, ce n’est plus le cas de la majorité. Et en dimension vingt, ceux qui sont “normaux” sont plutôt atypiques, avec une proportion de l’ordre de 5%,

> (1-2*pnorm(-1.5))^20
[1] 0.0567838

Bref, la normalité est un concept particulièrement étrange sur le plan empirique, car intuitivement associé à l’idée d’une majorité. Alors que ce n’est pas le cas, la normalité étant justement atypique.

Toi aussi, raconte ce que tu veux avec des graphiques

L’autre jour, les décodeurs publiaient sur le site du Monde un article sur l’utilisation des graphiques en base 100,

Je reprends le commentaire

Celui-ci indique, sans appel selon Mme Le Pen, le déclin des économies françaises, italiennes et espagnoles face à l’industrie allemande. Marine Le Pen n’hésite ainsi pas à affirmer que le déclin de la production française est lié à l’introduction de la monnaie unique en 2001.

On peut reconstruire le graphique assez facilement, les données étant en ligne sur https://data.oecd.org/

base=read.table(loc,sep=",",header=TRUE)
extract=function(nom="FRA"){
b=base[base[,1]==nom,c("TIME","Value")]
names(b)=c("TIME",nom)
return(b)
}
B=extract("FRA")
B=merge(B,extract("DEU"),all.x=TRUE,all.y=TRUE)
B=merge(B,extract("ESP"),all.x=TRUE,all.y=TRUE)
B=merge(B,extract("ITA"),all.x=TRUE,all.y=TRUE)
dim(B)
B$TIME
B$t=seq(1950+1/8,2016+7/8,by=1/4)
plot(B$t,B$FRA,type="l",col="blue",lwd=2)
i=which(B$T=="2001-Q1")
Bi=B
for(j in 2:5) Bi[,j]=Bi[,j]*100/Bi[i,j]
plot(B$t,Bi$FRA,type="l",col="blue",lwd=2,ylim=range(Bi[which(B$T=="1990-Q1"):which(B$T=="2016-Q4"),2:5],na.rm=TRUE),xlim=c(1990,2020))
text(2019,Bi$FRA[max(which(is.na(Bi$FRA)==FALSE))],"FRA",col="blue")
lines(B$t,Bi$DEU,lwd=2)
text(2019,Bi$DEU[max(which(is.na(Bi$DEU)==FALSE))],"DEU")
lines(B$t,Bi$ESP,lwd=2,col="red")
text(2019,Bi$ESP[max(which(is.na(Bi$ESP)==FALSE))],"ESP",col="red")
lines(B$t,Bi$ITA,lwd=2,col="green")
text(2019,Bi$ITA[max(which(is.na(Bi$ITA)==FALSE))],"ITA",col="green")

Maintenant, on peut aussi changer la référence de la base 100. Par exemple, la victoire de la France à la Coupe du Monde Foot

i=which(B$T=="1998-Q2")

Damned,

Celui-ci indique, le déclin des économies françaises, italiennes et espagnoles face à l’industrie allemande. Ce déclin de la production française est lié à la victoire de la France à la Coupe du Monde de Football.

ou la dernière victoire de la France à l’Eurovision

i=which(B$T=="1977-Q3")

Damned,

Celui-ci indique, le déclin des économies françaises et espagnoles face à l’industrie allemande. Ce déclin de la production française est lié à la victoire de la France à l’Eurovision.

ou encore, la naissance de Mme Le Pen

i=which(B$T=="1968-Q3")

Damned,

Celui-ci indique, le déclin de l’économie française face aux industries allemande et espagnole. Ce déclin de la production française est lié à la naissance de Mme Le Pen.

The U.S. Has Been At War 222 Out of 239 Years

This morning, I discovered an interesting statistic, America Has Been At War 93% of the Time – 222 Out of 239 Years – Since 1776,  i.e. the U.S. has only been at peace for less than 20 years total since its birth. I wanted to check, get a better understanding and look at other countries in the world.

As always, we can try to extract information from wikipedia, since there are pages dedicated to that information

url="https://en.wikipedia.org/wiki/List_of_wars_involving_the_United_States"
download.file(url,destfile = "warUS.html")
url="https://en.wikipedia.org/wiki/List_of_wars_involving_France"
download.file(url,destfile = "warFR.html")
url="https://fr.wikipedia.org/wiki/Liste_des_guerres_de_la_France#Premi.C3.A8re_R.C3.A9publique"
download.file(url,destfile = "guerre.html")
url="https://en.wikipedia.org/wiki/List_of_wars_involving_Canada"
download.file(url,destfile = "warCAN.html")

If we look at the US page, there are tables, so it should be easy to extract it. For instance,

Even if the war did last 1 day, we will say that the US were at war in 1811. The information we want to confirm can be “there were 21 full years – from Jan 1st till Dec 31st – where the US were not at war, once, during those years“. From the row above, we can claim that the US were at war in 1811. Most of the time, we have

I.e. there is a beginning (here 1775) and an end (1783). So here, the US are said to be at war in 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783. To extract the information, we look for regular expressions in the first column, with number, on 4 digits.

https://freakonometrics.hypotheses.org/files/2017/03/guerre-us1.png

Well, sometimes it can be a bit tricky, since we have 3 dates, 1941, 1945 and (in the legend) 1944. But if we consider the minimal and the maximal dates, we have our range of dates.

Now that we we how to extract information, let’s do it. The code will be

library(stringr)
ext_date=function(x){
dates12="[0-9]{4}"
#grep(pattern = dates2, x = col1[1])
L=str_extract_all(as.character(x),dates12)
return_L=list()
if(length(L)>0){
for(j in 1:length(L))
if(length(L[[j]])==1) return_L[[j]]=as.numeric(L[[j]])
if(length(L[[j]])>=2) return_L[[j]]=seq(min(as.numeric(L[[j]])),max((as.numeric(L[[j]]))))
}
return(return_L)}

For the US, we get the following years

library(XML)
tables=readHTMLTable("warUS.html")
list_dates=list()
for(i in 1:length(tables)){
if(!is.null(dim(tables[[i]]))){
if(ncol(tables[[i]])>1){
col1=tables[[i]][,1]
list_dates[[i]]=lapply(col1,ext_date)
}
}}
d=unique(unlist(list_dates))

(red means at war, while green means no-war) and indeed,

> length(d)
[1] 222

there were 222 years with war.  Now, what about another country. Like France. Here I use the French wiki page, since information is not in tables in the English one.

tables=readHTMLTable("guerre.html")
list_dates=list()
for(i in 1:length(tables)){
if(!is.null(dim(tables[[i]]))){
if(ncol(tables[[i]])>1){
col1=tables[[i]][,1]
col2=tables[[i]][,2]
col12=paste(col1,col2)
list_dates[[i]]=lapply(col12,ext_date)
}
}}
d=unique(unlist(list_dates))

On the same period of time (starting in 1775), France was also on war most of the time.

Less than the US, but still: 185 years with war,

> length(d[d>=1775])
[1] 185

And on a longer period of time? Why not start, say, around the Hundred Years’s War,

meaning that since 1337, there were (only) 174 years without a single war where France was involved.

Let’s try another one. Like Canada,

tables=readHTMLTable("warCAN.html")
list_dates=list()
for(i in 1:length(tables)){
if(!is.null(dim(tables[[i]]))){
if(ncol(tables[[i]])>1){
col1=tables[[i]][,1]
list_dates[[i]]=lapply(col1,ext_date)
}
}}
d=unique(unlist(list_dates))

Guess what… there’s a lot of green on that graph. Surprised?

Juxtaposer des cartes et ‘confounding’

Pour aller un peu plus loin que mon précédant billet, élections, pièges à com(mentaires à la con) je voulais juste montrer quelques cartes, obtenues par simulations. Mais avant, revenons deux minutes sur la notion de ‘confounding‘. Pour reprendre le dessin de wikipedia, l’idée est que, conditionnellement à https://latex.codecogs.com/gif.latex?Z (notre ‘confounding factor’), les variables https://latex.codecogs.com/gif.latex?X et https://latex.codecogs.com/gif.latex?Y sont indépendantes. Mais cette indépendance conditionnelle peut (comme bien souvent) impliquer une forte corrélation entre https://latex.codecogs.com/gif.latex?X et https://latex.codecogs.com/gif.latex?Y. On peut ainsi imaginer un modèle de la forme https://latex.codecogs.com/gif.latex?X=Z+\varepsilonhttps://latex.codecogs.com/gif.latex?\varepsilon désigne une composante idiosyncratique, et https://latex.codecogs.com/gif.latex?Y=Z+\eta (où là aussi https://latex.codecogs.com/gif.latex?\eta est une composante idiosyncratique).

Par exemple, on peut supposer que https://latex.codecogs.com/gif.latex?Z est une variable liés à la lattitude du département, par exemple la température moyenne (histoire d’avoir une vague histoire à raconter, et d’être moins rébarbatif)

> n=115
> X=matrix(rnorm(3*n),n,3)
> X[,1]=sort(X[,1])
> library(maps)
> map("france",fill =TRUE,
col= rgb(1,0,0,pnorm(X[,1])))

Maintenant, supposons qu’on ait une variable https://latex.codecogs.com/gif.latex?X très corrélée à https://latex.codecogs.com/gif.latex?Z, par exemple la vente de crème solaire (en volume, toujours pour raconter une histoire qui illustrerait un peu mon propos)

> r=.8
> X[,2]=r*X[,1]+sqrt(1-r^2)*X[,2]
> map("france",fill =TRUE,
col= rgb(0,1,0,pnorm(X[,1])))

ce qui donne le nuage de points suivant (avec une forte corrélation avec le ‘confounding factor’)

On suppose maintenant qu’on a une autre variable https://latex.codecogs.com/gif.latex?Y, elle aussi très corrélée à https://latex.codecogs.com/gif.latex?Z, par exemple le prix d’une plaquette de beurre (qui pourrait être très cher dans le sud, où l’on cuisine plutôt à l’huile)

> r=.8
> X[,3]=r*X[,1]+sqrt(1-r^2)*X[,3]
> map("france",fill =TRUE,
col= rgb(0,1,0,pnorm(X[,1])))

avec une corrélation du même ordre, avec le ‘confounding factor’

Si on juxtapose les deux cartes, on a des variables corrélées,

mais on ne peut pas en conclure, juste en regardant ces cartes, que les ventes de crème solaire influencent le prix d’une plaquette de beurre ! Et on peut même accentuer encore l’effet, en jouant un peu sur les couleurs. Par exemple, avec

> map("france",fill =TRUE,col = rgb(1,0,0,qbeta(pnorm(X[,1]),.2,.5)))

on accentue un peu l’écart entre le nord et le sud (je joue ici sur l’échelle des couleurs, pas sur les valeurs !)

et sur nos deux variables, on a encore une juxtaposition qui donne envie de raconter un jolie histoire, non ?

Ah oui, ma corrélation entre les variables https://latex.codecogs.com/gif.latex?X et https://latex.codecogs.com/gif.latex?Y est relativement forte, de l’ordre de 0.6 (qui est supérieure à ce qu’on avait observé hier sur le taux de chômage et le taux du FN aux élections régionales)

> cor(X)
[,1]      [,2]      [,3]
[1,] 1.0000000 0.7863838 0.7727523
[2,] 0.7863838 1.0000000 0.6312878
[3,] 0.7727523 0.6312878 1.0000000

mais la corrélation est très sensible aux lois marginales, ça ne veut pas dire grand chose. Même si, visuellement, le nuage de points peut faire penser à celui qu’on avait hier

Bref, juxtaposer des cartes, c’est joli. De là à en déduire quoi que ce soit….

Élections, pièges à com (mentaires à la con)

Je suis tombé hier, sur le site de The Economist sur deux cartes, juxtaposées, une présentant le taux de chômage (en rouge, à gauche) et l’autre le vote FN (en bleu, à droite),

L’idée serait ici de comparer les cartes, et de se dire que les deux variables “taux de chômage” (produit par l’insee) et “vote FN” (aux élections régionales de 2015) seraient corrélées, et que l’une expliquerait peut être l’autre… Comme il est difficile (?) d’affirmer que le vote FN pourrait induire du chômage, on serait tenté de dire que les chômeurs votent FN, un raccourci de ce genre. Je ne dis pas que c’est faux, je dis juste que c’est s’aventurer sur un terrain dangereux, quand on commence à comparer des cartes, rapidement (et donner lieu à toutes sortes de commentaires à la con, pour expliquer le titre du billet). Sur ces deux variables, on peut d’ailleurs regarder les données brutes,

Oui, les variables semble très corrélées, par département. Après, si on calcule la corrélation, on “seulement” 0.516. Soit dit en passant, la corrélation ne dépend pas de l’orientation du graphique, j’aurais parfaitement pu mettre le taux de chômage en ordonnées. Mais classiquement, l’ordonnée est la variable que l’on souhaite expliquer, et l’abscisse est la variable (dite) explicative. Même si, comme toujours en régression, on n’établit aucun lien causal.

Bien sûr, il y a des départements pour lesquels il y a un écart, avec un chômage fort, et qui pourtant ne semblent voter massivement pour le FN (aux élections régionales).

En fait, on peut trouver des dizaines de cartes, qui présente des répartitions relativement proches, comme le rapport inter-décile des niveaux de vie par département

le taux de pauvreté par département

(on pouvait retrouver cette carte en ligne)

ou encore la part des minima sociaux dans le revenu disponible des ménages par département

Bref, on aurait très envie de dire que le vote FN s’explique par le chômage, la pauvreté, etc. Mais on ne peut pas…. C’est une faute de raisonnement, connu sous le nom d’ecological fallacy. En effet, le vote est un comportement individuel, par sa nature même (on va, individuellement, mettre un bulletin dans l’urne). Et on n’a pas le droit d’induire des comportements individuels d’observations agrégées… Ca ne veut pas dire que la relation causale n’est pas présente, ou le contraire… ça veut juste dire qu’on ne peut rien affirmer, juste en juxtaposant des cartes, on n’a aucunement une preuve (tout juste une vague corrélation au niveau agrégé). Aussi tentant que ça puisse être.

Pour dire quelque chose de censé sur les choix de vote, il est nécessaire d’avoir des enquêtes (ou peut être avoir accès à des votes électroniques, comme le vote des français de l’étranger aux législatives, par exemple, mais ça n’est pas vraiment possible, donc on va se limiter aux études, aux sondages). Par exemple le graphique dans Les Echos, à l’époque des régionales, justement,

Le chômage et le niveau de diplôme étant des variables très corrélées, on pourrait avoir l’impression d’avoir une piste.

Un problème important dans les cartes, c’est leur granularité : quand on regarde les départements, on est sur des espaces géographiques beaucoup trop grands ! un département, c’est très hétérogène. En particulier, il peut y avoir, ou pas, de grosse métropole. Certains chercheurs ont souligné que le vote FN est important dans la grande périphérie des métropoles, estimant qu’il augmente avec la distance du centre-ville. On le voit assez nettement sur la carte suivante

Le soucis, quand on utilise une granularité plus fine, c’est qu’on ne voit plus grand chose, comme sur les cartes ci-dessous, qui reprennent le résultat du FN aux élections régionales

et le taux de chômage (des 25-55 ans)

Bref, faire une étude montrant une relation causale, c’est pas simple… mais promis, si je trouve des données, je veux bien me lancer !

Les sondages avaient tout faux en 2016? Ah bon?

Allez, un dernier billet sur les sondages, d’autant plus que le débat de demain soir devrait porter (plus spécifiquement) sur les faillites sur sondages anglais et américains, de 2016.

  • Alors comme ça les sondages seraient “faux” ?

Je n’aime pas cette terminologie. J’ai l’impression que la confusion vient en grande partie du fait qu’on analyse, au final, un vote aux élection comme un référendum. C’est pour ça qu’on a tendance à mettre dans le même parnier le référendum britannique et les élections américaines pour parler de la “faillite des sondages“. Un point amusant est que si classiquement, on essaye de quantifier le nombre de voix obtenues, aujourd’hui, on communique davantage sur la “probabilité de gagner”. Un peu comme en météo quand on parle de la probabilité qu’il pleuve (PDP, qui est un concept qui me dépasse complètement, comme j’en ai parlé voilà plusieurs années sur ce blog).

Mais revenons sur ce qui s’est passé, un instant. La veille du vote américain, on nous indiquait que la probabilité que Donald Trump gagne était de l’ordre de 15%. Ce qui est la probabilité de tomber sur 6 en lançant un dé. Ou de tomber sur un somme faisant 6 en lançant deux dés. Comment dire… Je me souviens de la réaction de mon fils, il y a plusieurs années, qui s’énervait lorsqu’on jouait à Serpents et Echelles (ou au jeu de l’oie, ou aux petits chevaux) et que, par hasard, je faisais un 6, et que c’est effectivement ce dont j’avais besoin pour gagner. “Tu as triché papa !”. Ai-je besoin de faire un billet de blog pour expliquer qu’avoir un 6 en lançant un dé, “ça arrive” ? Comme je le disais dans un billet l’autre jour, on retrouve ici des débats classiques en gestion des risques. Si je prédis le décès de ma belle-mère avec 1 chance sur 1000 ou même 10000, et qu’elle décède, avais-je raison, ou pas ? C’est la multitude des prévisions qui permet de juger de la qualité de la prévision. Si dans une population importante, la proportion de décès est de 1 sur 1000, alors mon estimation était bonne. Mais les élections, on ne les observe qu’une fois…

Continuons un instant notre réflexion… Ce matin, en partant, la météo m’annonçait une “probabilité de pluie de 15%”. Que dois-je faire de cette information ? Dois-je arrêter de la consulter, le matin, car elle s’est trompé puisqu’il a plu. S’est-elle d’ailleurs trompée ? Et ai-je d’ailleurs le droit de comparer la météo et un vote ? Si on y réfléchi un peu non. Si la météo m’indique une “probabilité de pluie de 15%”, je peux légitimement décider de remettre mon projet de faire en longue balade en vélo toute la journée à plus tard. Et ma décision n’aura pas d’impact sur le fait qu’il pleuve ou pas (sauf si, comme moi, vous avez observé que justement, il pleut précisément les jours où vous n’avez ni parapluie ni manteau imperméable…). Mais pour les votes ? Si le jour du vote on m’annonce que mon candidat a 15% de chances de gagner, et que je décide de ne pas sortir pour aller voter, ça n’est pas la même chose ! Le fait qu’il gagne, ou pas, dépend en grande partie de mon action ! Les gens peuvent changer d’avis, et prendre des décisions en fonction de ce qu’on leur annonce. Et ça aura un impact sur l’élection (si beaucoup de monde raisonne ainsi). Alors que pour la pluie….

  • Une “probabilité de gagner” ?

Prévoir l’avenir c’est dur. Ce que j’aime bien sur certains sites (je pense à 538) c’est par exemple la nuance qui est faite entre les forecast (prévision pour un scrutin à venir, dans plusieurs semaines) et les “now-cast“, correspondant à une projection de ce qui se passerait lors d’une hypothétique élection qui se tiendrait lors du sondage. Mine de rien, c’est une nuance assez fondamentale, je pense. Maintenant, un point très important est, me semble-t-il, l’importance donnée à cette “probabilité de gagner”.

Dans mon prédédant billet, je faisais quelques simulations pour montrer que la probabilité de gagner est un concept difficile à comprendre, car il reflète essentiellement une incertitude. Au lieu de faire des simulations, faisons plutôt quelques calculs. Dans le cas du référendum anglais (histoire de simplifier un peu l’interprétation), supposons qu’un sondage donne “Remain” à 52%. Si on veut un intervalle de confiance à 95%, on a (en gros) un intervalle de ±3 points, soit [49%,55%]. Dans la terminologie statistique, on aura une loi normale, centrée sur 52%, avec un écart-type de 1.5%. La probabilité d’être au dessus de 50% est ici de 91%

> 1-pnorm(50,52,1.5)
[1] 0.9087888

ce qui donne une cote à 10 contre 1

> (1-pnorm(50,52,1.5))/pnorm(50,52,1.5)
[1] 9.963564

Si on avait obtenu 51%, c’est à dire un intervalle de confiance [48%,54%], on aurait une côte à 3 contre 1.

> (1-pnorm(50,51,1.5))/pnorm(50,51,1.5)
[1] 2.960513

Autrement dit, si entre deux jours consécutifs, les sondages passent de 51% à 52% (un hausse de un point), la côté passe de 3 contre 1 à 10 contre 1 ! (je parle ici de côte car beaucoup ont utilisé les paris en ligne pour prévoir la victoire de tel ou tel camp). Autrement dit, les paris (ou les probabilités qu’un camp l’emporte) sont très très sensibles à de très faibles variation dans le modèle. Et ceci n’est pas sans poser de problème quand on sait comment fonctionne le lissage des sondages (très fort au début puis de plus en plus faible au fur et à mesure que le jour de l’élection approche): la probabilité de gagner devient incroyablement volatilé en fin de course, pouvant passer de 5 contre 1 pour un candidat à 5 contre 1 pour l’autre, si deux sondages varient de 3 points (51.5% pour le premier, 48.5% pour le second).

Historiquement, les sondages donnaient une proportion, genre 52%. Puis il y a quelques années, l’intervalle de confiance est apparu. Et là, j’ai l’impression que les journalistes ont du comprendre qu’ils y perdaient. Par ce que dire que la proportion est entre 49% et 55% (avec une probabilité de 95%), ça n’est pas super sexy. La parade semble être de parler de “la probabilité de gagner” qui permet d’avoir des chiffres très variables, très grands ou très petits. Bref, des chiffres télégéniques, presque clairs (“probabilité de gagner”, tout le monde comprend, hein ?), et souvent énorme, par exemple ici 10 contre 1 (ou 91% dans une terminologie plus probabiliste). Mais si on essayait de mettre un intervalle de confiance sur cette probabilité de gagner ? A la louche, quand on a une fréquence de l’ordre de 52%, la probabilité de gagner est de 91%, mais l’intervalle de confiance est entre 25% et 100%

> 1-pnorm(50,52+c(-2,+2)*1.5,1.5)
[1] 0.2524925 0.9995709

Avec une fréquence de 50.5% obtenue lors d’un sondage, j’aurais un intervalle de confiance à 95% entre 5% et 99%

> 1-pnorm(50,50.5+c(-2,+2)*1.5,1.5)
[1] 0.04779035 0.99018467

Bref, cette probabilité de gagner est assez incertaine… non ? Dit autrement, cette histoire de “probabilité de gagner” est une belle arnaque…

  • Que s’est-il passé en Angleterre ?

Oui, les sondages se sont trompé, dans le sens où il y a eu une différence (relativement) importante entre les résultats de l’élection et des sondages. Dans le premier cas, “leave” à gagner alors que les sondages semblaient avoir tendant à croire que “remain” aurait une majorité. Bref, globablement, on prévoit 0 et on obtient 1. C’est une grosse erreur. Maintenant, si on regarde un peu en détails, comme toujours il peut y avoir plusieurs explications à cette différences entre des sondages et les résultats finaux, comme le notait par exemple Andrew Gelman

  1. les personnes qui ont répondu aux sondages n’étaient pas un “échantillon représentatif” des électeurs (et peu importe la raison au fond, mais si les deux populations diffèrent, il ne faut pas être surpris d’avoir une différence)
  2. les réponses aux sondages permettent mal de mesurer les intensions de votes (par exemple si le taux d’indécision est trop fort, et non aléatoire)
  3. la décision a été prise le dernier jour
  4. la participation électorale a été différente de celle estimée (par exemple des personnes qui voulaient voter “remain” qui se sont abstenus, persuadé de la victoire de leur camp)
  5. la faute à pas de chance, ce qu’on appelle en statistique l’incertitude d’échantillonage.

J’avais fait un billet sur ce dernier point, rappelant qu’il est beaucoup plus important que ce qu’on apprend souvent en statistique, justement à cause des autres effets. Et c’est probablement ce qui s’est passé en Angleterre, un mélange de toutes ces causes. Ah si, peut être juste un point que je pourrais mentionner ici : le type de sondage utilisé a eu un impact considérable, les sondages par téléphone mettant le “remain” bien plus haut que les sondages en ligne.

  • Que s’est-il passé aux Etats-Unis ?

Comme je l’ai déjà dit, prévoir le vote aux Etats-Unis est compliqué, compte tenu du mode de scrutin. Mais au moins, les modèles utilisés sont clairement décrits (on pourra lire le guide publié par 538 en juin 2016). La modélisation permettant de faire une prévision se fait (en gros) en quatre temps,

  1. Collecter les sondages, pondérer et agréger. Par exemple, un sondage local (par état) est très différent d’un sondage national. Et un sondage sur toute la population n’est pas la même chose qu’un sondage sur des électeurs probables.
  2. Ajuster les sondages. En particulier, il peut être intéressant de lisser les résultats pour un même institut de sondage, en faisant des moyennes sur les sondages précédants. La subtilité est de faire varier le paramètre de lissage, avec des poids très conservateurs très en amont de l’élection (on lisse beaucoup, avec peu de variabilité entre deux dates) et au contraire, des poids plus faibles pour le passé au fur et à mesure que l’on se rapproche du jour de l’élection (on lisse peu, et les résultats deviennent très volatiles, très incertains)
  3. Combiner avec des données démographiques et économiques. Il est important de tenir compte de variables démographiques, aux Etats Unis, pour comprendre les changements possibles entre les élections de 2016 et celles de 2012. Par exemple en tenant compte de concentration éthniques, ou de changement d’âge moyen dans une zone géographique. Ensuite, il est possible de tenir compte de variables économiques, en particulier des niveaux d’emploi dans la région, le revenu personnel, des niveaux de consommation (personnels), ainsi que des niveaux d’indices boursiers (comme le note 538). On peut aussi tenir compte d’une information importante qui est le nombre de jours avant l’élection. Lauderdale & Linzer (2014) donne pas mal d’information sur les variables prédictives, justement.
  4. Projeter, par simulations. En simulant des scénarios, de manière corrélée entre les états, on peut arriver à des scénarios que l’on peut ensuite agréger, pour avoir des résultats nationaux.

Ce genre de modèle s’est relativement bien comporté, dans une marge d’erreur raisonnable. Mais le fait est que quelques pourcentages d’erreur ont donné des résultats très différents de ceux “attendus”. Ce qui est intéressant, c’est qu’avec 48% des voix en 2012, Mitt Romney a perdu l’élection présidentielle. Alors que Donald Trump l’a emporté, avec lui aussi près de 48% des voix. Mais Donald Trump a eu un résultat plus important que celui annoncé par les sondages dans des états clés (swing states). Un autre point important a été le fort changement de vote, jusqu’au bout. Plus de 15% des gens ont admis avoir décidé du candidat pour lequel ils voteraient au cours de la dernière semaine. D’autres sondeurs ont noté des fortes évolutions dans les non-réponses: beaucoup de personnes qui ont finalement voté pour Donald Trump ont longtemps refusé de l’avouer, et figuraient comme “non réponse”. Enfin, et c’est je pense un point important (j’avais tenté un billet sur le sujet voilà quelques années), les élections américaines ne sont pas des élections à deux candidats. Et mal prendre en compte Gary Johnson a probablement induit des erreurs dans les sondages. S’il était connu que Gary Johnson et Donald Trump chassaient le même électorat, beaucoup ont surestimé son score (estimé à 5% au niveau national, mais finalement à 3%), la différence s’étant probablement reporté sur Donald Trump

Après, il faut constater qu’il est difficile de construire un modèle, basé sur la rationalité des gens pour prévoir un comportement électoral. Quand 538 propose d’intégrer un indice économique, c’est parce qu’une hausse soudaine du chômage devrait avoir un impact sur le vote de certaines personnes (reste à savoir lequel, mais le choix des variables explicatives est un exercice en soi, comme le montre l’explosion des modèles sparse, permettant de trouver les bonnes variables prédictives, et non pas de rajouter davantage de bruit). Mais comment comprendre que Donald Trump, candidat ayant obtenu l’approbation du Ku Klux Klan, ait obtenu plus de voix que Mitt Romney en 2012 auprès des électeurs noirs, hispaniques et asiatiques ? Peut-on encore penser que les électeurs sont rationnels ?

Déclarer ou révéler, retour sur les sondages

Voilà une semaine, je mettais en ligne un court billet “les sondages et le bruit” sur les sondages, et leur biais, en préparation pour une intervention en milieu de semaine, sur Paris. Mais cette semaine, je voulais continuer à assembler mes notes de lecture…

  • Déclarer ou révéler

Bon, on va commencer par enfoncer des portes ouvertes, mais il est toujours bon de relire “l’opinion publique n’existe pas” de Bourdieu.

Toute enquête d’opinion suppose que tout le monde peut avoir une opinion ; ou, autrement dit, que la production d’une opinion est à la portée de tous. Quitte à heurter un sentiment naïvement démocratique, je contesterai ce premier postulat. Deuxième postulat : on suppose que toutes les opinions se valent. Je pense que l’on peut démontrer qu’il n’en est rien et que le fait de cumuler des opinions qui n’ont pas du tout la même force réelle conduit à produire des artefacts dépourvus de sens. Troisième postulat implicite : dans le simple fait de poser la même question à tout le monde se trouve impliquée l’hypothèse qu’il y a un consensus sur les problèmes, autrement dit qu’il y a un accord sur les questions qui méritent d’être posées. Ces trois postulats impliquent, me semble-t-il, toute une série de distorsions qui s’observent lors même que toutes les conditions de la rigueur méthodologique sont remplies dans la recollection et l’analyse des données.

Cela dit, j’irais probablement plus loin, en disant que le sondage crée une opinion, au sens où la personne interrogée se force à chercher la réponse à une question qu’elle ne s’était peut être jamais posée. Ou pas encore posée, dans le cas des sondages électoraux. Mais c’est le principe même des sondages, les personnes interrogée devant déclarer pour qui elles comptent voter le jour de l’élection (avec toutes sortes d’autres questions).

D’ailleurs, un des problèmes de cette “déclaration” est le biais de “désirabilité sociale“: les personnes interrogées aimer se présenter sous un jour favorable à l’enquêteur. Le vote pour Trump a été comme le vote pour le Front National (historiquement), quelquechose d’inavouable. Le soucis, c’est qu’il est difficile d’estimer ce biais. En France, une correction était possible, en tenant compte de la différence entre les sondages, et les résultats sur des élections passées. Mais aux Etats-Unis, il n’y avait pas de précédant.

Et si on va plus loin, on peut se demander s’il est pertinent d’utiliser des enquêtes sur les intentions de votes comme outils de prévision électorale. Ne pourrait-on pas y voir pour les personnes interrogées, de “mini-élection”, avec moins d’impact? Ne peut-on pas imaginer l’électeur socialiste, qui se dirait “et si je disais que je vais voter pour Jean-Luc Mélanchon, ça permettra peut être de tirer un peu plus vers la gauche, même si le jour J je voterais probablement pour Benoît Hamon” (le fameux vote “utile”). Compte tenu de l’importance des sondages pour les journalistes politiques, ne peut-on imaginer que les personnes interrogées jouent un jeu un peu plus subtile que juste réponse à une question sur leurs intentions de vote ? C’est un biais bien connu en économie expérimentale, lorsque l’on cherche à connaître les préférences des agents, entre les préférences déclarées et celles qui sont révelées.

  • Les sondeurs sont ils (vraiment) si mauvais ?

Les erreurs sont souvent bien connues. On peut penser aux élections en Angleterre de juin 1970, lorsque Harold Wilson perdit face à Edward Heathà la surprise générale (la légende prétend qu’il avait même vendu sa maison, tellement il était certain de rester au 10 Downing Street). En France, le choc d’avril 2002 reste dans la mémoire collective. Comment les instituts de sondages n’avaient pas vu venir le second tour entre Jacques Chirac et Jean-Marie Le Pen? C’est le repproche qui avait été fait, à l’époque, où les sondeurs ont été tenu pour responsable. Etrangement, retrospectivement, le risque était présent. Mais personne n’ausait l’admettre. Plus récement, en juin 2016, c’était le choc du Brexit, et en décembre 2016, c’était l’élection de Donald Trump. Si beaucoup on critiqué les sondages suite à son élection, il convient de relire certains articles publiés à cette époque. Par exemple, mi-octobre, “pourquoi des sondages donnent encore Trump gagnant ?“, parmi tant d’autres (oui, nous avons une mémoire très sélective).

Ce qui semble être reproché aux instituts de sondages, c’est leur opacité, et leur manipulation des chiffres. Mais il faut leur donner raison. Comme le dit la loi, “les listes électorales peuvent être consultées par tout électeur (même inscrit sur une autre commune) à condition de ne pas les utiliser à des fins commerciales“. Autrement dit, les instituts de sondages ne peuvent pas les utiliser pour constituer un plan de sondage. Ne pouvant faire de vrai sondage aléatoire, il faut donc ruser, et on va échantillonner par quotas. C’est ce qu’on appelle du redressement. Pour faire simple, on applique des poids pour se rapprocher de la “population de base”. Qu’on ne connait pas. Idéalement, on aimerait bien connaître ces gens inscrits sur les listes. Mieux encore, connaître ceux qui iront effectivement voter (car ce sont vraiment ces personnes qui nous intéressent). Si aucun homme ne va voter, le jour J, il conviendrait de faire un échantillon de sondage avec uniquement des femmes. Encore une fois, comprendre l’abstention est essentiel.

Pour faire les quotas, on utilise des données géographiques, mais aussi d’âge, de genre, et de catégorie soci-professionnelle. En fait, cette dernière est (malheuresement) seulement une catégorie profesionnelle. On pensera à cette merveilleuse catégorie des “inactifs” qui correspond à des réalités très différentes. On utilise très peu les données de niveau d’étude par exemple, comme le rappelle Avner dans les sondages sont-ils devenus fous, les personnes faiblement diplômées sont faiblement présentes dans les sondages,

Il devient nécessaire de faire des redressements. Mais ces derniers n’ont de sens que s’il bien faits. Certains préconisent d’ailleurs des catégories “socio-affinitaires“, et non plus socio-professionnelles.

  • On veut des chiffres !

Allez, quelques chiffres, que j’ai découvert dans l’article les sondages sont-ils devenus fous d’Avner Bar-Hen, qui permettent d’avoir un ordre de grandeur intéressant. Pour faire une enquête, on peut avoir envie d’avoir 5000 personnes qui répondent à une liste de questions. Mais combien de personnes faut-il solliciter, par téléphone, pour avoir 5000 réponses. La réponse est simple, plus de 15 fois plus : pour avoir 5240 réponses, il a été nécessaire de composer 84000 coups de fils,

  • Des intensions de vote à une probabilité de gagner

Les sondages reposent sur la théorie de l’échantillonnsages, et il y a une part (importante) d’incertitude, comme on le voyait la dernière fois. Et comme le savent les statisticiens, il est possible de mal faire son travail, mais d’avoir de la chance, et de faire une bonne prévision, mais aussi de faire son travail correctement, et de se tromper lourdement.

Ce qui m’a intéressé lors des dernières élections américaines, c’est qu’on ne regarde pas le nombre de voix (prédit), mais la probabilité de gagner, pour tel ou telle candidat. Ce qui a du sens quand on pense au mode de scrutin. Mais traduit dans un contexte plus français (où on se place entre les deux tours), la probabilité de gagner est une information sur l’incertitude du sondage.

> simu=function(i){
+ n=1+2000
+ vote=sample(c("A","B"),size=n,
+ replace=TRUE,prob=c(.515,.485))
+ france1=mean(vote=="A")
+ n=1+200
+ vote=sample(c("A","B"),size=n,
+ replace=TRUE,prob=c(.515,.485))
+ france2=mean(vote=="A")
+ prop=c(france1,france2)
+ names(prop)=c("FR1","FR2")
+ return(prop)
+ }
> Sbi=Vectorize(simu)(1:1e4)
> plot(density(Sbi[1,]))

Ici, le candidat rouge a 15% de chances de gagner, contre 85% pour le candidat bleu. Avec 2000 personnes interrogées. Mais si on a seulement 200 personnes interrogées, on passe à 40% de chances de gagner pour A.

> plot(density(Sbi[2,]))

Autrement dit, la probabilité de gagner est, à mon sens, essentiellement une information liée à l’incertitude qui entoure le scrutin.

  • Quid du… “big data” ?

Allez, mettons enfin les pieds dans le plat… pourquoi pas utiliser “le big data”? Oui, le “big data” peut tout, je pense qu’il peut même assurer le retour de l’être aimé, alors il doit bien pouvoir prédire qui va gagner une élection…

Il y a 15 ans, internet n’était pas considéré comme un média. Personne n’osait trop faire des sondages en ligne*. Cette époque est révolue*. Au point que bon nombre se sentent aujourd’hui observés, et adoptent des stratégies, des comportements, qu’il convient de décoder en prenant des précautions.

L’écoute de la toile permet d’éviter l’écueil du déclaratif, pour observer, et induire des tendances, des comportements. Il serait intéressant de voir ce qu’en pensent les data scientists de chez Facebook par exemple. Comme le notait Stéphane Rozès, “si la France est une grande consommatrice de sondages, l’idée même qu’un statisticien puisse annoncer en amont le résultat de l’élection est baroque et attentatoire à l’imaginaire politique français.C’était en 2013. Depuis, comme le montre the pulse of the people, l’analyse des tweets (par exemple) permet d’observer beaucoup de choses. La difficulté est que si une équipe électorale sait ce qui est observé, il est aisé de créer des robots pour manipuler l’analyse. Le jeu du chat et de la souris peut commencer.

Mais il n’en reste pas moins que l’analyse des traces laisses sur la toile est importante, et les instituts de sondages le savent. Un “like” est une information intéressante, de même que savoir les pages vues, et les liens partagés. Cela dit, si on pousse un peu le raisonnement, comme le faisait Andrew Gelman dans un article paru au début du mois dans Science, si on était capable de prédire parfaitement le résultat d’une élection, cette dernière devient superflue, non ?

* ce qui est intéressant, c’est que dans le cas du Brexit, ce sont justement les sondages en ligne qui avaient “prévu” la victoire du leave, contrairement aux sondages téléphoniques qui donnaient le remain en tête….

Les sondages et le bruit

Après les sondages pour les présidentielles américaines l’été passé, on commence à crouler sous les sondages, en France, pour la prochaine élection présentielle. Avec les questions que ça induit. Et loin de moi l’idée de faire un billet sur les sondeurs sont des gros nuls, parce que c’est quand même plus compliqué que ça. Et il est normal de faire des erreurs, comme le rappelait  Ranganathan (2014). Et comme on m’a convié dans deux semaines à une table ronde sur les sondages, je me suis dit qu’il serait temps que je travaille un peu.

Même si ça semble être des banalités, les élections américaines et les élections en France sont très différentes.

Premier point, les 538 grands électeurs, contre un vote direct en France. Quand on estime la probabilité de gagner on obtient des choses très différentes.

On peut faire des simulations pour s’en rendre compte

simu=function(i){
n=1+2000
vote=sample(c("A","B"),size=n,replace=TRUE,prob=c(.51,.49))
region=sample(1:50,size=n,replace=TRUE)
france=mean(vote=="A")
us=aggregate(vote,by=list(region),function(x) mean(x=="A"))$x
prop=c(france,mean(us>1/2))
names(prop)=c("FR","US")
return(prop)
}
S=Vectorize(simu)(1:1e4)
plot(density(S[1,]))

En France, en interrogeant 2000 personnes, on a une très faible incertitude sur probabilités réelles, et dans 82% des scénarios, le candidats qui a 51% d’intention de vote est déclaré vainqueur.

> mean(S[1,]<.5)
[1] 0.1841

Aux Etats-Unis (ou disons une simulation d’une élection avec un collège électoral, avec ici 50 grands électeurs), c’est une autre histoire.

plot(density(S[2,]))

Dans un tiers des cas, on se trompe sur le vainqueur.

> mean(S[2,]<.5)
[1] 0.3319

Et la distribution de la couleur des grands électeurs peut être très volatile… allant de 30% à 70% pour A, alors la moitié du peuple a voté pour lui.

Deviner qui va gagner est un exercice manifestement compliqué aux Etats-Unis, à cause de ces grands électeurs. Et je ne parle pas du fait qu’estimer une probabilité très finement ne présage en rien du résultat final, comme  je l’avais dit dans un précédant billet.

Deuxième point, le nombre de candidats dans la course. Un simplifiant un peu, ils sont deux aux Etats-Unis, avec (quasiment) un vote en un tour, alors qu’en France, ils sont plus nombreux, avec un vote en deux tours, et une règle qui dit que seuls les deux premiers accèdent au second tour.

Commençons par le cas simple, avec quatre candidats, et une élection à un tour (à la majorité)

simu=function(i){
n=1+2000
vote=sample(c("A","B","C","D"),size=n,replace=TRUE,prob=c(.27,.26,.24,.23))
tb=table(vote)
return(names(which.max(tb)))
}
S=Vectorize(simu)(1:1e4)
barplot(table(S))

Pour passer au second tour, on imagine qu’il faut comprendre comment se passe le report des voix. On va supposer qu’il existe une espèce d’ordre, entre les candidats, A, B, C et D. Si son candidat ne passe pas le prochain tour, on vote pour un voisin. Autrement dit, A ne votera jamais pour C, ni pour D.  Mais si B est candidat, il votera pour lui. Par contre, si B a le choix entre A et C, on va supposer que l’électorat se partage en deux, entre A et C. Par contre, il ne votera jamais pour D.

simu=function(i){
n=1+2000
probabilite=c(.27,.26,.24,.23)
vote=sample(c("A","B","C","D"),size=n,replace=TRUE,prob=probabilite)
tb=table(vote)+rnorm(4)/1000
perdants=LETTERS[1:4][(rank(tb)%in%1:2)]
if(("A"%in%perdants)&("B"%in%perdants)) prob2=c(0,0,probabilite[2]+probabilite[3],probabilite[4])
if(("A"%in%perdants)&("C"%in%perdants)) prob2=c(0,probabilite[2]+probabilite[1]+probabilite[3]/2,0,probabilite[4]+probabilite[3]/2)
if(("A"%in%perdants)&("D"%in%perdants)) prob2=c(0,probabilite[2]+probabilite[1],probabilite[4]+probabilite[3],0)
if(("B"%in%perdants)&("C"%in%perdants)) prob2=c(probabilite[2]+probabilite[1],0,0,probabilite[4]+probabilite[3])
if(("B"%in%perdants)&("D"%in%perdants)) prob2=c(probabilite[1]+probabilite[2]/2,0,probabilite[3]+probabilite[2]/2+probabilite[4],0)
if(("C"%in%perdants)&("D"%in%perdants)) prob2=c(probabilite[1],probabilite[2]+probabilite[3],0,0)
vote=sample(c("A","B","C","D"),size=n,replace=TRUE,prob=prob2)
tb=table(vote)
return(LETTERS[which.max(tb)])
}
S=Vectorize(simu)(1:1e4)
barplot(table(S))

Le résultat est vraiment différent. Et la clé est le report des voix, entre les deux tours. Aussi, deviner qui va gagner est un exercice manifestement compliqué en France, à cause de ces deux tours.

Au delà des systèmes de votes, il existe quand même des similitudes, quand on parle d’incertitude dans les sondages. Classiquement, on pense au biais d’estimation. Parce qu’il correspond à ce que toute personne ayant fait un peu de statistiques (ce qui représentera bientôt la majorité des français, si j’en crois les réformes du programme du lycée) doit savoir (je n’ai pas dit compris). C’est le fameux « le sondage IFOP publié jeudi dans France-Soir a, quant à lui, été mené auprès de 1 046 personnes, soit une marge d’erreur d’environ 2,5 % » . Il s’agit de la marge d’erreur.

Mais ce n’est pas la seule source d’erreur, loin de là ! La base des sondages, c’est d’avoir un échantillon aléatoire de votants (au sens de personnes qui iront voter), et d’extrapoler ensuite sur la population entière, éventuellement en pondérant les réponses. Les poids sont là pour corriger de différences observables entre la population entière, et la population interrogée. Classiquement, on va utiliser des variables démographiques (âge, genre, profession, région, etc) dans la population des électeurs. Par exemple, si sur les listes électorales on a 50% d’hommes et 50% de femmes, mais que dans notre échantillon, il y a deux fois plus d’hommes que de femmes, on va généralement attribuer un poids de 2 pour les femmes, et de 1 pour les hommes afin de corriger. Malgré tout, on peut observer une différence entre les votes estimés, et la réalité le jour du vote. Une des raisons est que la population des votants peut être différente de celle des populations inscrites sur listes électorales. Si les hommes s’abstiennent beaucoup plus que les femmes, la correction utilisée ne suffira pas. C’est ce qu’on pourrait appeler une erreur de framing. Cette dernière correspond à l’erreur que l’on fait quand la population réelle et la population de l’échantillon diffère. L’exemple classique était lié à l’utilisation du téléphone pour constituer des listes de sondés. Avec cette méthode, les personnes sans téléphone (ou sur liste rouge) étaient systématiquement exclues.

Le second problème est le traitement des non-réponses. Si la non-réponse est un phénomène purement aléatoire, imprévisible, dans ce cas, ça va juste augmenter la variance. C’est ce qu’on observe sur l’exemple ci-dessous. Si tout le monde répond, on a

simu=function(i){
n=2000
vote=sample(c("A","B"),size=n,replace=TRUE,prob=c(.51,.49))
return(mean(vote=="A"))
}
S=Vectorize(simu)(1:1e4)

Supposons maintenant que 50% des gens ne répondent pas

simu=function(i){
n=2000
vote=sample(c("A","B",NA),size=n,replace=TRUE,prob=c(.51/2,.49/2,.5))
return(mean(vote[!is.na(vote)]=="A"))
}
S=Vectorize(simu)(1:1e4)

On a davantage de dispersion, mais on n’a pas de biais. Autrement dit, le nombre de cas où A est effectivement en tête sur le sondage est du même ordre de grandeur, avec ou sans non-réponse.

Par contre, si les électeurs de A ont davantage tendance à ne pas répondre, c’est une toute autre histoire

simu=function(i){
n=2000
vote=sample(c("A",NA,"B",NA),size=n,replace=TRUE,prob=c(.51*.8,.51*.2,.49*.9,.49*.1))
return(mean(vote[!is.na(vote)]=="A"))
}
S=Vectorize(simu)(1:1e4)

Autrement dit, si la non-réponse est liée au vote, on a un biais causé par la non-réponse. C’est le cas lorsque les personnes votant pour un des candidats n’osent pas révéler. C’est ce que montre très bien Fuchs, Bossert & Stukowski (2013).

Un autre exemple connu en sondage est lié à l’ordre des questions, comme le soulignait McFarland (1981), ou même les mots utilisés, pour reprendre Smith (1987). On peut rapprocher ce biais au biais dit de spécification, lorsqu’il y a une mauvaise compréhension de la question.

Enfin (et je m’arrêterais là), il reste un biais important, qui est un biais d’indécision, pour personnes indécises ou qui pourraient juste changer d’avis entre deux dates.

Compte tenu de tous ces biais, on voit qu’il est compliqué d’estimer l’erreur associée à un sondage. En tous cas, on se doute que le fameux « Le sondage IFOP publié jeudi dans France-Soir a, quant à lui, été mené auprès de 1 046 personnes, soit une marge d’erreur d’environ 2,5 % » implique une (forte) sous-estimation de l’incertitude. En fait, si on en croit Shirani-Mehr et al. (2016), la marge d’erreur pourrait être deux fois supérieure, avec un RMSE de ±7% sur l’intervalle de confiance et non pas ±3%. J’aurais donc tendance à croire que les sondages rajoutent essentiellement une information très bruitée dans le climat pré-élections.

Prédire ou Prévoir, réflexions (probablement) personnelles

Il y a quelques années, j’avais fait un billet où je m’énervais contre une phrase que j’avais entendu (“l’homme qui avait prédit la crise). Le point de départ était surtout un énervement lié au fait que beaucoup de journalistes vivent avec des oeillères (par exemple en associant “économiste” à “type à la télé qui parle d’économie“), et ne connaissent pas la diversité de la communauté des économistes (surtout que la pluralité n’est pas vraiment une vertue présente dans les grands médias, la manière dont sont présentés les différents candidats à la future élection présidentielle peut en être une illustration). Mais je m’écarte…. en fait, un de mes points portait sur l’utilisation du terme “prédit“.

Avec un peu de recul, je ne sais pas si la langue française à changé depuis, mais j’aurais envie de revenir sur ma distinction entre “prévoir” et “prédire“. Prévoir et prédire ont deux racines latines distinctes, prévoir venant du latin praevidere, et prédire de praedicere. Beaucoup notent que “prédire” a longtemps eu le sens de “prophétiser“, où l’annonce (de ce qui doit arriver) est souvent d’inspiration divine. En anglais, c’est presque plus compliqué (car il y a plus de synonymes) mais la même confusion existe. On peut retrouver “foretell” construit sur “fore” et “tell” (qui est à relier à une notion de prémonition), “forespell” construit sur “fore” et “spell” (on retroue la notion de sort, proche du néerlandais “voorspellen”), “foresee” construit sur “fore” et “see”, ou encore  “forecast“, dont on reparlera très bientôt. A côté de ces mots, construits sur le préfixe “fore”, il existe le mot “predict“, tiré du latin praedicere, construit sur “prae” ‎(avant, que l’on retrouvé dans “pré” en français) et “dicere” ‎(dire). Comme le note le dictionnaire, “predicted” a un sens proche de “foretold” mais “without the mystical flavour”. Bref, “prédit” a longtemps eu une connotation mystique, divine.

Pourtant, les deux semblent parfois être interchangeables. Au point que fin 2006, Le Devoir écrivait « parce que cette administration n’a pas su prévoir ce qui était prévisible, nous en sommes rendus à siéger à 6 h un lundi matin! ». “prévoir ce qui était prévisible” vaste programme, non ?

Si on reste sur l’anglais, on peut tenter une distinction. Par exemple “forecast“, c’est à dire “prévoir“, est associé aux ouvrages suivants, sur amazon.com

Autrement dit, “forecast” (ou “prévision“) correspond à un aspect temporel. On cherche à prévoir, à un instant donné https://latex.codecogs.com/gif.latex?t la valeur d’une variable https://latex.codecogs.com/gif.latex?x à une date ultérieur, disons https://latex.codecogs.com/gif.latex?t+h. Classiquement, on cherche (et ça sera notre “prévision”)

https://latex.codecogs.com/gif.latex?\mathbb{E}_t[X_{t+h}]=\mathbb{E}[X_{t+h}|x_t,x_{t-1},\cdots]

C’est pour cela que bon nombre de cours de séries temporelles, ou séries chronologiques sont des cours de “modèles de prévision“.

Mais on commence à voir arriver des ouvrages de “méthodes prédictives“, “predictive modeling“, proposant des “prédictions

Si on regarde de plus près, ces techniques sont utilisées non pas dans un contexte de séries temporelles, mais de données individuelles. Ici, on cherche à prévoir une variable d’intérêt https://latex.codecogs.com/gif.latex?y à l’aide de covariables (variables dites explicatives https://latex.codecogs.com/gif.latex?x_1,\cdots,x_k. La prédiction sera classiquement

https://latex.codecogs.com/gif.latex?\mathbb{E}_{\boldsymbol{x}}[Y]=\mathbb{E}[Y|x_1,\cdots,x_k]

Sur le graphique du taux d’imposition, en France

Voilà plusieurs années (en 2011) Landais, Piketty et Saez publiaient le graphique suivant, présentant le sytème fiscal, en France, avec l’évolution du taux global d’imposition, en fonction du revenu.

https://freakonometrics.hypotheses.org/files/2017/02/revol-fiscale.png

Il y a deux ans, Yves Guiard critiquait ce graphique (rappelant que “la conversion numérique/graphique obéit à certaines règles“) et proposait une version “correcte“, sous la forme

J’ai déjà dit – voilà plusieurs semaines – que cette vision dogmatique des règles de représentation graphique ne me plaisait pas. Mais le plus simple est peut être de reprendre la réponse de Thomas Piketty, sur cette critique (je me retrouve totalement dans le propos),

(je suis désolé de découvrir cette discussion aussi tard, Béatrice m’a posté un commentaire ce matin, qui pointait vers ces deux articles)

Mais essayons de regarder un peu plus en détails. Oui, si on utilise la représentation standard de la courbe, on retrouve le graphique suivant

avec les plus pauvres à gauche, et les plus riches à droites. On a ici un graphique où le même pas sur l’axe des abscisses correspond au même nombre d’individus. Les 10% les plus pauvres (bande verticale la plus à gauche) ont un taux moyen d’imposition de 40.46% alors qu’il est de 48.09% pour les 10% qui sont juste au dessus du salaire médian (bande juste à droite de 50%). Je ne reviendrais pas sur le débat de commencer le graphique à 0% (ce débat aurait du sens, j’en conviens, mais commencer à 0% et mettre du texte entre l’axe des abscisses et la courbe, c’est un peu tricher), mais si on respecte cette règle, on obtient

Mais ce n’est pas cette visualisation qui est retenue dans le livre de Landais, Piketty et Saez, mais plutôt quelque chose qui ressemble au graphique ci-dessous (je commence à 30% pour éviter d’avoir un billet trop long)

Ce graphique est (je pense) plus intéressant que le premier. Bon, bien sûr, il se rapproche de la courbe parfaite que tout statisticien qui se respecte essaye reproduire

mais surtout, il permet de tenir compte de l’hétérogénéité qui existe dans ce dernier décile. Histoire d’illustrer mon propos, je voudrais proposer une représentation alternative de celle de Landais, Piketty et Saez. Pour se faire, on va utiliser une information complémentaire (en ligne sur le site) à savoir le revenu moyen, par centile, dans la population (voire plus fin dans le centile le plus élevé)

L’idée sera d’utiliser en abscisse non pas un pourcentage de personnes, mais un pourcentage de richesse (un peu comme avec la courbe de Lorenz),

Par exemple sur le graphique ci dessus, la bande la plus à gauche ne représente pas 10% des français, mais la fraction de français les plus pauvres, qui totalisent 10% de la richesse totale. La bande la plus à droite, ce sont les français les plus riches, qui accumulent 10% de la richesse totale. On peut d’ailleurs être un peu plus éclairant (je pense) en mettant des bandes non pas tous les 10% du revenu cumulé, mais faire l’équivalent du premier graphique, avec 10% des français. Bien entendu, les 10% les plus pauvres possède un très faible pourcentage de la richesse totale. En fait, les 30% les plus pauvres possèdent, tous ensemble, 5% de la richesse totale. Alors que les 10% les plus riches possèdent un tiers de la richesse. C’est ce qu’on peut voir sur le graphique ci-dessous

Ce graphique est – je pense – juste, au sens des normes sémiologiques, et permet de faire passer le message du graphique initial.

Après, on peut tenter une vision qui irait encore plus loin, avec non plus un taux en abscisse, mais un niveau de richesse. Aussi, le taux d’imposition, en fonction du revenu brut mensuel (sur une échelle logarithmique) ressemble au graphique ci-dessous

Forecasting Natural Catastrophes (is rather difficult)

Following my previous post, I wanted to spend more time, on the time series with “global weather-related disaster losses as a proportion of global GDP” over the time period 1990-2016 that Roger Pilke sent me last night.

db=data.frame(year=1990:2016,
ratio=c(.23,.27,.32,.37,.22,.26,.29,.15,.40,.28,.14,.09,.24,.18,.29,.51,.13,.17,.25,.13,.21,.29,.25,.2,.15,.12,.12))

In my previous post, I spend some time explaining that we should provide some sort of ‘confidence interval’ when we try to predict a pattern. That was what we call ‘model uncertainty’. But there are two (important) issues that I did not mention. (1) it is a time series, so why not use techniques dedicated to time series objects ? (2) we do not really care actually about ‘model uncertainty’ (unless we want to assess if a decreasing trend is significant, or not), and we care more about real prediction uncertainty: in the next ten years, what could be the range for the this ratio, with some given probability (say 95%)? Could we say that with 95% chance the global weather-related disaster losses as a proportion of global GDP should be (each year) within 0 and 0.35 or 0 and 0.7?

A first idea might be to use exponential smoothing techniques (without a seasonal component here).

ratio=ts(db$ratio,start=1990,frequency=1)
plot(ratio,xlim=c(1990,2030))
hw=HoltWinters(ratio,gamma=FALSE)
phw=predict(hw,n.ahead=15,prediction.interval = TRUE)
plot(hw,phw,xlim=c(1990,2030))
polygon(c(2017:2031,rev(2017:2031)), c(phw[,2],rev(phw[,3])),border=NA,col=rgb(0,0,1,.2))

The decreasing trend is coming from the fact that exponential smoothing is here a linear regression, with weight exponentially decaying with time (the older, the smaller the weight). But we cannot use that prediction, since the ratio cannot (obviously) be negative. So why not consider, here, the logarithm of the ratio

plot(db$year,db$ratio,type="l",xlim=c(1990,2030),ylim=c(-.2,.7),xlab="year",ylab="ratio")
hw=HoltWinters(log(ratio),gamma=FALSE)
phw=predict(hw,n.ahead=15,prediction.interval = TRUE)
abline(v=2016,lty=2,col="grey")
lines(2017:2031,exp(phw[,2]),col="blue")
lines(2017:2031,exp(phw[,3]),col="blue")
lines(c(1992:2016,2017:2031),c(exp(hw$fitted[,1]),exp(phw[,1])),col="red")
polygon(c(2017:2031,rev(2017:2031)),exp(c(phw[,2],rev(phw[,3]))),border=NA,col=rgb(0,0,1,.2))
abline(h=0,lty=2)

The confidence band is huge, here. What if we consider some ARIMA model here?

fit=auto.arima(ratio)
farma=forecast(fit,15)
farma=cbind(as.numeric(farma$fitted)[1:15],as.numeric(farma$lower[,1]),as.numeric(farma$upper[,1]),as.numeric(farma$lower[,2]),as.numeric(farma$upper[,2]))
plot(db$year,db$ratio,type="l",xlim=c(1990,2030),ylim=c(-.2,.7),xlab="year",ylab="ratio")
abline(v=2016,lty=2,col="grey")
lines(2017:2031,farma[,4],col="blue")
lines(2017:2031,farma[,5],col="blue")
lines(2017:2031,farma[,1],col="red")
polygon(c(2017:2031,rev(2017:2031)),c(farma[,4],rev(farma[,5])),border=NA,col=rgb(0,0,1,.2))
abline(h=0,lty=2)

Here, there is an intercept, but no dynamics for the time series (which is considered, here, as a pure white noise). We get exactly the same if we consider the average value of the series

fit=lm(ratio~1,data=db)
s=summary(fit)$sigma
plot(db$year,db$ratio,type="l",xlim=c(1990,2030),ylim=c(-.2,.7),xlab="year",ylab="ratio")
abline(v=2016,lty=2,col="grey")
ndb=data.frame(year=2017:2031)
pf=predict(fit,newdata=ndb)
farma=cbind(pf,pf-1.96*s,pf+1.96*s)
lines(2017:2031,farma[,2],col="blue")
lines(2017:2031,farma[,3],col="blue")
lines(1990:2031,c(predict(fit),farma[,1]),col="red")
polygon(c(2017:2031,rev(2017:2031)),c(farma[,2],rev(farma[,3])),border=NA,col=rgb(0,0,1,.2))
abline(h=0,lty=2)

Here, we get back to my previous post, if we want to consider a possible trend (and not only an intercept)

fit=lm(ratio~year,data=db)
s=summary(fit)$sigma
plot(db$year,db$ratio,type="l",xlim=c(1990,2030),ylim=c(-.2,.7),xlab="year",ylab="ratio")
abline(v=2016,lty=2,col="grey")
ndb=data.frame(year=2017:2031)
pf=predict(fit,newdata=ndb)
farma=cbind(pf,pf-1.96*s,pf+1.96*s)
lines(2017:2031,farma[,2],col="blue")
lines(2017:2031,farma[,3],col="blue")
lines(1990:2031,c(predict(fit),farma[,1]),col="red")
polygon(c(2017:2031,rev(2017:2031)),c(farma[,2],rev(farma[,3])),border=NA,col=rgb(0,0,1,.2))
abline(h=0,lty=2)

Again, the confidence region is not based on inference related error, but on model uncertainty: we try to visualize where future observations might be with (say) 95% chance. Note we can also consider (why not?) a quadratic regression

fit=lm(ratio~poly(year,2),data=db)
s=summary(fit)$sigma
plot(db$year,db$ratio,type="l",xlim=c(1990,2030),ylim=c(-.2,.7),xlab="year",ylab="ratio")
abline(v=2016,lty=2,col="grey")
ndb=data.frame(year=2017:2031)
pf=predict(fit,newdata=ndb)
farma=cbind(pf,pf-1.96*s,pf+1.96*s)
lines(2017:2031,farma[,2],col="blue")
lines(2017:2031,farma[,3],col="blue")
lines(1990:2031,c(predict(fit),farma[,1]),col="red")
polygon(c(2017:2031,rev(2017:2031)),c(farma[,2],rev(farma[,3])),border=NA,col=rgb(0,0,1,.2))
abline(h=0,lty=2)

I am usually not a huge fan of those polynomial regression, but recently, I’ve seen that a lot in economic papers (like “if it’s not linear, add a squared version of the explanatory variable”, which is a rather odd strategy, I’ll publish some posts on that issue this year).

Here again, it might be more clever to consider a logarithmic transformation of the ratio, to insure that the ratio remains positive

fit=lm(log(ratio)~year,data=db)
s=summary(fit)$sigma
plot(db$year,db$ratio,type="l",xlim=c(1990,2030),ylim=c(-.2,.7),xlab="year",ylab="ratio")
abline(v=2016,lty=2,col="grey")
ndb=data.frame(year=2017:2031)
pf=predict(fit,newdata=ndb)
farma=cbind(exp(pf+s^2/2),exp(pf-1.96*s),exp(pf+1.96*s))
lines(2017:2031,farma[,2],col="blue")
lines(2017:2031,farma[,3],col="blue")
lines(1990:2031,c(exp(predict(fit)+s^2/2),farma[,1]),col="red")
polygon(c(2017:2031,rev(2017:2031)),c(farma[,2],rev(farma[,3])),border=NA,col=rgb(0,0,1,.2))
abline(h=0,lty=2)

Observe that future trend is mainly driven by the three latest observations, that were rather low (compared with older observations). What if we remove them?

dbna=db
db$ratio[25:27]=NA
fit=lm(ratio~1,data=dbna)
s=summary(fit)$sigma
plot(db$year,db$ratio,type="l",xlim=c(1990,2030),ylim=c(-.2,.7),xlab="year",ylab="ratio")
abline(v=2016-3,lty=2,col="grey")
ndb=data.frame(year=2014:2031)
pf=predict(fit,newdata=ndb)
farma=cbind(pf,pf-1.96*s,pf+1.96*s)
lines(2014:2031,farma[,2],col="blue")
lines(2014:2031,farma[,3],col="blue")
lines(1990:2031,c(predict(fit)[1:24],farma[,1]),col="red")
polygon(c(2014:2031,rev(2014:2031)),c(farma[,2],rev(farma[,3])),border=NA,col=rgb(0,0,1,.2))
abline(h=0,lty=2)

More funny, if we consider a quadratic regression, we obtain an increasing trend for the future

fit=lm(ratio~poly(year,2),data=dbna)
s=summary(fit)$sigma
plot(db$year,db$ratio,type="l",xlim=c(1990,2030),ylim=c(-.2,.7),xlab="year",ylab="ratio")
abline(v=2016-3,lty=2,col="grey")
ndb=data.frame(year=2014:2031)
pf=predict(fit,newdata=ndb)
farma=cbind(pf,pf-1.96*s,pf+1.96*s)
lines(2014:2031,farma[,2],col="blue")
lines(2014:2031,farma[,3],col="blue")
lines(1990:2031,c(predict(fit)[1:24],farma[,1]),col="red")
polygon(c(2014:2031,rev(2014:2031)),c(farma[,2],rev(farma[,3])),border=NA,col=rgb(0,0,1,.2))
abline(h=0,lty=2)

As we can see, it is rather difficult to get relevant prediction for the future, based on 25 observations…. If anyone has a suggestion, comments are open…

 

What is a Linear Trend, by the way?

I had a very strange discussion on twitter (yes, another one), about regression curves. I think it started with a tweet based on some xkcd picture (just for fun, because it was New Year’s Day)

There were comments on that picture, by econometricians, mainly about ‘significant’ trends when datasets are very noisy. And I mentioned a graph that I saw earlier, a couple of days ago

Let us reproduce that graph (Roger kindly sent me the dataset)

db=data.frame(year=1990:2016,
ratio=c(.23,.27,.32,.37,.22,.26,.29,.15,.40,.28,.14,.09,.24,.18,.29,.51,.13,.17,.25,.13,.21,.29,.25,.2,.15,.12,.12))
library(ggplot2)

The graph is here (with the same aesthetic conventions as Roger’s initial graph, i.e. using some sort of barplot)

ggplot(db, aes(year, ratio)) +
geom_bar(stat="identity") +
stat_smooth(method = "lm", se = FALSE)

My point was that we miss the ‘confidence band’ of the regression

In R, at least, it is quite natural to get (and actually, it is the default version of the graph function)

ggplot(db, aes(year, ratio)) +
geom_bar(stat="identity") +
stat_smooth(method = "lm", se = TRUE)

It is hard to claim that the ‘regression line’ is significant (in the sense “significantly non horizontal”). To be more specific, if we look at the output of the regression model, we get

summary(lm(ratio~year,data=db))

Coefficients:
Estimate    Std. Error t value Pr(>|t|)
(Intercept) 9.158531 4.549672  2.013 0.055 .
year       -0.004457 0.002271 -1.962 0.061 .
---
Signif. codes: 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(which is exactly what Roger used in his graph to plot his red straight line). The p-value of the estimator of the slope, in a linear regression model is here 6%. But I found Roger’s point puzzling

See also

First of all, let us get back to a more standard graph, with a scatterplot, and not bars,

ggplot(db, aes(year, ratio)) +
stat_smooth(method = "lm") +
geom_point()

Here, we observe points https://latex.codecogs.com/gif.latex?\{y_{1990},y_{1991},\cdots,y_{2016}\}. In order to draw that blue line, we assume (Econometrics 101, actually) that those observations are realizations of random variables https://latex.codecogs.com/gif.latex?\{Y_{1990},Y_{1991},\cdots,Y_{2016}\}. Randomness here does not come from a survey, or from ‘balls in an urn’. Randomness is because hurricanes and floods are themselves seen are realizations of random events. Yes, there might be measurement errors, but that’s not where randomness comes from (here). When we talk about ‘randomness’, it should be related to ‘model error’ i.e. the error we make if we consider a linear model (here), that is

https://latex.codecogs.com/gif.latex?Y_t=\beta_0+\beta_1t+\varepsilon_t

Even if observations are not obtained from balls in an urn, there is some kind of randomness here. Randomness means that we might have errors (random errors) around the estimated value (that is on the blue curve), https://latex.codecogs.com/gif.latex?y_t=\widehat{y}_t+\widehat{\varepsilon}_t. One might consider a nonlinear model to reduce the error,

ggplot(db, aes(year, ratio)) +
geom_point() +
geom_smooth()

but in the case, the danger is to overfit

So yes, when we fit a linear model, there is always some kind of randomness, and it is possible to get a ‘confidence band’, that will be very useful for predictions (e.g. for reinsurance purpose here).