PP plot, QQ plot et estimation à noyau

Reprenons ici le code pour récupérer la base de la taille (et du poids) d’un ensemble de 200 personnes.

Davis=read.table(
"http://socserv.socsci.mcmaster.ca/jfox/Books/Applied-Regression-2E/datasets/Davis.txt")
Davis[12,c(2,3)]=Davis[12,c(3,2)]
X=Davis$height
n=length(X)

La première chose que l’on avait vu la semaine passée est le PP-plot,

https://latex.codecogs.com/gif.latex?\left\{\frac{i}{n},F_\star(X_{i:n})\right\}On va ici ‘tester’ une loi normale (de même moyenne et de même variance que notre échantillon… faisons simple)

PP=data.frame(empirique=(1:n)/n,
theorique=pnorm(sort(X),mean(X),sd(X)))

Continue reading PP plot, QQ plot et estimation à noyau

Generating Hurricanes with a Markov Spatial Process

The National Hurricane Center (NHC) collects datasets with all  storms in North Atlantic, the North Atlantic Hurricane Database (HURDAT). For all sorms, we have the location of the storm, every six jours (at midnight, six a.m., noon and six p.m.). Note that we have also the date, the maximal wind speed – on a 6 hour window – and the pressure in the eye of the storm.

It is possible to run the following function

library(XML)
extract.track=function(year=2012,p=TRUE){

Continue reading Generating Hurricanes with a Markov Spatial Process

R package for Computational Actuarial Science

A webpage for the book is now hosted on

http://cas.uqam.ca/

So far, it is a very basic page, but information regarding the package can be found there. For instance, to install the package, with all the datasets, the R code is

> install.packages("CASdatasets", repos = "http://cas.uqam.ca/pub/R/")

The reference manual provides a description of all datasets.

“Raw Data” is an Oxymoron

Cette semaine, j’ai pris le temps pour parcourir un livre que j’avais reçu à la rentrée, “Raw Data”  is an Oxymoron, collection de textes édité par Lisa Gitelman en 2013, aux MIT Press. Une lecture critique avait été faite l’an passé sur les blogs impactofsocialsciences de la LSE et infofutures de la bibliothèque de NYU. J’avais alors eu envie de parcourir ce (petit) livre, et j’ai été ravi qu’on me l’envoie cet été. Je noterais aussi que j’ai été surpris de voir autant d’auteures femmes sur ce sujet, où d’ordinaire, on lit beaucoup le point de vue d’hommes. Et c’est passionnant. Je ne vais pas faire une lecture critique du livre, mais plutôt rappeler que mon blog est un carnet de recherche ouvert, où je garde mes notes de lectures, entre autres ici certains passages du livre que j’ai surligné lors de ma lecture. Continue reading “Raw Data” is an Oxymoron

Multiple Tests, an Introduction

Last week, a student asked me about multiple tests. More precisely, she ran an experience over – say – 20 weeks, with the same cohort of – say – 100 patients. An we observe some https://latex.codecogs.com/gif.latex?X_{i,t}

size=100
nb=20
set.seed(1)
X=matrix(rnorm(size*nb),size,nb)

(here, I just generate some fake data). I can visualize some trajectories, over the 20 weeks,

library(RColorBrewer)
cl1=brewer.pal(12,"Set3")[12]
cl2=brewer.pal(8,"Set2")[2:7]
cl=c(cl1,cl2)
boxplot(X)
for(i in 1:length(cl)){
lines(1:20,X[i,],type="b",col=cl[i])  }

http://freakonometrics.hypotheses.org/files/2014/09/Selection_585.png

Continue reading Multiple Tests, an Introduction

Fonction de répartition empirique

Ce matin, en cours, on avait utilisé une série d’observations pour décrire l’estimation nonparamétrique de la fonction de répartition

> Davis=read.table(
"http://socserv.socsci.mcmaster.ca/jfox/Books/Applied-Regression-2E/datasets/Davis.txt")

Comme il y une faute de saisie dans la base, on corrige, à la main,

> Davis[12,c(2,3)]=Davis[12,c(3,2)]

Notre variable d’intérêt sera la taille d’un individu,

> X=Davis$height
> X[1:10]
[1] 182 161 161 177 157 170 167 186 178 171

Pour tracer la fonction de répartition empirique,

https://latex.codecogs.com/gif.latex?\widehat{F}_n(x)=\frac{1}{n}\sum_{i=1}^n\boldsymbol{1}(\{x_i\leq%20x\})

on peut utiliser le code suivant

> n=length(X)
> x=seq(140,200)
> ggplot(data=data.frame(x=x), aes(x = x))+
+ stat_function(fun=Vectorize(function(x) sum(X<=x)/n),
+ geom="step", col = "red", size = 1) + 
+ ylab("Fonction de Repartition")

Permuter, sans créer de variable temporaire

Je n’aime pas me faire coller par un (ancien) étudiant !… mais j’ai trouvé la solution très jolie, alors je vais en garder la trace dans mon “cahier de recherche” qu’est mon blog. La question était simple :

Comment permuter les valeurs de deux variables, sans créer de variable temporaire ?

On a ainsi deux variables, https://latex.codecogs.com/gif.latex?A et https://latex.codecogs.com/gif.latex?B, on veut les permuter : https://latex.codecogs.com/gif.latex?A doit prendre la valeur de https://latex.codecogs.com/gif.latex?B, et inversement….

> a=1
> b=2
> a
[1] 1
> b
[1] 2

Continue reading Permuter, sans créer de variable temporaire

Quiz de probabilité

Ce matin, en fin de cours, j’ai fait passé un petit quiz. Compte tenu de la configuration de la salle, j’avais distribué deux questionnaires, avec chacun 10 questions. Les questions étaient identiques, à l’application numérique près (pour quelques exercices). La première série d’exercice est en ligne, ainsi que des éléments de correction; la seconde série est aussi en ligne, avec là encore des éléments de correction. J’ai rajouté après la correction les statistiques de réponses pour chaque formulaire, mais aussi au niveau agrégé (en incluant l’autre questionnaire). Il va de soi qu’il est possible de continuer à s’entraîner à faire des exercices pendant les semaines à venir, ça ne fera de mal à personne !

Rappels de statistique

Jeudi et vendredi, on finira les rappels de cours, avec quelques rappels de statistique. Les slides sont en ligne,

Sinon, histoire d’illustrer un peu les différents aspects, j’avais dit que j’aimais bien utiliser des simulations. En particulier, il sera intéressant de générer plusieurs (beaucoup) échantillons de taille donnée. Le code R est le suivant (une ligne correspond à un échantillon, de 20 observations)

> n=20
> m=1000
> M=matrix(rnorm(n*m),m,n)

On utilise ensuite la statistique que l’on souhaite étudier, qui peut être la moyenne empirique,

> Xbarn=apply(M,1,mean)

ou la variance

> Sn=apply(M,1,var)

On peut ensuite visualiser la distribution de la statistique, sur tous les échantillons. Par exemple, le fait que l’estimateur de la moyenne est gaussien, on peut faire un histogramme

> hist(Xbarn,probability=TRUE,
+ breaks=seq(-1,1,by=.1),col="light blue")

et rajouter la densité de la loi normale (car la théorie nous dit que la moyenne suit une loi normale),

> u=seq(-2,2,by=.01)
> lines(u,dnorm(u,sd=1/sqrt(n)),col="red",lwd=2)

Cela dit, comme Ewen Gallic fera essentiellement du ggplot2 dans son cours de R, je vais aussi mettre les codes en ggplot2 (et essayer de m’y convertir… ce n’est pas l’envie qui manque !)

> ggplot(data=data.frame(Xbarn = Xbarn), aes(x = Xbarn)) +
+   geom_histogram(aes(y = ..density..),
+   binwidth = .1, fill = "light blue", col = "black") +
+   stat_function(fun=function(x) dnorm(x,sd=1/sqrt(n)),
+ col = "red", size = 1) + ylab("Densite") +
+   ggtitle("Histogramme de Xbarn")

Cela dit,  au lieu de représenter la loi normale, on peut aussi visualiser un estimateur non paramétrique de la densité (on en reparlera dans quelques semaines), comme l’estimateur à noyau

> ggplot(data=data.frame(Xbarn = Xbarn), aes(x = Xbarn)) +
+   geom_histogram(aes(y = ..density..),
+   binwidth = .1, fill = "light blue", col = "black") +
+   geom_line(stat="density", col = "red", size = 1) +
+   ylab("Densite") +
+   ggtitle("Histogramme de Xbarn")

On peut aussi voir que la variance empirique suit une loi du chi-deux,

> hist((n-1)*Sn,probability=TRUE,
+ breaks=seq(0,56,by=2),
+ col="light blue")
> u=seq(0,56,by=.1)
> lines(u,dchisq(u,df=n-1),col="red",lwd=2)

avec là encore une version en ggplot2

> ggplot(data = data.frame(x = (n-1)*Sn), aes(x = x)) +
+   geom_histogram(aes(y = ..density..),
+   binwidth = 2, fill = "light blue", col = "black") +
+   geom_line(stat="density", col = "red", size = 1) +
+   xlab(expression((n-1) %*% Sn)) +
+   ylab("Densite") +
+   ggtitle(expression(paste("Histogramme de ", (n-1) %*% Sn)))

On peut aussi utiliser ces simulations pour comprendre l’idée d’intervalle de confiance à 90%,

> x1=Xbarn-1.64*1/sqrt(n)
> x2=Xbarn+1.64*1/sqrt(n)
> ind=x1*x2>0
> plot(1:m,Xbarn,ylim=c(-1,1),col="white",
+ ylab="intervalle de confiance",xlab="")
> segments(1:m,x1,1:m,x2,col=c("light blue","red")[ind+1],lwd=1.5)
> abline(h=0,lty=2)

ou pour la version ggplot2 (mais on reparlera de tout ça en cours, pas forcément cette semaine cela dit)

> ggplot(data = df) +
+   # Les segments. La couleur doit etre fonction d'un logique
+   geom_segment(aes(x = x, xend = x, y = x1, yend = x2, col = x1*x2>0)) +
+   # La ligne horizontale en y = 0
+   geom_hline(yintercept = 0, linetype = "dashed") +
+   # Changer les couleurs des segments
+   scale_colour_manual(values = c("light blue" ,"red")) +
+   # Modifier le titre de l'axe des y
+   ylab("Intervalle de confiance") +
+   # Modifier le titre de l'axe des x
+   xlab("") +
+   # Cacher la legende
+   theme(legend.position="none")

On note que dans 90% des scénarios (notion d’intervalle de confiance à 90%), la vraie valeur (connue ici car on simule nos échantillons) est effectivement dans l’intervalle de confiance.

Crowded Cities, Paris, Hong Kong and Montréal

Over the past years, I’ve been living in different cities, all of them being completely different, compared with the others. I have been living in Paris, which is a big city in Europe, with a large suburban neighborhood, too (la banlieue).

Then, I’ve been living in Hong Kong, which is a larger city, in Asia.

It was crowded. I mean, it was the feeling I had, while I was living there. And more recently, I’ve been living in Montréal, in North America. Montreal is a large city. Or to be more specific, an island,

The three cities are quite different. Paris, 2.211 million unhabitants, and 105,4 km² (density 21,057 unhabitants per km²). Montréal, 1.621 million unhabitants, and three times wider 365.1 km² (density 4,441 unhabitants per km²). Hong Kong, 7.234 million unhabitants, and again three times wider 1,104 km² (density 6,553 unhabitants per km²). In Hong Kong, there are several hill where it is not possible to build anything: on a large part of the island, the density is null.

Continue reading Crowded Cities, Paris, Hong Kong and Montréal