Statistiques non-paramétriques Ch. 2. Bootstrap...

24
Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18 Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18 M2 CEE Pr. Philippe Polomé, Université Lumière Lyon 2

Transcript of Statistiques non-paramétriques Ch. 2. Bootstrap...

Page 1: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriquesCh. 2. Bootstrap 2017-18

M2 CEE

Pr. Philippe Polomé, Université Lumière Lyon 2

Page 2: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Définitions

Sommaire

Définitions

Illustration

Commande sample

Page 3: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Définitions

Motivation

I En régression np, on n’a pasI d’hyp. de normalitéI de coefficient dont on pourrait tester la significativité

I Par contre, il faut pouvoir inférerI L’effet d’un régresseur x sur une dépendante y , @y/@x, est-il

significatif ?I Peut-on calculer un IC ?

I Toute autre hyp moins simple

I Dans les régressions np au ch suivant, bootstrap est la seuletechnique d’inférence

Page 4: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Définitions

BootstrapI Hyp. “Principe de médiocrité” :

I Si on pouvait ré-échantillonner la pop.I dans les mêmes conditionsI on obtiendrait un échantillon semblable à celui qu’on a déjà

I On ne peut pas ré-échantillonnerI Pas la même chose que représentativité

I Principe : Traiter l’éch. comme une pop.I Échantillonner l’échantillon original avec remplacement

I Si on a une taille n au départ, on fait n tirages avecremplacement

I Chaque i a une probabilité 1/n de sortir à chaque tirageI On obtient un échantillon Bootstrap (de taille n)I ou pseudo-échantillonI Certaines obs. sont tirées pls fois, d’autres aucuneI Hyp. : ce pseudo-échantillon est semblable à ce qu’on aurait

obtenu en ré-échantillonnant la pop.

Page 5: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Définitions

Exemple notionel

I Dans un tableur, plus intuitifI Soit un éch. de taille n d’une variable z

I On numérote chaque obs. de 1 à nI On crée une plage de n lignes x 1 col

I Chaque cellule est remplie de la fonction randbetween(1 ;n)I Tire un naturel entre 1 et n

I On obtient n chiffres entre 1 et nI certains sont répétésI d’autres absents

I un pseudo-échantillon est généré enI créant une nouvelle plage de n lignes x 1 colI dans chaque cellule on associe l’observation original au chiffre

trouvé

Page 6: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Définitions

Exemple

Fichier “bootstrap.ods” sur page web

Page 7: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Définitions

Exemple MCO

I Échantillon original < Y ,X >, Xpeut être une matriceI

B pseudo-échantillons différents < Yb,Xb >I S’appelle “Bootstrap par paire” car y et X sont tirés ensembleI N’est pas la seule façon

I p.e. on peut se baser sur les résidusI Pour chaque pseudo-échantillon

I On prend le MRL Y = X� + ✏I On estime dans chaque pseudo-échantillon

�̂b =⇣X

0bXb

⌘�1

X0bYb

I Au total, une matrice �̂B de B vecteurs estimées �̂b

Page 8: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

I On prend un élément de �, soit �iI On a B estimations �̂ib, on les mets en histogramme

50 échantillons 500 échantillons

5000 échantillons 1 échantillons

Page 9: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Définitions

Exemple MCO et distribution empiriqueI La distribution empirique est représentée par les histogrammes

I Lorsque B ! 1, et que les hypothèses bootstrap sont vérifiées

I alors la distribution empirique converge à la vraie distributionI qui est normale pour un �̂MCO , mais ça n’est pas vrai pour p.e.

des stats de testI Deux moments de cette distribution empirique “bootstrap”

I ¯̂�i =1B

BX

b=1

�̂ib =\E

⇣�̂ib

I\

var

⇣�̂ib

⌘= 1

B�1

BX

b=1

⇣�̂ib � ¯̂�i

⌘2

I Intervalle de confiance, p.e. avec B = 1000I On ordonne ces 1000 estimations de la plus petite à la plus

grandeI Alors les estimations numéro 25 et 975 sont les bornes inf et

sup, respectivement, de l’intervalle de confiance à 95% de �

Page 10: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Définitions

Pourquoi est-ce intéressant ?

1. Pas d’hypothèse sur la distribution des erreurs1.1 Mais il ne peut y avoir de corrélation entre observations

I Le ré-échantillonnage casserait cette corrélationI En panels, on ré-échantillonne seulement sur i en utilisant

toutes les T périodes de chaque i sélectionné

1.2 Le bootstrap par paires < Yb,Xb > devrait produire des écartstypes robustes à l’hétéroscédasticité

2. On peut calculer des intervales de confiance2.1 pour toute fonction des paramètres estimés, y-compris

non-linéaire2.2 pour des paramètres estimés de modèles sans propriétés

d’échantillons finis connuesI comme semi-np

Page 11: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Illustration

Sommaire

Définitions

Illustration

Commande sample

Page 12: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Illustration

Exemple du package AER, Journals

I On veut calculer des écarts-types & des intervales de confianceI data("Journals")I journals <- Journals[, c("subs", "price")]I journals$citeprice <- Journals$price/Journals$citationsI jour_lm <- lm(log(subs) ~ log(citeprice), data = journals)I Voir commandes bootstrap dans np2017.R

Page 13: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Illustration

La commande boot( )

I Le bootstrap dans RI utilise la commande boot( ) du package bootI Elle accepte pls arguments,

I desquels 3 sont requis :

I Data : les donnéesI Statistic : une fonction à définir qui renvoie la stat à

“bootstrapper”I avec 2 arguments

I Les données (une nouvelle fois !)I Un vecteur index qui donne les indices des obs à inclure dans

l’échantillon bootstrapI R : le nombre de réplication

I B dans la présentation théorique

Page 14: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Illustration

Construction de la fonction pour l’arg. “statistic” de boot( )refit <- function(data, i)

I Se rappeler que dans une fonction il ne faut qu’énoncer lesarguments

I Ce que la fonction fait est décrit en dessousI coef(lm(log(subs) ~ log(citeprice), data = data[i,]))

I refit est définie juste pour les besoins de boot( )I sur les données et sur un index i des données

I Ici refit renvoie les coefficients MCO de log(subs) ~log(citeprice)

I et utilise comme index i le num. de la ligne des donnéesI pas MCO sur la ligne i

I Donc, la fonction boot( ) prend i comme index du bootstrapI Dans chaque réplication bootstrap, un nouvel éch. extrait des

lignes de data

Tout ça n’est pas très intuitif,I mais c’est le format de boot( )

Page 15: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Illustration

Appeler boot( )I library("boot")

I boot est le package recommandé pour le bootstrap

I set.seed(123)I jour_boot <- boot(journals, refit, R = 999)

I boot : 3 arg – données, fonction, BI jour_boot montre comme résultats :

I Les coef du lm originalI La différence avec la moyenne des coeff issus du bootstrap

I appelé “biais”I Les écarts-types de ces derniers

I Pour calculer des t-stats bootstrappés il vaut mieux extraireles t-stats de lm plutôt que les coef

I voir np2017.R

I Peu de différence avec la sortie standard coeftest(jour_lm)

Page 16: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Illustration

Autres éléments de boot

I t0 est la stat originale sur laquelle on réalise le bootstrapI jour_boot$t0 pour l’extraire

I t l’ensemble des R stat bootstrappéesI Ici, intercept (col 1) et pente (col 2)I On peut calculer directement un CI à partir de t avec la

fonction quantileI quantile(jour_boot$t[,2], probs = c(.025,.975))I on prend [,2] pour le 2nd élément des coef = pente de la

régression

I Pour calculer un IC des t-stat, voir np2017.RI Exercice : IC du R

2 de cette régressionI Le R

2 peut être extrait de summary

Page 17: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Illustration

Exemple test de Kruskal Walis

I kruskal.test(Ozone ~ Month, data = airquality)I retest <- function(data, i)

I (kruskal.test(Ozone ~ Month, data = data[i,]))$statisticI air_boot <- boot(airquality, retest, R = 999)I Exercice :

I Donnez un IC pour la p-valeur en utilisant la fonction boot.ci

Page 18: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Commande sample

Sommaire

Définitions

Illustration

Commande sample

Page 19: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Commande sample

Commande sample

I sample(x, size, replace = FALSE)I Permet de prendre un sous-échantillon de x de taille size

I avec ou sans remplacementI En prenant un sous-éch. de la même taille que l’éch.

I avec remplacementI on fait un éch. bootstrap

I En mettant ça dans une boucle R foisI et en pratiquant l’analyse désirée à chaque foisI on obtient une alternative à la commande boot

I Quel intérêt ? permet de spécifier des groupesI x est soit une variable dans le dataframeI ou un index compatible

I p.e. en panel, on pourrait avoir i=pays et t=annéeI on veut faire un bootstrap sur les seuls

Page 20: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Commande sample

Bootstrap avec sample

I package plmI Estimation panel effet fixe

I grun.fe <- plm(inv~value+capital, data = Grunfeld, model ="within")

I En panel, svt het. & autocor. => calculer le t-stat parbootstrap

I Ensuite, il faut définir une “function” pour définir un éch.bootstrap

I Puis une boucle “for” pour appeler cette function R fois

Page 21: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

FUN

I myfunc <- function(n,df) {I définit function (n et df sont dans l’appel de la fonction + bas)

I n est Grunfeld$firm lors de l’appel de myfuncI df est le dataframe

I Grunfeld unique_firm <- unique(n)I firme unique (help : unique renvoie un vecteur ou data frame

comme son arg x mais en enlevant les lignes doublons, dans cecas définies sur firm)

I sample_firm <- sample(unique_firm,size=length(unique_firm), replace=T )

I choisit sur firm unique, au hasard avec remplacement, de lataille de "size" (help sample)

I new_df <- do.call(rbind, lapply(sample_firm, function(x)df[df$firm==x,] ))

I va chercher toutes les années de chaque Etat choisialeatoirement et rbind c’est-a-dire empile en ligne

I }

Page 22: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Bootstrap avec sampleI do.call

I construit & execute une fonction : do.call(what, args)I what : soit une fonction ou une chaine de caracteres nommant

une fonction a appeler - rbind "row bind" lier des lignesI args : lapply(X, FUN, ...) : Appliquer une Function FUN sur

un vecteur ou une liste X et renvoie une liste de memelongueur que X, chaque element de cette liste est le resultatd’appliquer FUN a l’element correspondant de X

I Donc creation d’une 2eme function a l’interieur de lapply quiva chercher les lignes correspondantes aux états dans"sample_firm"

I a <- myfunc(Grunfeld$firm, Grunfeld)I exécute la function, on voit que le résultat a la même taille que

GrunfeldI Mais certaines firmes sont dupliquées, d’où message d’erreur

de plmI pour éviter ca, re-créer un index des firmes

I On sait qu’on a 20 obs par firme, 10 firmesI On va creer une sequence a$E <- rep(1 :10, each = 20)I On teste : coef(plm(inv~value+capital, data = a, index =

c("E","year"), model = "within")) ok !

Page 23: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Boucle for de 1 a R

I R=99I c <- coef(plm(inv~value+capital, data = Grunfeld, model =

"within"))I Estimation initiale (peut etre part du bootstrap), coef est un

vectorI for(i in 1 :R) {

I a <- myfunc(Grunfeld$firm, Grunfeld) # A chaque i onrelance le bootstrap & les estimations

I a$E <- rep(1 :10, each = 20)I c <- cbind(c,coef(plm(inv~value+capital, data = a, index =

c("E","year"), model = "within")))I cree une matrice avec tous les 1ers coefs sur la 1ere ligne,

tous les 2nds sur la seconde et ainsi de suite pour l’ensembledes coef du modele (ici 2)

I }

Page 24: Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18risques-environnement.universite-lyon.fr/IMG/pdf/np_ch2_boot_2017_… · Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18

Commande sample

Sorties

I colMeans(t(c))I moyenne sur chaque coef

I sqrt(apply(t(c), MARGIN = 2, var))I ecarts-types par coefI MARGIN = 2 indique à apply de calculer var sur les col de t(c)

(transposée de c)I apply(t(c), MARGIN = 2, quantile, probs=c(.025, .975))

I 95% CI over coef value

Exercice. Répliquer cet exemple en groupant par year au lieu de firm