Le bagplot, comme extension du boxplot

Lundi 15, Michel Grun Rehomme avait présenté les travaux qu’il avait obtenu avec Noureddine Ben Lagha sur des problèmes d’écrêtement de coûts de sinistres, que l’on peut rapprocher de la détection de points atypiques, ou outliers. Ce matin, Alexander McNeil nous a rappelé que les bagplot pouvaient être très intéressants en gestion des risques (mentionné ici). Je ne peux pas m’empêcher de revenir un petit peu sur cette notion, en m’écartant des applications financières proposées par Alexander pour proposer des applications en démographie et en climatologie (inspiré par des travaux de Rob Hyndman).

  • Le boxplot et la régression quantile

Un outil classique (en dimension 1) est le boxplot, proposé par John Tukey en 1977. Par exemple, sur les coûts de sinistres en assurance auto, on obtient

On peut aussi faire un boxplot par classes (ou tranches) d’âge,

qui correspond, en passant à la limite (i.e. en considérant l’âge comme une variable continue), à un ensemble de régressions quantiles.

On peut aussi regarder l’impact de l’ancienneté du véhicule (à la souscription du contrat) sur le coût individuel des sinistres,

avec en rouge la régression (linéaire) du log du coût sur l’âge du véhicule. Là aussi, on peut faire des régressions quantiles,

Le code pour obtenir les régressions quantiles lissées est assez simple, une fois installé les library(quantreg) et library(splines),

> library(quantreg);  library(splines)
> fit = rq(log(cout)~bs(agecond,df=8),data=BASECOUT,tau=.5)
> xu=seq(10,110)
> yu=predict(fit,newdata=data.frame(agecond=xu))
> lines(xu,yu,col="red",lwd=2)

Cette notion a été généralisée en multivariée sous le nom de bagplot. Par exemple, pour déterminer la “médiane” en dimension 2, on va recherche un ensemble (appelé bag) contenant 50% des observations.

  • La profondeur

Cela se fait à l’aide du concept de profondeur statistique, introduite par John Tukey en 1975. En dimension 1, si

https://perso.univ-rennes1.fr/arthur.charpentier/latex/bag-01.png

désigne la fonction de répartition, la “profondeur de demi-espace” s’écrit

https://perso.univ-rennes1.fr/arthur.charpentier/latex/bag-02.png

qui est maximal pour la médiane (on obtient alors https://perso.univ-rennes1.fr/arthur.charpentier/latex/bag-03.png). Plus généralement, pour un quantile d’ordre https://perso.univ-rennes1.fr/arthur.charpentier/latex/bag-04.png,

https://perso.univ-rennes1.fr/arthur.charpentier/latex/bag-05.png

Cette notion se généralise en dimension supérieure en posant

https://perso.univ-rennes1.fr/arthur.charpentier/latex/bag-06.png

On notera que Fraiman et Muñiz ont proposé une extension en 2001. S’il n’y a pas d’ex-aequos, en dimension 1,

https://perso.univ-rennes1.fr/arthur.charpentier/latex/bag-07.png

qui appartient à https://perso.univ-rennes1.fr/arthur.charpentier/latex/bag-08.png, et dont la médiane est la plus profonde. Liu a proposé une profondeur dite simpliciale en 1984,

https://perso.univ-rennes1.fr/arthur.charpentier/latex/bag-09.png

D’un point de vue statistique, la fonction de répartition est inconnue, mais on dispose de https://perso.univ-rennes1.fr/arthur.charpentier/latex/bag-10.png. On note alors https://perso.univ-rennes1.fr/arthur.charpentier/latex/bag-11.png l’équivalent empirique de la profondeur. En dimension 2, ça sera https://perso.univ-rennes1.fr/arthur.charpentier/latex/bag-12.png où https://perso.univ-rennes1.fr/arthur.charpentier/latex/bag-13.png. La méthode de construction est détaillée ci-dessous,

  • Construction d’un bagplot

Pour cela, on note https://perso.univ-rennes1.fr/arthur.charpentier/latex/bag-14.png le plus petit nombre d’observations contenu dans un demi plan passant par https://perso.univ-rennes1.fr/arthur.charpentier/latex/bag-15.png. On note https://perso.univ-rennes1.fr/arthur.charpentier/latex/bag-16.png l’ensemble des points https://perso.univ-rennes1.fr/arthur.charpentier/latex/bag-15.png tels que https://perso.univ-rennes1.fr/arthur.charpentier/latex/bag-17.png contienne au moins https://perso.univ-rennes1.fr/arthur.charpentier/latex/bag-18.png points. On notera qu’on peut montrer que https://perso.univ-rennes1.fr/arthur.charpentier/latex/b ag-20.png, et que ces régions sont convexes. Rousseeuw et Ruts ont proposé un algorithme permettant de construire un tel ensemble de région en 1998. Sur l’exemple suivant, on considère 20 points en dimension 2,

Notons qu’en changeant de méthode, on obtient des résultats qui peuvent être très changeant.

> library(mnormt)
> Z=rmnorm(20,mean=c(0,0),varcov=matrix(c(1,.6,.6,1),2,2))
> source("http://www.wiwi.uni-bielefeld.de/~wolf/software/R-wtools/bagplot/bagplot.R")
> bagplot(Z,factor=1,dkmethod=1)
> bagplot(Z,factor=1,dkmethod=2)

 

La méthodologie a été proposée par Rousseeuw, Ruts et Tukey en 1999 (ici).

  • Copules Gaussiennes, versus copules de Clayton

On peut essayer de voir si les bags changent de forme lorsque la copule sous-jacente change. L’exemple suivant montre le bagplot d’un vecteur gaussien,

alors que l’exemple suivant montre le bagplot pour une copule duale de Clayton, avec des marges Gaussiennes.

Dans le premier cas, on retrouve que les bagplots ressemblent des ellipses (ce qui correspond à ce que j’avais raconté ici sur les ellipses de confiance). On retrouve cette ellipse sur le graphique dessous, avec 5000 points (simulés) au lieu de 200,

pour la copule Gaussienne, et

pour la copule de Clayton. La petite animation ci-dessous montre l’évolution des bag en fonction de la corrélation du vecteur Gaussien,

  • Illustration sur les données Loss-ALAE

Considérons la base (célèbre) des coûts de sinistres, et des frais associés.

 

>  library(evd); data(lossalae)

La figure ci-contre montre l’échantillon de 1500 points, avec le logarithme des coûts, et le logarithme des frais. Classiquement, on s’intéresse à la loi conditionnelle des frais sachant le coût du sinistre. On peut alors tracer des boxplot conditionnels (comme pour le coût des sinistres conditionnels à l’âge du véhicule),

Mais l’idée des bagplot est sensemblement différentes. On s’intéresse véritablement au couple de variables.

  • Du bagplot fonctionnel

Rob Hyndman a également utilisé ces méthode de bagplot quand la taille devient infiniment grande, i.e. dans un cadre fonctionnel. Par exemple, on peut utiliser cette technique pour détecter des années atypiques sur des évolutions de température, ou dans un ajustement de modèle de type Lee-Carter en mortalité. Ces deux cas sont abordées par Rob Hyndman dans la library(rainbow). Pour faire simple et rapide, on peut définir une profondeur fonctionnelle,

Pour commencer, on peut regarder les température moyenne mensuelles de la température à la surface de la mer, entre 1951 et 2007, obtenue ici.

On note que 4 années se détachent des autres, 1982/1983 et 1997/1998, qui sont particulièrement élevées, mais pas seulement. Certaines semblent décallées de quelques mois. Le code est ici simplement

 

> library(rainbow)
> fboxplot(data = ElNino, plot.type = "functional", type = "bag")
> fboxplot(data = ElNino, plot.type = "bivariate", type = "bag")

Dans le cas des données démographiques, il faut bricoler un peu. Repartons des données français que nous avons étudiées plus d’une fois,

> DEATH=read.table("https://perso.univ-rennes1.fr/arthur.charpentier/R/FR-Deaths_1x1.txt",header=TRUE)
> EXPOSURE=read.table("https://perso.univ-rennes1.fr/arthur.charpentier/R/FR-Exposures_1x1.txt",header=TRUE)
> DEATH$Age=as.numeric(as.character(DEATH$Age))
> DEATH$Age[is.na(DEATH$Age)]=110
> EXPOSURE$Age=as.numeric(as.character(EXPOSURE$Age))
> EXPOSURE$Age[is.na(EXPOSURE$Age)]=110
> YEAR=unique(DEATH$Year);nC=length(YEAR)
> AGE =unique(DEATH$Age);nL=length(AGE)
> rownames(MUH)=AGE
> colnames(MUH)=YEAR
> rownames(MUF)=AGE
> colnames(MUF)=YEAR
> MUH=MUH[1:90,]
> MUF=MUF[1:90,]
> MUHF=fts(x = AGE[1:90], y = log(MUH), xname = "Age", 
+          yname = "Log Mortality Rate")
> MUFF=fts(x = AGE[1:90], y = log(MUF), xname = "Age", 
+          yname = "Log Mortality Rate")
> fboxplot(data = MUHF, plot.type = "functional", type = "bag")
> fboxplot(data = MUHF, plot.type = "bivariate", type = "bag")


avec un code similaire pour les femmes. Le graphique suivant montre l’évolution des taux de mortalité des hommes en fonctions de leur âge, pour différentes années,

On observe que certaines années se détachent assez nettement, en particulier sur les âges allant de 15 à 40 ans. Comme le montre le graphique à gauche, ce sont les années de guerre qui ressortent fortement (surtout la première guerre mondiale). Pour les femmes, l’évolution des taux de mortalités en fonction des âges semble en revanche beaucoup plus régulière, puisqu’aucune année atypique ne semble ressortir,

Ceci se confirme sur le graphique de droite, où, contrairement aux hommes, aucune année ne semble réellement se détacher. Notons qu’au lieu de chercher des années atypiques, on peut chercher faire une lecture duale, en cherchant les âges qui se ont eut un changement en terme d’évolution du taux de mortalité sur un siècle différent. Par exemple pour les femmes, les taux de mortalité ont l’évolution suivante au cours du siècle,

ce qui permet de repérer quelques âges un peu atypiques, i.e. les bébés, qui ont eu un gain en terme de taux de mortalité considérable, relativement aux autres âges. En revanche, pour les hommes, il n’y a pas particulièrement d’âge qui soit statistiquement différent des autres,

  • Applications en terme de stress scenarios

Nous avons vu qu’il y avait presque toujours (pour les hommes comme pour les femmes) des outliers, i.e. des courbes atypiques. Il serait donc normal de s’attendre à en trouver dans les scénarios de prédiction. Les bagplot sont alors un outils intéressant. Si on regarde les prédictions obtenues par la méthode de Lee & Carter par exemple, ou plutôt des scénarios générés par la méthode de Lee & Carter,

> LCH <- fdm(BASEH,order=10)
> LCHf=forecast(LCH,100,method="ets")
> LCHg=simulate(LCHf,1)
> LCHg1=as.matrix(LCHg[,,1])
> MUHf=LCHg1[1:90,]
> MUHF=fts(x = AGE[1:90], y = log(MUHf), xname = "Age",
+         yname = "Log Mortality Rate")
> library(rainbow)
> fboxplot(data = MUHF, plot.type = "functional", type = "bag")
> fboxplot(data = MUHF, plot.type = "bivariate", type = "bag")

On peut alors identifier clairement des années atypiques – pour un scenario donné. Bref, on a un outils pour vérifier que l’on génère effectivement des points atypiques, un peu extrêmes, mais surtout, on peut les identifier. On peut alors creuser un peu pour mieux comprendre ce qui se passe….

Pour aller plus loin sur ces histoires de bagplot et aux régressions quantiles, je renvoie ici ou (Thierry Roncalli avait remis la régression quantile au goût du jour il y a quelques années, à l’époque où je programmais encore en Gauss, je renvoie aussi ici pour des applications financières).

  • Les quantiles bivariés

En fait, le point de départ du billet était très lié d’une notion qui méritera un autre billet: comment définir des quantiles (et plus généralement des mesures de risques) dans un cadre multivarié….

Discussion on stress scenarios

Friday morning, I had the honor to discuss a presentation by Alexander McNeil, on Stress Testing and Reverse Stress Testing, at the Financial Risks International Forum on Risk Dependencies (here).

This was an opportunity to rediscover techniques I have studied briefly a few years ago, on outliers detection, namely the bagplot (I will probably upload a post on that topic soon, in French unfortunately). The slides of my discussion are available here.

http://freakonometrics.hypotheses.org/5338

Quand on a les boules…..

Vendredi dernier, le bureau des élèves avait organisé un tournoi de speed-pétanque dans le cloître de la fac de Sciences Eco (comme l’an dernier, ici). Nous avions monté une équipe, qui n’a pas eu la chance de franchir les qualifications*…. Pourtant, pour reprendre l’expression de Nathalie, la pétanque c’est facile, il suffit de minimiser la distance entre la boule ou le cochonnet. Ou plus précisément, on recherche à résoudre un programme de la forme suivante,

Pour cela, il y a deux méthodes principalement,

  • essayer de minimiser , i.e. minimiser la distance entre ma boule et le cochonnet. On appelle ça pointer,
  • essayer de maximiser , i.e. maximiser la distance entre la boule de mon adversaire et le cochonnet. On appelle ça tirer,

Malheureusement, c’est formellement un peu plus compliqué que ça, car en vrai il s’agit d’un jeu successif, où l’équipe la plus loin du cochonnet joue. Et en pratique, ça se complique encore, car entre la pluie, le terrain en pente, le vent, les gens qui fond des bruits autour, c’est pas simple de gagner (qui a dit qu’on était des mauvais perdants ?).

En fait, et c’est là que je voulais en venir, si modéliser une partie de pétanque est complexe – de part l’aspect dynamique – quelqu’un avait suggéré vendredi un jeu un peu plus simple en apparence: pourquoi pas lancer le cochonnet à la fin, une fois toutes les boules placées ? Le dual du jeu de pétanque en quelque sorte… Par exemple, ci-dessous, on a les boules rouges, et on se demande où il faudrait lancer le cochonnet pour gagner,

La réponse est simple (et les organisatrices du tournoi connaissent la réponse puisque je l’ai enseigné l’an dernier en master 1): il s’agit d’un problème de plus proches voisins.

On sait alors numériquement tracer les différentes régions. On peut alors même complexifier le problème, en se demandant où lancer le cochonnet pour gagner de deux points, au moins,

ou de trois points, ou plus,

Bref, l’année prochaine, je demande à ce que l’on change les règles, ça nous laissera une chance de ne pas être ridicules ! Reste à voir si on est capable de lancer le cochonnet dans la région rouge, mais promis, on va s’entraîner….
* comme en témoignent certains documents (ici par exemple) nous n’avons pas forcément été ridicule, mais comme il nous fallait généralement un quart d’heure pour se chauffer à chaque partie, ce n’était pas simple de briller…

Exchange rates and correlation matrices

https://blogperso.univ-rennes1.fr/arthur.charpentier/public/perso2/.euro_dollar_yen_s.jpg I wanted to upload here a small problem I started to work on…. unfortunatley, I could not find (yet) a proper answer. Any comments and suggestions are welcomed. The problem is simple: consider 3 random variables that can be interpreted as exchange rates. Thus X is the exchange rate USD versus EUR, Y is the exchange rate EUR versus YEN, while Z is the exchange rate USD versus YEN. We then have the following constraint XY=Z. Given that constraint, what are the implied constraints on the correlation matrix of random vector (X,Y,Z) ?

  • Bounds on correlation

There are classically standard constraints on correlation. For instance, from Cauchy-Schwarz’s inequality

https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-01.png

but those bounds are not necessarily sharp, given distributions of https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-02.png and https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-03.png. From Fréchet-Hoeffding bounds, we know that

https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-04.png

where https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-05.png. Further, correlation matrices are necessarily positive-semidefinite matrices.
To go further to find possible bounds, recall that

https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-06.png

and therefore

https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-07.png

i.e.

https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-08.png

Similarity, https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-09.png will be a function of https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-10.png.
Thus, given marginal distributions of https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-02.png and https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-03.png, covariances (and also correlations https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-11.png and https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-12.png) are functions of L'image “https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-13.png” ne peut être affichée car elle contient des erreurs.,https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-14.png and https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-15.png.
Somehow, we have obtained 2 degrees of freedom: if there are no additional constraints on those two coefficients, there should be no other constraints than having positive-semidefinite matrices.
I guess that https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-14.png and https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-15.png should not be connected. Those quantities are related to the co-skewness* and they should be different when dependence is asymmetric.
Given a 3 parameter copula for pair https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-16.png, respectively describing global dependence (that can be related to L'image “https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-13.png” ne peut être affichée car elle contient des erreurs. and tail asymmetry (that should be related either to https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-14.png and https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-15.pngdepending on the corner) it should be possible to derive any kind of triplets.

  • Running simulations

I have tried to generate a lot of samples. The idea is to draw pairs from mixtures of Marshall-Olkins’ copula (wich are asymmetric), where parameters where generated randomly. I draw 250 values according to that copula. Then, the third variable is obtained taking the product of normalized pairs (or Studentized). And then calculate the associated correlation matrix.

  1.  draw https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-17.png from https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-18.png (but actually any positive distribution should work) and https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-19.png
  2. do 250 times the following (index https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-20.png)
  • draw https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-21.png with a Bernoulli https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-22.png distribution
  • draw&nbs
    p;https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-23.png from copula https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-24.png if https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-25.png and https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-27.png if https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-26.png
  • set https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-28.png and https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-29.png, and https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-30.png
  1. estimate the correlation of sample https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-31.png

In dimension 3, I have the following graph,

In order to get a better understanding, I look at slices, for instance when https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-32.png. On the graph on the right, to dark area are values that can not be obtained since correlation have to be positive-semidefinite. Dots are points that have been obtained in a particular scenario. I have also included the convex hull if the points obtained with all the scenarios (here 50,000 scenarios), since I assume that the set of positive correlation is necessarily convex. Graphs below have been obtained when https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-33.png and https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-34.png

So far I have not been able to obtain all possible correlations, I guess…  If anyone has suggestions…
* Recall that the co-skewness matrix, in dimension 2, for a pair https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-35.png is simply

https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-36.png

where https://perso.univ-rennes1.fr/arthur.charpentier/latex/change-corr-37.png.

On the return period of the 2003 heat wave

The paper on the 2003 heat wave has been submitted a few months ago, and now, the preprint can be downloaded (here for the preprint version, or here on Hal). The paper has a long story, that I will probably summarize here, some day…

Extremal events are difficult to model since it is difficult to characterize formally those events. The 2003 heat wave in Europe was not characterized by very high temperatures, but mainly the fact that night temperature were no cool enough for a long period of time. Hence, simulation of several models (either with heavy tailed noise or long range dependence) yielddifferent estimations for the return period of that extremal event. 

The paper has been presented in several conferences, in started a couple of days after the birth of Romane, in March 2005, in talks on dependencies in environmental series….

Lillie versus Kolmogorov-Smirnov

Toujours pour répondre à une question posée par mail (“ça quoi ça sert le test lillie sous R ? “), un court billet. Avant de parler de Lillie1, il faut revenir sur Kolmogorov-Smirnov. L’idée est de tester

https://perso.univ-rennes1.fr/arthur.charpentier/tex/KS-01b.png

contre

https://perso.univ-rennes1.fr/arthur.charpentier/tex/ks-02.png

Je prends une forme paramétrique pour la fonction que l’on cherche à tester car c’est ce qui est souvent fait en pratique. Et surtout, ça permettra de mieux comprendre (je pense) l’idée du test lilllie. L’idée du test repose sur le théorème de Glivenko-Cantelli. En fait, Andreï Kolmogorov et Vladimir Smirnov ont montré que l’on pouvait encadrer la vitesse de convergence,

https://perso.univ-rennes1.fr/arthur.charpentier/tex/ks-03.png

ce qui se montre en notant que https://perso.univ-rennes1.fr/arthur.charpentier/tex/ks-04.png converge en loi (si l’hypothèse H0 était la bonne) vers un pont brownien changé de temps par la fonction quantile https://perso.univ-rennes1.fr/arthur.charpentier/tex/ks-05.png.
La loi limite est appelée loi de Kolmogorv-Smirnov, et ne dépend pas de la loi sous-jacente. Par contre elle n’est qu’asymptotique. Pour récupérer la loi à distance finie, regardons les simulations suivantes. On notera en particulier que la loi de la différence ne dépend pas de la vraie loi des observations (même si c’est cette loi que l’on teste, comme toujours lorsque l’on cherche la loi sous l’hypothèse H0)
> n=20
> ns=100000
> SU=SN=SE=rep(NA,ns)
> for(i in 1:ns){
+ X=runif(n)
+ SU[i]=max(c(abs(rank(X)/n-X),abs((rank(X)-1)/n-X)))
+ X=rnorm(n,0,1)
+ SN[i]=max(c(abs(rank(X)/n-pnorm(X,0,1)),abs((rank(X)-1)/n-pnorm(X,0,1))))
+ X=rexp(n,1)
+ SE[i]=max(c(abs(rank(X)/n-pexp(X,1)),abs((rank(X)-1)/n-pexp(X,1))))
+ }
> plot(density(SN),col=”red”,lwd=2)
> lines(density(SU),col=”blue”,lwd=2)
> lines(density(SE),col=”green”,lwd=2)
avec la densité de la loi du maximum entre la fonction de répartition théorique et la fonction de répartition empirique enrouge pour l’échantillon Gaussien, enbleu pour l’échantillon uniforme et envert pour l’échantillon exponentiel. Peu importe la loi sous-jacente, la statistique de test est la même.

On peut en particulier récupérer les quantiles de cette lois pour n=20 observations (la loi du test dépend simplement du nombre d’observations).

> quantile(SE,.95)
95%
0.2937023
> quantile(SE,.90)
90%
0.264661
On peut d’ailleurs confirmer ces valeurs en regardant dans les tables (ici ou ), par exemple 0.294 à 95%,

Mais ce test ne sert que pour juger de l’adéquation à une loi précise (que nous avions noté https://perso.univ-rennes1.fr/arthur.charpentier/tex/ks-encore.png ici). En pratique, on ne connaît pas cette loi, mais on peut l’estimer, en particulier pour les lois paramétriques. On peut alors chercher à tester autre chose, comme

https://perso.univ-rennes1.fr/arthur.charpentier/tex/ks-06.png

contre

https://perso.univ-rennes1.fr/arthur.charpentier/tex/ks-07.png

qui s’apparente plus à un test d’ajustement à une famille de lois. Ce test étant différent du précédant, il n’y a pas de raison d’avoir la même loi pour la statistique de test (qui néanmoins, à  peut rester celle que nous avions considérée, à savoir la norme infinie entre les fonctions de répartition). Graphiquement par exemple, on cherchait aurparavant à tester l’ajustement de la loirouge, et maintenant on va tester l’ajustement de la loibleue,

qui va s’adapter à l’échantillon, contrairement au test initial,

Le code ici, dans le cas Gaussien par exemple (la loi sous-jacente n’est plus neutre dans ce cas) donne
> n=20
> ns=100000
> SN=SNML=rep(NA,ns)
> for(i in 1:ns){
+ X=rnorm(n,0,1)
+ SN[i]  =max(c(abs(rank(X)/n-pnorm(X,0,1)),
+               abs((rank(X)-1)/n-pnorm(X,0,1))))
+ SNML[i]=max(c(abs(rank(X)/n-pnorm(X,mean(X),sd(X))),
+               abs((rank(X)-1)/n-pnorm(X,mean(X),sd(X)))))
+ }
> plot(density(SN),col=”blue”,lty=2)
> lines(density(SNML),col=”red”,lwd=2)
Les densités sont sensiblement différentes,

et les quantiles aussi,
> quantile(SN,.95)
&nbsp
;     95%
0.2943206
> quantile(SNML,.95)
95%
0.1923295
Sous R, deux fonctions distinctes sont à utiliser. Par exemple l’ajustement à une loi https://perso.univ-rennes1.fr/arthur.charpentier/tex/ks-08.png donne
>  X=rnorm(20)
> mean(X)
[1] -0.553641
> sd(X)
[1] 0.8293167
>  ks.test(X,”pnorm”, mean=0,sd=1)

One-sample Kolmogorov-Smirnov test

data:  X
D = 0.3096, p-value = 0.03362
alternative hypothesis: two-sided
(on rejette ici l’ajustement à une loi normale centrée réduite) et l’ajustement à une loi https://perso.univ-rennes1.fr/arthur.charpentier/tex/ks-09.png donne
> lillie.test(X)

Lilliefors (Kolmogorov-Smirnov) normality test

data:  X
D = 0.1519, p-value = 0.2629
avec une p-value de l’ordre de 26%. Notons que cette p-value est interprétable, contrairement au test suivant, qui n’est pas valide,
>  ks.test(X,”pnorm”, mean=mean(X),sd=sd(X))

One-sample Kolmogorov-Smirnov test

data:  X
D = 0.1519, p-value = 0.69
alternative hypothesis: two-sided
Encore une fois, la statistique de test est la même, sauf que la loi de la statistique de test sous H0 n’est pas juste dans le dernier cas. En particulier, n sera beaucoup plus exigent dans le test car on a choisi la meilleure loi normale possible (à l’aide d’un critère de maximisation de vraisemblance). Sinon je renvoie ici pour un document sur le même sujet.
1 Lillie pour Hubert Lilliefors qui, le premier, a proposé ce test

Ecart absolue ou écart type ?

Un petit billet très court pour répondre à une question d’élèves de licence. L’erreur quadratique moyen est définie comme

https://perso.univ-rennes1.fr/arthur.charpentier/latex/eqt-01.png

alors que l’erreur absolue moyenne est définie comme

https://perso.univ-rennes1.fr/arthur.charpentier/latex/eqt-02.png

(que je définie ici comme l’écart à la moyenne, certain considérant la distance à la médiane, qui minimise cette quantiié, alors que la moyenne minimise l’écart quadratique, mais je reviendrais là dessus bientôt, sur l’histoire de la loi normale).

Souvent ces quantités sont présentées comme des mesures de la même quantité, que l’on appellerait “dispersion” autour de la moyenne.

Si l’on prend deux observations, ces quantités sont rigoureusement identiques, car

https://perso.univ-rennes1.fr/arthur.charpentier/latex/eqt-03.png

compte tenu du fait que

https://perso.univ-rennes1.fr/arthur.charpentier/latex/eqt-04.png

En revanche, comme le montre le graphique ci-dessous,

https://perso.univ-rennes1.fr/arthur.charpentier/latex/eqt-00-col.png

Aussi, avec davantage de termes, la différence peut devenir significativement différente. En particulier, comme le notent Goldstein et Taleb (2007), en ligne ici, dans le cas Gaussien centré réduit,

https://perso.univ-rennes1.fr/arthur.charpentier/latex/eqt-05.png

Autrement dit, ces quantités peuvent parfaitement être différentes. Sur l’exemple ci-dessous, on considère un groupe de 4 individus, trois ayant le même revenu, et le dernier ayant un revenu plus important. On s’arrange pour que le revenu moyen soit constant (100 ici) et on regarde comment se comportent ces deux quantités lorsque le revenu du dernier individu s’accroît (de celui des autres).

(j’ai autorisé les revenus négatifs pour la simplicité des calculs et pour avoir un joli dessin). On en conclue qu’un écart significativement différent entre l’écart-type (L2) et l’écart absolu (L1) signifie simplement qu’il y a probablement des points aberrants dans la base (aberrants au sens “sensiblement différents“, des “outliers“).

Les tables de mortalité

Chose promise, chose dûe, un court billet expliquant les principales tables utilisées,

  • Les tables TD et TV 88-90

Ces tables datent un peu, et si je continue à en parler en cours, c’est parce qu’elles sont simples à utiliser (et pour continuer à me faire croire que je n’ai pas vieilli depuis mes études). Cette table est d’ailleurs tellement sérieuse qu’on la retrouve dans la loi (ici), dans un arrêté d’avril 1993. La table dite TD 88-90 (pour Décès) a été établie par l’INSEE suite aux observations réalisées entre 1988 et 1990 sur une population d’hommes. Elle était appliquée pour le calcul des primes des contrats d’assurance décès. La table dite TV 88-90 (pour Vie) a été établie par l’INSEE suite aux observations réalisées entre 1988 et 1990 sur une population de femmes. Elle était appliquée pour le calcul des primes des contrats d’assurance en cas de vie. Ces tables peuvent se récupérer à l’aide des codes suivants,

> TD=read.table("https://perso.univ-rennes1.fr/arthur.charpentier/TD8890.csv",
+ sep=";",header=TRUE)
> TV=read.table("https://perso.univ-rennes1.fr/arthur.charpentier/TV8890.csv",
+ sep=";",header=TRUE)

Ces tables ont été remplacées par les tables dites TH et TF, respectivement.

  • Les tables TH et TF 00-02

Ces tables ont été établies à partir des données INSEE de la population française entre 2000 et 2002 et ont été lissées. Ce sont des tables générationnelles, qui nécessitent un correctif d’âge pour tenir compte des écarts de mortalité entre générations. Elles sont applicables à partir du 1er janvier 2006. L’institut des actuaires a proposé une “notice d’utilisation” en ligne ici, et Cimon en avait parlé sur son blog ().

  • Les tables TPRV 95

La table TPRV 93 (pour Table Prospective de Rente Viagère) est un extrait de la table dite plancher pour la tarification des contrats de rente viagère. Elle a été publiée par l’arrêté du 28 juillet 1993 (ici sans les annexes), et correspond à une table prospective qui retrace la mortalité des générations 1887 à 1993 (les tables prospectives sont au programme de Master 2).

La TPRV 93 représente la table complète de la génération 1950. La table est en ligne ici (en csv) lisible sous R avec le code suivant,

> TD=read.table("https://perso.univ-rennes1.fr/arthur.charpentier/TPRV.csv",
+ sep=";",header=TRUE)

Mais ce n’est que la première étape. On utilise ensuite un décallage d’âge.

On a parlé de ce point en TD (mais sur les taux de mortalité), c’est aussi ce qui s’appelle l’hypothèse de Rueff, et traduit la diminution des taux de mortalité par un rajeunissement (i.e. un gain sur les âges), i.e.

Notons qu’en fait,  dépend du niveau des taux d’intérêt. L’ensemble des tables de décallage sont en ligne ici.

  • Les tables TGH et TGF 05

Il s’agit ici, là encore, d’une population de rentiers, comme pour la (ici pour les 38 pages du code). Aussi, ces tables ont été construites sur une population différente des tables TH et TF (construites sur l’ensemble de la population française). La méthodologie est décrite ici.

Category-based Tail Comovement

Christophe gave a talk at EM Lyon at the end of February at the Journées de Finance Inter-Ecoles de Commerce 2010 (here), about “Category-Based Tail Comovement“. I have uploaded Christophe’s slides here. The abstract of the joint paper (writen also with Emilios Galariotis) is the following, traditional financial theory predicts that comovement in asset returns is due to fundamentals. An alternative view is that of Barberis and Shleifer (2003) and Barberis, Shleifer and Wurgler (2005) who propose a sentiment based theory of comovement, delinking it from fundamentals. In their paper they view comovement under the prism of the standard Pearson’s correlation measure, implicitly excluding extreme market events, such as the latest financial crisis. Poon, Rockinger and Tawn (2004) have shown that under such events di¤erent types of comovement or dependence may co-exist, and make a clear distinction between the four types of dependence: perfect dependent, independent, asymptotically dependent and asymptotically independent. In this paper we extend the sentiment based theory of comovement so as to cover the whole spectrum of dependence, including extreme comovement such as the one that can be observed in …nancial crises. One of the key contributions of this paper is that it formally proves that assets belonging to the same category comove too much in the tail and reclassifying an asset into a new category raises its tail dependence with that category“.

Actuariat, calcul(s) de PM (partie 1)

Suite aux deux billets sur la modélisation des sinistres en assurance auto (ici et ), un billet pour décrire le contrat d’assurance-vie sur lequel on travaillera en salle machine mercredi.
Pour s’entraîner, on va considérer un contrat d’assurance sur deux têtes, signé par un couple d’âge 50 ans (pour l’homme) et 52 ans (pour la femme). On supposera leur durées de vies résiduelles modélisées par les tables TV88-90 et TD88-90 respectivement. On supposera dans un premier temps que les durées de vie sont indépendantes (hypothèse que l’on relâchera éventuellement par la suite). Il s’agit d’un contrat d’assurance-vie proposant simplement en garantie en cas de vie (ça n’a rien de plus compliqué si l’on rajoute une garantie décès, on utilise l’additivité des VAP). Le couple cotise (annuellement) pendant 20 ans, soit en payant une prime https://perso.univ-rennes1.fr/arthur.charpentier/latex/tp-sum-21.png si les deux époux sont en vie, soit en payant une prime https://perso.univ-rennes1.fr/arthur.charpentier/latex/tp-sum-22.pngsi l’un des époux décède. En contrepartie, l’assureur verse 10 000 euros si les deux époux sont en vie, et 60% de ce montant au conjoint survivant.
Comme dans le cours, le plus simple pour comprendre ce contrat est sûrement de faire un petit dessin. On met en rouge les flux positifs pour l’assureur (il encaisse de l’argent) et en vert les flux négatifs (il dépense de l’argent). Dans un premier temps, les deux conjoints décèdent pendant leur retraite,

Dans un second temps, un des conjoint décède avant le début de la période de retraite,

  • Calculs des valeurs actuelles probables

La valeur actuelle probable de l’assureur s’écrit comme l’espérance de la somme actualisée des engagements de l’assureur,

https://perso.univ-rennes1.fr/arthur.charpentier/latex/tp-sum-23.png

que l’en sépare entre les engagements versés si une ou deux personnes sont en vie. Si l’on regarde les engagements de l’assuré, alors

https://perso.univ-rennes1.fr/arthur.charpentier/latex/tp-sum-24.png

En notant que https://perso.univ-rennes1.fr/arthur.charpentier/latex/tp-sum-25.png, et https://perso.univ-rennes1.fr/arthur.charpentier/latex/tp-sum-26.png (i.e. les deux membres du couple sont en vie à la signature du contrat).
On calcule la prime annuelle pi en notant que les deux VAP doivent être égaux,

https://perso.univ-rennes1.fr/arthur.charpentier/latex/tp-sum-27.png

Pour aller plus loin, il faut expliciter les probabilités jointes, en particulier https://perso.univ-rennes1.fr/arthur.charpentier/latex/tp-sum-28.png (les autres découlant de cette dernière). Pour importer les tables de mortalité, on pourra utiliser

> Lxv=read.table("https://perso.univ-rennes1.fr/arthur.charpentier/TV8890.csv",header=TRUE,sep=";")
> Lxd=read.table("https://perso.univ-rennes1.fr/arthur.charpentier/TD8890.csv",header=TRUE,sep=";")

On poursuivra en salle machine pour calculer tous ces coefficients, mais aussi calculer les provisions mathématiques….. à suivre donc.
PS et je ferais un jour un billet sur les autres tables utilisées, car je continue à utiliser des tables qui sont dépassées (mais qui, à mon avis, m’enlève rien à la modélisation)

Les Pays-Bas inondés, février 1953

Après un week-end de trois jours en Vendée, je vais faire un rapide billet sur les inondations costales (après la catastrophe improbable du barrage de Vajont, ici), que j’aurais du mal à qualifier d’improbables….

Lorsque l’on parle des l’histoire la théorie des valeurs extrêmes (ou plutôt la second partie de l’histoire, la première avait été racontée ici), on évoque souvent la crue de février 1953 qui a inondé les Pays-Bas (je renvoie aux slides de Paul Embrechts par exemple, ici). Pour résumer, pendant la nuit du 31 janvier au 1er février 1953, une très forte tempête traversa la mer du nord. Dans des villes où la marée haute atteignait en moyenne 1 mètre au dessus de niveau de la mer à Amsterdam (ce que l’on appelle NAP, Normaal Amsterdams Peil), on atteignait presque les 4 mètres. Comme souvent (je pense par exemple à la canicule de 2003 en particulier, à laquelle je consacrerais bientôt un billet), le problème n’est pas seulement les hauteurs extrêmes, mais la persistance, i.e. le fait que l’évènement ait duré longtemps. En effet, le 1er février 1953, la marée basse n’avait pas causé de véritable baisse du niveau de l’eau, si bien que quand la marée haute arriva, l’eau avait déjà atteint un niveau très élevé. Mais comme le notait de nombreux commentaires de l’époque, les grandes marées étaient prévues 2 semaines plus tard, autrement dit la catastrophe aurait pu être pire encore si elle était survenue 15jours plus tard !

Les digues subirent plus de 400 brèches, et plus de 500 km de digues furent à reconstruire. Mais surtout, 1836 personnes trouvèrent la mort, ce qui, ramené à la population des Pays-Bas de l’époque (de l’ordre de 10 millions d’habitants, ici), correspondrait à une catastrophe causant la mort de plus de 10000 personnes en France (ou plus de 60000 aux États Unis) aujourd’hui. La carte ci-dessus montre la région qui s’est retrouvée sous l’eau soit plus de 1600 km2 (sinon je renvois ici pour des photos). Comme toujours dans les catastrophes, l’intérêt ex-post sont les leçons que l’on en a tirées. Aux Pays-Bas, la catastrophe a donné naissance au Deltawerken, qui initia (et finança) davantage de recherche sur le niveau des digues, ce que nous appellerions en gestion des risques un problème de calcul de Value-at-Risk: à quelle hauteur mettre une digue pour éviter qu’un évènement se produise dans 99,999% des cas ? Je renvoie ici ou pour plus d’information sur la catastrophe…