Bootstrap sur les estimateurs MCO d'un modèle linéaire
par
, 27/12/2015 à 03h13 (1354 Affichages)
Nous faisons généralement référence à un échantillon pour une analyse. Pour la plupart des cas, ces échantillons contiennent des observations atypiques qui pourraient incliner fortement les résultats. Le statisticien devra rigoureusement écarter ces observations de son étude au risque de biaiser son analyse. Ce problème se pose généralement en économétrie, où une seule observation peut influencer significativement les coefficients estimés. Plusieurs méthodes existent pour contrôler ses données. Dans ce blog, nous proposons une méthode de bootstrap sur les coefficient d'un modèle linéaire afin de tester la robustesse des estimateurs MCO (implémentation sous SAS mais si on comprend l'idée, on peut implémenter sous d'autres logiciels aisément).
L'idée est quand même banale. Supposons qu'on dispose d'un échantillon de taille n. A partir de cette population de référence, on veut estimer un modèle linéaire Y=a*X+u. Pour tester la robustesse de l'estimateur MCO du coefficient a, la méthode que nous proposons est la suivante:
- Tirer un autre échantillon de taille n1<<n à partir de notre échantillon de départ. (n1 est aussi supposé grand pour que les propriétés de convergence des estimateurs soient valides). On fait la régression sur l'échantillon de taille n1 et on stock les résultats.
- Reprendre le procédé un certain nombre de fois (tirer toujours n1 et estimer le modèle et stocker les résultats).
- Comparer les différentes valeurs des estimateurs
Si les estimateurs sont robustes et qu'il n'y a pas d'individus atypiques dans la base, on doit avoir sensiblement les mêmes valeurs à chaque itération. Pour un paramètre, les différents estimateurs doivent suivre une loi normale de même moyenne (selon la théorie). S’il y a une différence significative entre les estimateurs c'est qu'ils ne sont pas robustes. Ce qui veut dire qu'il y a un ou des élément(s) perturbateur(s) qui influence (nt) significativement les estimateurs. Raison pour laquelle les estimateurs sont perturbés lorsque ces observations sont tirées.
Or si les valeurs ne changent presque pas, c'est que tous les individus sont homogènes (pas de valeurs atypiques). C'est pourquoi lorsqu'on tire un échantillon (peu importe les observations tirées), l'estimateur reste quasiment le même.
Le code suivant permet de faire cette simulation sous SAS
Dans la variable Ite, on renseigne le nombre d’itérations, c'est à dire le nombre de fois où il faut tirer l'échantillon. n est la taille de l'échantillon à tirer. n doit être inférieur à la taille de votre échantillon de départ. Dans la variable table on renseigne la table qui continent les données (ça peut être de type library.table si la table n'est pas dans la bibliothèque work). La variable Var prend le nom de la variable à modéliser, list la liste des variables explicatives. Out prend le nom de la table sortie. Pour chaque itération, cette table donne les estimateurs MCO des coefficients. Detail est une variable binaire égale à 0 ou 1. Par défaut égale à 0. Lorsqu'elle est égale à 1, la macro crée dans la bibliothèque Work une table qui s'appelle Detail. Cette table fournit pour chaque itération, les individus qui sont tirés. Cela permettra éventuellement de détecter, si à une itération les valeurs sont très différents, les individus qui ont permis d'obtenir ces coefficients. Ces individus seraient atypiques car ils ont un comportement différent des autres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 %macro iteml(Ite=100,n=30,Table=,Var=,List=,out=,Detail=0); options nonotes; ODS EXCLUDE ALL ; proc surveyselect data=&table n=&n method=srs out=test noprint; run; proc reg data=test outest=S noprint; model1: model &var=&list; run; quit; data S (drop=_DEPVAR_ _Type_ _RMSE_ &var); set S; Iteration=1; data &out; set S; run; %if &Detail=1 %then %do; proc sql; create table Detail as select 1 as Iteration, * from test; quit; %end; %if &Ite >1 %then %do; %do i=2 %to &Ite; proc surveyselect data=&table n=&n method=srs out=test noprint; run; proc reg data=test outest=S noprint; model&i: model &var=&List; run; quit; data S (drop= _DEPVAR_ _Type_ _RMSE_ &var); set S; Iteration=&i; data &out; set &out S; run; %if &Detail=1 %then %do; proc sql; create table Details as select &i as Iteration, * from test; quit; data Detail; set Detail Details; run; %end; %end; proc sql; drop Details; quit; %end; proc sql; drop table S, test; quit; options notes; ODS SELECT ALL ; %put **********************************************************************; %put * MACRO BOOTSTRAP SUR LES COEFFICIENTS D UN MODELE LINEAIRE *; %put * DEVELOPPEE PAR ELYSE ARISTIDE HOUNDETOUNGAN *; %put * ariel92and@gmail.com *; %put **********************************************************************; %mend;
Dans le code suivant, on a fait 100 itérations. Chaque fois on tire 80 individus. On régresse la variable Ispef sur les explicatives pibh pagr emco2 isf. Les sorties sont fournies dans la table work.sortie et les individus tirés à chaque itération sont dans la table Work.Detail.
Lorsqu'on compile le code, on peut déjà utiliser la table Sortie pour tracer l'évolution des estimateurs suivant l'indice d'itération. On saura s'il y a un pic à une itération. On peut aussi faire des tests de normalité sur la série d'estimateurs pour un paramètre. Si on rejette l'hypothèse de normalité c'est qu'il y a un problème. Notre estimateur n'est donc pas convergent. Noter donc qu'on peut faire beaucoup d'analyses et de tests sur les sorties pour vérifier la robustesse des estimateurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 %iteml(Ite=100,n=80,table=local,var=ispef,list=pibh pagr emco2 isf,out=sortie,Detail=1);
Amusez-vous bien et à très bientôt pour un nouveau billet.
Vos commentaires et critiques seront les bienvenus