Statistiques non-paramétriques Ch. 2. Bootstrap...
Transcript of Statistiques non-paramétriques Ch. 2. Bootstrap...
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
Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18
Définitions
Sommaire
Définitions
Illustration
Commande sample
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
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.
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é
Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18
Définitions
Exemple
Fichier “bootstrap.ods” sur page web
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
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
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 �
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
Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18
Illustration
Sommaire
Définitions
Illustration
Commande sample
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
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
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( )
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)
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
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
Statistiques non-paramétriques Ch. 2. Bootstrap 2017-18
Commande sample
Sommaire
Définitions
Illustration
Commande sample
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
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
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 }
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 !
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 }
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