Un petit billet rapide pour insister (davantage) sur l'importance des quantiles, et des applications possibles des régressions quantiles.

  • De la médiane aux quantiles
J'avais fait un petit billet (ici) pour me moquer des journalistes qui ne savent pas ce qu'est une médiane... mais j'ai parfois l'impression qu'ils ne sont pas les seuls à comprendre l'importance de ces grandeurs en modélisation. Les quantiles sont fondamentaux en tant qu'outils de mesure de risque (ici ou ). Ils sont aussi très présents dès lors que l'on s'intéresse aux richesses, et aux inégalités (ici par exemple). De même que l'on passe de la moyenne à l'espérance conditionnelle, on peut essayer de passer d'un quantile à un quantile conditionnel, et c'est l'intérêt de la régression quantile...
  • La régression quantile sur données climatiques
Vendredi dernier, James Elsner m'a présenté une jolie application des régressions quantiles sur les données climatiques (qu'il avait publié dans Nature). On peut récupérer les données sur sa page ouebe.
> StormMax=read.table("http://garnet.fsu.edu/~jelsner/extspace/extremedatasince1899.csv",header=TRUE,sep=",")
> StormMaxBasin=subset(StormMax,Region=="Basin"); StormMaxBasin=subset(StormMaxBasin,Yr>1977)
> attach(StormMaxBasin)
> boxplot(Wmax~as.factor(Yr),ylim=c(35,175),
+ xlab="Year",ylab="Intensity (kt)",col="light blue")
On peut regarder rapidement les données,

et éventuellement regarder l'allure d'une  régression linéaire (pour détecter une éventeullement tendance - linéaire - temporellle).

On peut aussi regarder des boxplot par annéeé de survenance,
> boxplot(Wmax~as.factor(Yr),ylim=c(35,175),
+ xlab="Year",ylab="Intensity (kt)",col="light blue")

On peut ainsi récupérer par années les quantiles élevés,
> x=boxplot(Wmax~as.factor(Yr),plot=F)
et tenter une régression sur les quantiles à 90%
>  xx=1:29
>  points(xx,x$stats[5,],pch=19,col="purple")
>  abline(lm(x$stats[5,]~xx),col="purple")

ou sur les quartiles à 75%
> points(xx,x$stats[4,],pch=19,col="purple")
> abline(lm(x$stats[4,]~xx),col="purple")

Bref, il semble que la tendance soit beaucoup plus marquée sur les évènements extrêmes que sur le reste... Et ça peut se vérifier en faisant plusieurs régressions quantiles, en regardant la significativité de la pente pour différents niveaux de quantiles.
> model=rq(Wmax~Yr,tau=seq(0.2,0.8,0.1))
> plot(summary(model,alpha=0.05,se="iid"),
+ parm=2,pch=19,cex=1.2,mar=c(5,5,4,2)+0.1,
+ ylab="Trend (kt/yr)",xlab="Quantile")

On note alors que la pente d'une régression quantile est strictement positive pour des quantiles élevés, supérieurs à 75%.

On peut d'ailleurs affiner un peu en prenant une séquence plus fine,

Pour la régression quantile locale, on peut utiliser la library(MASS)
> plot(Yr,Wmax,ylim=c(35,175),
+ xlab="Year",ylab="Intensity (kt)",col="blue")
> library(MASS)
> fit <- lprq(Yr,Wmax, h = 2, tau = 0.9)
> lines(fit$xx, fit$fv, col="red",lwd=2)
> fit <- lprq(Yr,Wmax, h = 4, tau = 0.9)
> lines(fit$xx, fit$fv, col="red")

ou encore la library(splines),
> plot(Yr,Wmax,ylim=c(35,175),
+ xlab="Year",ylab="Intensity (kt)",col="blue")
> library(splines)
> fit <- rq(Wmax~ bs(Yr, df = 6), tau = .8)
> X <- model.matrix(Wmax~ bs(Yr, df = 6))
> lines(Yr,X %*% fit$coef,col="red",lwd=2)
> fit <- rq(Wmax~ bs(Yr, df = 12), tau = .8)
> X <- model.matrix(Wmax~ bs(Yr, df = 12))
> lines(Yr,X %*% fit$coef,col="red")

Mais on peut faire la même chose, ou presque sur des vitesse de véhicules.... mais ça sera pour un autre billet dès que Ben aura fini de jouer avec les données.