Académique Documents
Professionnel Documents
Culture Documents
N OTES DE COURS
1 Généralités 7
1.1 Les fenêtres de Stata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Obtenir de l’aide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3 Stata sur le web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4 Personnalisation et mise à jour . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.1 Personnalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.2 Mise à jour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5 Commandes et ensemble de commandes . . . . . . . . . . . . . . . . . . . . . 10
1.5.1 Syntaxe générale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5.2 by, bysort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5.3 if, in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5.4 Trucs et astuces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.6 Ouverture de bases de données . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.6.1 Les bases en format Stata . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.6.2 Les autres formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.7 Fichiers .do et fichiers .log . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.7.1 Fichiers .do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.7.2 Fichiers .log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3
2.6 Fusion de bases de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.6.1 merge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.6.2 append . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.7 Format wide et format long . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.8 collapse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4 Graphiques 53
4.1 Graphiques de statistiques descriptives . . . . . . . . . . . . . . . . . . . . . . 53
4.2 Graphiques univariés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.3 Graphiques multivariés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.4 Superposition de graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.5 Légende, titres etc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5 Estimation 65
5.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.2 Variables catégorielles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.2.1 Stata 10 et avant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.2.2 Stata 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.3 Moindres carrés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.3.1 MCO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.3.2 MCG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.4 Variables instrumentales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.5 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.6 Données de panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.6.1 Modèles à effets fixes . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.6.2 Modèles à effets aléatoire . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.6.3 Test d’Hausman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.7 Variables qualitatives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.7.1 Probit et Logit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.7.2 Probit et Logit ordonnés . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.7.3 Logit multinimial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.8 Modèles à sélection endogène . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.9 Modèles de durée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.9.1 Déclaration des données . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.9.2 Estimation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.9.3 Hétérogénéité inobservée . . . . . . . . . . . . . . . . . . . . . . . . . 76
6 Programmation 79
6.1 Macros locales et globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.2 macros numériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.3 macros alphanumériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.4 Boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.5 Boucles simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
6.6 Boucles imbriquées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
6.7 foreach et forvalues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.8 Création de commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.9 Estimation par maximum de vraisemblance . . . . . . . . . . . . . . . . . . . 84
6.10 Monte-Carlo et bootstrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6.10.1 Monte-Carlo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
6.10.2 Bootstrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Bibliographie 91
Liste des exemples
6
Chapitre 1
Généralités
Stata est un logiciel de gestion de données et d’analyse statistique à visée généraliste. Son
interface graphique permet d’effectuer une analyse en utilisant les menus déroulant de son in-
terface graphiques ou bien en tapant directement la ligne de commande à effectuer.
À la différence d’autres logiciels, comme SAS, Stata charge l’ensemble de la base de don-
née active en mémoire. Il en résulte que Stata sera typiquement plus rapide que SAS sur des
« petites » bases de données, mais deviendra beaucoup plus lent dès lors que la taille de la base
nécessite l’utilisation de mémoire virtuelle. De façon générale, il convient de veiller à l’adé-
quation de la mémoire vive installée sur l’ordinateur et de la taille de la base sur laquelle on
travaille 1 .
c V. Simonnet et A. Terracol, 2014 7
F IGURE 1.1 – Les fenêtres Stata
8
c V. Simonnet et A. Terracol, 2014
1.2 Obtenir de l’aide
Le menu déroulant « Help » propose un outil de recherche par mot-clef (« Search ») qui
vous proposera des résultats concernant des commandes Stata, des liens vers des FAQ ou des
exemples sur internet, etc.
Si vous connaissez le nom de la commande sur laquelle vous souhaitez obtenir de l’aide, il
est plus rapide de passer directement par le menu Help/Stata Command.
Les fichiers d’aide contiennent souvent des liens hypertexte (mots ou phrases en bleu) re-
voyant vers les fichiers d’aides d’autres commandes.
Hors du site officiel de Stata, les consultants en statistiques de l’UCLA maintiennent un site
très fourni sur l’utilisation de Stata : http://www.ats.ucla.edu/stat/stata/
c V. Simonnet et A. Terracol, 2014 9
Stata bénéficie d’une communauté d’utilisateur assez large, et d’une liste de discussion très
active, la « Statalist » dont on peut trouver les archives sur http ://stata.com/statalist/ De nom-
breuses commandes écrites par des utilisateurs 2 sont également mises à la disposition des utili-
sateurs. La plupart sont télécheargeables directement depuis Stata, et une liste (non exhaustive)
peut être consultée sur http ://ideas.repec.org/s/boc/bocode.html
Les mots en gras correspondent à des mots réservés Stata, comme les noms de commande,
d’options, ou certains préfixes. Les mots en italique sont des arguments à fournir par l’utili-
sateur, comme une liste de variable, une expression logique etc. Les parties [entre crochets]
sont des arguments optionnels. Notez ques les éléments placés après la virgule sont dénommé
« options », même si ils doivent parfois être obligatoirement spécifiés.
Ainsi, la syntaxe de la commande summarize (qui donne des statistiques descriptives de
base) est la suivante :
summarize [varlist] [if] [in] [weight] [, options]
10
c V. Simonnet et A. Terracol, 2014
su, de
Pour obtenir uniquement la moyenne d’une variable nommée age, on pourra taper
summarize age, mean
(dans ce cas, rien ne s’affichera à l’écran, mais des résultats sont néanmoins sauvegardés. Voir
la section 2.3.2)
En pratique, les données doivent être triées dans le bon ordre pour que Stata puisse effectuer
les commandes par sous-groupe. La commande sort permet de faire celà :
sort sexe
by sexe : su age
Il est souvent plus pratique d’utiliser bysort au lieu de by, car bysort trie automatique-
ment les données avant d’effectuer la commande 3 . On tapera par exemple
bysort sexe : su age
Si on veut effectuer un classement interne aux groupes définis par bysort, on indique les
variables de ce tri supplémentaire entre parenthèse. Taper
bysort sexe (age)
effectue le tri par sexe et âge, mais les groupes ne sont définis que par la variable de sexe (et ne
sont donc pas des groupes de sexe et d’âge)
1.5.3 if, in
Les suffixes if et in permettent de n’effectuer les commandes que sur un groupe restreint
d’observations.
3. by garde son interêt si l’on est certain que les données sont déjà correctement triées, car dans ce cas by sera
légèrement plus rapide que bysort.
c V. Simonnet et A. Terracol, 2014 11
if
if spécifie une condition logique, tandis que in spécifie les numéros de ligne des observa-
tions à utiliser. Le tableau 1.1 ci dessous présente les différents opérateurs logiques disponibles.
Ainsi taper
su age if sexe==1
n’exécutera la commande que pour les hommes.
Conditions logiques
On peut spécifier des conditions logiques complexes en utilisant les parenthèses de façon
adéquates, par exemple, pour spécifier que l’on souhaite appliquer la commandes aux femmes
des tous âge ainsi qu’aux hommes de plus de 40 ans, on tapera
if fe==1 | (fe==0 & age>40)
Stata évalue les conditions logiques à 1 si elle est vérifiée, et zéro sinon. On peut tirer parti
de cette propriété lorsque l’on souhaite créer des indicatrices. Ainsi, au lieu de taper
generate age60p = 1 if age>=60
replace age60p = 0 if age<60
, on peut directement utiliser
generate agep60=(age>=60)
Si age est plus grand ou égal à 60, la condition est évaluée à 1, et à zéro sinon, et une indicatrice
est alors crée.
in
Le suffixe in spécifie les numéros des observations sur lesquelles effectuer les commandes.
On peut soit indiquer directement le numéro des observations :
su age in 5
ou bien spécifier un ensemble d’observations :
su age in 20/30
12
c V. Simonnet et A. Terracol, 2014
1.5.4 Trucs et astuces
Abréviations
De même que Stata permet d’appeler une commande par son abréviation (g au lieu de
generate, etc.), il est possible d’utiliser une syntaxe abrégée pour les listes de variables. Si
l’argument varlist est optionnel, alors ne rien indiquer revient à spécifier toutes les variables. La
macro _all a le même effet. Séparer deux noms de variables par un tiret vardeb-varfin
correspond à la liste de toutes les variables situées entre vardeb et varfin dans la base de
données (voir la commande order pour placer les variables dans un ordre particulier). Enfin,
le caractère * s’utilise comme un « joker » : s* représente toutes les variables commençant par
s ; et *s représente toutes les variables finisant par s.
Enfin, on peut se contenter d’indiquer les premières lettres d’un nom de variable, tant qu’il
n’y a pas d’ambiguïté (une seule variable commençant par cette série de lettres).
Listes de chiffres
Un certain nombre de commandes demandent que vous spécifiez une liste de valeurs (par
exemple pour indiquer les valeurs que vous voulez voir apparaître sur les axes d’un graphique,
ou bien encore les valeurs délimitant des sous-catégories d’une variable continue, etc.). Si la
liste des valeurs que vous souhaitez spécifier a une certaine régularité (par exemple, « 0,2,4,6,8 »,
ou bien « 10, 20, 30, 40 », etc.), Stata vous permet de spécifier de telles listes de la façon sui-
vante :
<valeur initiale>(<incrément>)<valeur finale>
Il existe d’autres conventions pour indiquer une liste de valeurs. Si on souhaite que l’incré-
ment soit de 1, on peut se contenter d’indiquer <valeur initiale>/<valeur finale>.
Par exemple, 5/10 correspond à la liste « 5, 6, 7 ,8 ,9 10 »
On peut également indiquer implicitement la valeur de l’incrément en donnant les deux
premières valeurs, puis en disant à Stata de continuer jusqu’à la dernière : 2 4 to 10 est
équivalent à « 2, 4, 6, 8, 10 »
Dans certains cas, il est possible de combiner plusieurs listes pour former une liste plus
complexe. Par exemple, si on souhaite construire la liste commençant par 0, puis allant de 1 en
1 de 2 jusqu’à 10, puis de 10 en 10 jusqu’à 100, et enfin de 100 en 100 jusqu’à 1000, on pourra
utiliser, par exemple 0 2/10 20(10)100 200 300 to 1000
_n et _N
Les macros _n et _N représentent le rang de l’observation courante et le rang de la dernière
observation. En utilisant le fait que var[i] désigne la ième observation de la variable var ; on
va donc pouvoir utiliser var[1] pour représenter la valeur prise par la première observation
de var, var[_N] pour la dernière observation, var[_n-1] pour l’observation précédente,
etc. Dans le cas où un by var1 (var2) : a été spécifié, var[_N] désigne la valeur de la
c V. Simonnet et A. Terracol, 2014 13
variable var pour la dernière observation de chaque groupe défini par var1, classé par valeurs
de var2 croissante (en clair, c’est la valeur de var prise par la personne ayant la valeur de
var2 la plus élevée au sein du groupe défini par var1).
Par exemple, si on dispose d’observations annuelles d’individus désignés par l’identifiant
id, où l’année d’observation est désignée par year, mais où on ne dispose de l’âge (age) de
l’individu que pour son premier enregistrement. Pour calculer automatiquement l’âge de chaque
individu pour les périodes où il n’est pas renseigné, on tapera :
bysort id (year) : replace age=age[_n-1]+1 if _n>1
Fichiers texte
les commandes insheet, infile et infix permettent d’ouvrir des bases de données
au format .txt.
Par exemple, un fichier texte ASCII sauvegardé à partir d’un fichier Excel ou d’un autre
logiciel peut être lu avec la commande insheet.
Si le séparateur est une tabulation, on écrira :
insheet using base.txt, tab
14
c V. Simonnet et A. Terracol, 2014
ou bien, si le séparateur est une virgule :
insheet using base.txt, comma
Les seules consignes à respecter avec cette commande sont la préparation du fichier de
données en indiquant sur la première ligne le nom des variables qui sont disposées en colonne.
Il ne faut pas laisser de noms de variables sous format numérique et de préférence transformer
les dates (en variables) avec un underscore : 2004 en _2004. Vérifier qu’il n’y a pas de virgule
dans les données pour ne pas troubler la reconnaissance des variables/colonnes.
Les commandes infile et infix nécessitent qu’on indique le nom des variables pré-
sentes dans la base de donnée. Voir le fichier d’aide pour plus de détails.
4. Il est également possible d’indiquer à Stata que l’on souhaite utiliser un autre délimiteur que le retour chariot
à l’aide de la commande #delimit. Si on souhaite utiliser le point-virgule, on tapera #delimit ; au début du
fichier .do. Il sera alors possible de séparer les commandes en plusieurs lignes en mettant un point-virgule à la fin
de chaque commande.
c V. Simonnet et A. Terracol, 2014 15
Exemple 1 : Commentaires dans un fichier .do
/*Projet truc
exploration des données
version 1.0
*/
*Statistiques descriptives
summarize age wage education, detail /*avec %iles*/
summarize wage if (education >=3 & age>=45) ///
| (education<2 & age<30)
summarize wage if (education >=3 & age<=45) /*
*/ | (education<2 & age>30)
16
c V. Simonnet et A. Terracol, 2014
Notes
c V. Simonnet et A. Terracol, 2014 17
Chapitre 2
Les variables pouvant prendre des valeurs décimales peuvent être stockées sous les formats
suivants :
Les variables numériques sont stockés par défaut en format float. Les calculs sont quant
à eux effectués en double précision.
Les variables alphanumériques sont stockées au format strX, où X est le nombre de carac-
tère que la variable peut contenir. Des valeurs « numériques » peuvent être stockées au format
string, mais aucun calcul ne peut plus être effectué sur ces variables. Lors de l’utilisation de
conditions logiques avec des variables alphanumériques, il faut mettre la valeur de ces dernières
entre guillement, par exemple
summarize if region=="Bretagne"
c V. Simonnet et A. Terracol, 2014 19
Comme Stata charge l’ensemble de la base de donnée en mémoire, le format de stockage
a son importance. La commande compress permet d’assigner à chaque variable le format
minimisant la mémoire nécessaire.
Pour donner un label à une valeur particulière d’une variable 2 , il faut procéder en deux
temps : définir à quelles valeur chaque label doit être associé avec la commande label define,
puis appliquer ces label à la variable avec label value :
label define sexlbl 1 Homme 2 Femme
défini une label nommé « sexlbl » qui indique que la valeur 1 correspond au label « Homme »
et la valeur 2 au label « Femme ». On applique ensuite cette définition à la variable sex :
label value sex sexlbl
1. En fait, il est possible de coder diverses raisons pour laquelle une valeur est manquante en utilisant .a, .b
etc. jusqu’à .z pour repérer les non-réponses, les « je ne sais pas » etc.
2. Seules des valeurs entières peuvent avoir un label.
20
c V. Simonnet et A. Terracol, 2014
2.2.2 Notes
On peut également commenter une base ou une variable avec la commande notes. Plu-
sieurs commentaires peuvent être associés à une variable ou base de donnée :
notes wage: attention aux variables manquantes
2.3 Description
Un certain nombre de commandes permettent de décrire plus ou moins précisément la base
de donnée ainsi que les variables qu’elle contient :
c V. Simonnet et A. Terracol, 2014 21
Exemple 2 : Un exemple de session Stata
. des
Contains data from http://www.stata-press.com/data/r11/systolic.dta
obs: 58 Systolic Blood Pressure Data
vars: 3 3 Mar 2007 21:40
size: 812 (99.9% of memory free)
-------------------------------------------------------------------------------
storage display value
variable name type format label variable label
-------------------------------------------------------------------------------
drug int %8.0g Drug Used
disease int %8.0g Patient’s Disease
systolic int %8.0g Increment in Systolic B.P.
-------------------------------------------------------------------------------
Sorted by:
. su
Variable | Obs Mean Std. Dev. Min Max
-------------+--------------------------------------------------------
drug | 58 2.5 1.158493 1 4
disease | 58 2.017241 .8269873 1 3
systolic | 58 18.87931 12.80087 -6 44
. su sys, de
Increment in Systolic B.P.
-------------------------------------------------------------
Percentiles Smallest
1% -6 -6
5% -3 -5
10% 1 -3 Obs 58
25% 9 -2 Sum of Wgt. 58
---------------------------------------------------------------------------------------
systolic
22
c V. Simonnet et A. Terracol, 2014
---------------------------------------------------------------------------------------
type: numeric (int)
range: [-6,44] units: 1
unique values: 32 missing .: 0/58
mean: 18.8793
std. dev: 12.8009
percentiles: 10% 25% 50% 75% 90%
1 9 21 28 34
return list
scalars:
r(N) = 74
r(sum_w) = 74
r(mean) = 6165.256756756757
r(Var) = 8699525.974268789
r(sd) = 2949.495884768919
r(min) = 3291
r(max) = 15906
r(sum) = 456229
Les résultats stockés dans r() sont utilisables pour effectuer certains calculs 3 ou au sein
de conditions logiques. Par exemple, pour obtenir les statistiques descriptives de price pour
les observations où price est supérieur à la moyenne, on peut maintenant taper :
3. Il est inutile de faire afficher la liste de ces résultats pour qu’ils soient utilisables ; les macros r() sont crées
à chaque exécution de la commande.
c V. Simonnet et A. Terracol, 2014 23
summarize price if price>r(mean)
Attention, l’exécution d’une nouvelle commande efface et remplace les macros r() sau-
vées par les commandes précédentes.
Si l’on souhaite modifier les valeurs d’une variable existante, on utilisera la commande
replace dont la syntaxe est similaire :
replace revenu=0 if revenu<0
recode peut être une alternative à replace où à generate... if.... Par exemple,
pour créer une variable de catégorie d’âge, on pourra taper :
recode age (min/15=1) (15/35=2) (35/55=3) (55/max=4),generate(grage)
Un certain nombre de fonctions mathématiques sont disponibles pour la définition des va-
riables. Parmi elles, on trouve :
— abs() : valeur absolue
— exp() : exponentielle
— ln() : logarithme népérien
— log10() : logarithme décimal
— sqrt() : racine carrée
— int() : partie entière
— round(x,y) : arrondi de x à y près
— sum() somme cumulative de la première observation jusqu’à l’observation courante.
La liste des fonctions disponibles est consultable à l’entrée functions de la rubrique
d’aide en ligne.
Une série d’extensions aux fonctionnalités de generate ont été regroupées sous la com-
mande egen. On peut trouver la liste de ces extensions sous l’entrée egen de la rubrique
24
c V. Simonnet et A. Terracol, 2014
d’aide. Certaines différences plus ou moins subtiles avec generate sont à noter. Par exemple,
alors que la commande
generate newvar=sum(var)
crée la somme courante de la variable var, la commande
egen newvar=sum(var)
crée la somme globale de cette même variable (résultant donc en une constante.) Afin d’éviter la
confusion entre ces deux versions de sum, il est préférable d’utiliser egen ... = total()
. describe a
. encode a, g(b)
. describe b
. su b
c V. Simonnet et A. Terracol, 2014 25
Variable | Obs Mean Std. Dev. Min Max
---------+--------------------------------------------------------
b | 744 1.932796 .2505439 1 2
. ta b
26
c V. Simonnet et A. Terracol, 2014
À partir de trois variables numériques donnant le jour, le mois et l’année, on construit une
variable de date de la façon suivante :
generate madate=mdy(mois,jour,année)
format madate %td
A partir d’une variable caractère strdate présentant une date comme suit : 17jan2001,
17/1/2001, 17.1.2001, 17 01 2001,. . . Stata peut recréer une variable de date :
Le « masque » DMY indique à Stata qu’il faut lire, dans l’ordre, le jour, le mois puis l’année.
Si on ne dispose que d’une date mensuelle (du type 06/2003) dans une variable caractère
strdatemens, on tapera :
Une fois que l’on dispose de variables de dates, on peut en extraire certains éléments
(mois, année, jour de la semaine, semestre etc.) Par exemple, pour savoir à quelle semaine
(de 1 à 52) correspond une date stockée dans la variable datevar, on tapera generate
semaine=week(datevar). Les fonctions autorisées sont les suivantes :
— year() donne l’année
— halfyear() donne le semestre (1 ou 2)
— quarter() donne le trimestre (1 à 4)
— month() donne le mois (1 à 12)
— week() donne la semaine (1 à 52)
— day() donne le jour du mois (de 1 à 31)
— dow() donne le jour de la semaine (0=dimanche à 6=samedi)
— doy() donne le jour de l’année (1 à 366)
Il est également possible de convertir un format de date en un autre. Pour créer une date
mensuelle à partir d’une date journalière, on tapera :
gen date_mens=mofd(date_jour)
Les fonctions de conversion prennent la forme xofy() où x est le format d’arrivée (day,
month, year, etc.) et y le format de départ. Il faut souvent passer par le format %td pour passer
d’un format à un autre (voir le fichier d’aide).
Enfin, on obtient des durées par simple soustraction de variables de dates. Il faut cependant
faire attention à ne soustraire que des variables dans le même format. Si elles ne le sont pas, on
pourra utiliser les fonctions de conversion :
gen duree=date_day_fin-date_day_deb
c V. Simonnet et A. Terracol, 2014 27
gen duree_mens=mofd(date_day_fin)-date_month_deb
2.6.1 merge
La commande merge permet de fusionner des bases de données contenant des variables
différentes, mais correspondant aux mêmes individus. Ces individus doivent être identifiés par
une ou plusieurs variables d’indentifiant ayant le même nom dans les deux bases. La base de
données ouverte lors de l’appel de la commande merge sera nommée master, et celle avec la-
quelle on la fusionne la base using. Les appariements peuvent se faire en one to one si le fichier
master et le fichier using ne contiennent qu’une seule observation par valeur de l’identifiant,
en one to many si le fichier master ne contient qu’une seule observation par valeur de l’iden-
tifiant, mais que le fichier using en contient plusieurs ; ou encore en many to one si le fichier
master contient plusieurs observations par valeur de l’identifiant, et le fichier using une seule.
La syntaxe de la commande est la suivante :
merge <type d’appariement> <variables d’identifiants> using <base
avec laquelle on fait l’appariement>
où le type d’appariement peut être 1:1 pour un appariement one to one, 1:m pour un apparie-
ment one to many ou m:1 pour un appariement many to one.
Par exemple, dans le cas où on dispose d’un fichier contenant des informations sur des mé-
nages (avec un identifiant nommé menage), et une autre avec des informations individuelles
sur les membres de ces ménages, avec pour chaque individu une variable menage contenant
l’identifiant de son ménage, l’appariement de ces deux fichiers pourra se faire de la façon sui-
vante : Si les bases en questions sont basea.dta et
use base_menage.dta, clear
merge 1:m menage using base_indiv.dta
Il existe une option update qui permet de remplacer les valeurs manquantes d’un fichier
avec celles de l’autre, ou de repérer les incohérences entre les deux fichiers
Stata crée une nouvelle variable nommée _merge qui renseigne sur la présence ou non de
l’observation dans chaque base :
En présence d’information incohérentes entre les deux fichiers (_merge=5), Stata retient
par défaut l’information présente dans le fichier maître, sauf si on précise l’option replace,
auquel cas l’information du fichier using sera retenue.
2.6.2 append
S’il s’agit de deux bases contenant les mêmes variables, mais correspondant à des observa-
tions différentes, on utilisera la commande append :
use base1.dta, clear
28
c V. Simonnet et A. Terracol, 2014
TABLE 2.3 – valeurs de _merge
pas d’option
1 observation du fichier maître
2 observation du fichier « using »
3 observation des deux fichiers
avec option
1 observation du fichier maître
2 observation du fichier « using »
3 observation des deux fichiers
4 info manquante en maître, remplacée par info de using
5 info incohérente entre maître et using
c V. Simonnet et A. Terracol, 2014 29
TABLE 2.5 – Format wide
pays pop1996 pop1997 pop1998 pop1999 pop2000
Allemagne 81896 82052 82029 82087 82168
France 59533 59735 59942 60156 60431
Italie 57397 57512 57588 57646 57728
La plupart du temps les données seront sous la forme "long", ce qui est plus pratique pour
travailler avec Stata. Mais parfois vous aurez à faire à des données en "wide", et il vous faudra
les convertir facilement en "long". La commande reshape sera donc particulièrement utile :
reshape long pop, i(pays) j(année)
La commande précédente transforme le tableau 2.5 en tableau 2.4. L’indicatrice i() désigne la
ou les variables que vous souhaitez maintenir dans le format actuel et j() désigne la ou les va-
riables que vous souhaitez transformer en "long". Dans l’exemple précédent, pays est inchangé
puisqu’il était en "long", mais année va être crée avec pop à partir des variables pop1996,
pop1997 etc... Si la variable j() est de format texte (string) alors il faut préciser l’option string.
Si vous souhaitez au contraire passer du format "long" à "wide", il suffit de remplacer long par
wide. Par exemple :
reshape wide pop, i(pays) j(année)
2.8 collapse
La commande collapse transforme la base de données en statistiques essentielles sur celle-ci,
comme en moyenne, somme, médiane... C’est particulièrement utile si vous souhaitez obtenir
une base de données annuelle à partir de données trimestrielles ou mensuelles. Une autre utili-
sation possible est d’obtenir facilement des statistiques dans l’éditeur que vous pouvez copier
dans un tableur (Excel ou autre). Le danger de cette commande est qu’elle efface les données
sources. Il faut donc bien vérifier que vous avez sauvegardé le fichier de données sous un autre
nom auparavant. Prenons l’exemple d’une transformation d’une variable population mensuelle
en population annuelle. La première parenthèse donne le type de transformation (sum=somme ;
mean=moyenne ; sd=écart-type ; median=médianne) puis il faut préciser la variable qui subit la
transformation. Après une virgule et la commande by, entre parenthèses on inclut les variables
qui servent de référence à la transformation ; ici on fait donc la somme de la variable popmois
par pays et par année. Il faut renommer la variable transformée pour qu’elle désigne ensuite ce
qu’elle représente vraiment.
collapse (sum) popmois, by(pays année)
30
c V. Simonnet et A. Terracol, 2014
Notes
c V. Simonnet et A. Terracol, 2014 31
Chapitre 3
3.1 Tests
Un grand nombre de procédures de tests sont possibles avec Stata. Nous n’en présenterons
que quelques uns.
. use births
(Data from 500 births)
. sktest matage
Skewness/Kurtosis tests for Normality
------- joint ------
Variable | Pr(Skewness) Pr(Kurtosis) adj chi2(2) Prob>chi2
-------------+-------------------------------------------------------
matage | 0.033 0.002 12.85 0.0016
. swilk matage
Shapiro-Wilk W test for normal data
Variable | Obs W V z Prob>z
-------------+-------------------------------------------------
matage | 500 0.99087 3.071 2.697 0.00350
. sfrancia matage
c V. Simonnet et A. Terracol, 2014 33
Shapiro-Francia W’ test for normal data
Variable | Obs W’ V’ z Prob>z
-------------+-------------------------------------------------
matage | 500 0.99138 3.096 2.481 0.00655
En plus des tests formels évoqués ci-dessus, Stata permet également de faire des « tests
graphiques » permettant de juger de la proximité de la distribution d’une variable avec celle de la
loi normale. La commande qnorm <nom de variable> trace le graphique des quantiles
de la loi normale contre les quantiles de la distribution empirique de la variable testée. Plus
les points sont proches de la droite à 45◦ , plus proche est sa distribution de la normalité. La
commande pnorm fait de même pour la distribution centrée-réduite de la variable contre la
loi N (0, 1). Si on souhaite effectuer une comparaison avec la loi du χ 2 , on utilisera qchi et
pchi
. use births
(Data from 500 births)
. qnorm bweight
5000 4000
birth weight in grams
2000 3000
1000
34
c V. Simonnet et A. Terracol, 2014
Pour tester l’hypothèse que la moyenne d’une variable est égale à une valeur donnée, on
utilisera ttest <nom de la variable> = <valeur>
. use births
(Data from 500 births)
. sdtest bweight=600
One-sample test of variance
------------------------------------------------------------------------------
Variable | Obs Mean Std. Err. Std. Dev. [95% Conf. Interval]
---------+--------------------------------------------------------------------
bweight | 500 3137.076 28.49556 637.1801 3081.09 3193.062
------------------------------------------------------------------------------
sd = sd(bweight) c = chi2 = 562.7590
Ho: sd = 600 degrees of freedom = 499
Ha: sd < 600 Ha: sd != 600 Ha: sd > 600
Pr(C < c) = 0.9749 2*Pr(C > c) = 0.0501 Pr(C > c) = 0.0251
. ttest bweight=3000
One-sample t test
------------------------------------------------------------------------------
Variable | Obs Mean Std. Err. Std. Dev. [95% Conf. Interval]
---------+--------------------------------------------------------------------
bweight | 500 3137.076 28.49556 637.1801 3081.09 3193.062
------------------------------------------------------------------------------
mean = mean(bweight) t = 4.8104
Ho: mean = 3000 degrees of freedom = 499
Ha: mean < 3000 Ha: mean != 3000 Ha: mean > 3000
Pr(T < t) = 1.0000 Pr(|T| > |t|) = 0.0000 Pr(T > t) = 0.0000
On veut savoir si les moyennes des poids à la naissance diffèrent en fonction de la présence
d’hypertension chez la mère
c V. Simonnet et A. Terracol, 2014 35
On commence par tester l’égalité des variances
. sdtest bweight, by(hyp)
Comme les variances sont différentes, on utilise la forme appropriée du test sur la moyenne
. ttest bweight, by(hyp) unequal
Two-sample t test with unequal variances
------------------------------------------------------------------------------
Group | Obs Mean Std. Err. Std. Dev. [95% Conf. Interval]
---------+--------------------------------------------------------------------
0 | 428 3199.016 28.3452 586.4101 3143.303 3254.73
1 | 72 2768.875 93.14809 790.3877 2583.143 2954.607
---------+--------------------------------------------------------------------
combined | 500 3137.076 28.49556 637.1801 3081.09 3193.062
---------+--------------------------------------------------------------------
diff | 430.1414 97.36538 236.5409 623.7418
------------------------------------------------------------------------------
diff = mean(0) - mean(1) t = 4.4178
Ho: diff = 0 Satterthwaite’s degrees of freedom = 84.6373
Ha: diff < 0 Ha: diff != 0 Ha: diff > 0
Pr(T < t) = 1.0000 Pr(|T| > |t|) = 0.0000 Pr(T > t) = 0.0000
36
c V. Simonnet et A. Terracol, 2014
. median bweight, by(hyp)
Median test
Greater |
than the | hypertens
median | 0 1 | Total
-----------+----------------------+----------
no | 198 52 | 250
yes | 230 20 | 250
-----------+----------------------+----------
Total | 428 72 | 500
Pearson chi2(1) = 16.6147 Pr = 0.000
Continuity corrected:
Pearson chi2(1) = 15.5925 Pr = 0.000
La consommation de carburant de véhicules a été mesurée avec deux types de carburants. Pour
chaque véhicule, on observe la distance parcourue avec une unité de volume de carburant (mpg1
et mpg2) ; et on cherche à savoir si un des deux carburants est plus efficace que l’autre.
. use fuel
. ttest mpg1= mpg2
Paired t test
------------------------------------------------------------------------------
Variable | Obs Mean Std. Err. Std. Dev. [95% Conf. Interval]
---------+--------------------------------------------------------------------
mpg1 | 12 21 .7881701 2.730301 19.26525 22.73475
mpg2 | 12 22.75 .9384465 3.250874 20.68449 24.81551
---------+--------------------------------------------------------------------
diff | 12 -1.75 .7797144 2.70101 -3.46614 -.0338602
------------------------------------------------------------------------------
mean(diff) = mean(mpg1 - mpg2) t = -2.2444
Ho: mean(diff) = 0 degrees of freedom = 11
Ha: mean(diff) < 0 Ha: mean(diff) != 0 Ha: mean(diff) > 0
Pr(T < t) = 0.0232 Pr(|T| > |t|) = 0.0463 Pr(T > t) = 0.9768
c V. Simonnet et A. Terracol, 2014 37
. signrank mpg1=mpg2
Wilcoxon signed-rank test
sign | obs sum ranks expected
-------------+---------------------------------
positive | 3 13.5 38.5
negative | 8 63.5 38.5
zero | 1 1 1
-------------+---------------------------------
all | 12 78 78
unadjusted variance 162.50
adjustment for ties -1.63
adjustment for zeros -0.25
----------
adjusted variance 160.63
Ho: mpg1 = mpg2
z = -1.973
Prob > |z| = 0.0485
Test du χ 2
Le test d’indépendance du χ 2 entre variables catégorielles est obtenu grâce à l’option chi2
de la commande tabulate. L’ajout de l’option exact permet d’obtenir la statistique exacte
(et non asymptotique).
Exemple 8 : Test du χ 2
sex of | hypertens
baby | 0 1 | Total
-----------+----------------------+----------
1 | 221 43 | 264
2 | 207 29 | 236
-----------+----------------------+----------
Total | 428 72 | 500
38
c V. Simonnet et A. Terracol, 2014
différentes variables spécifiées. Cette analyse nous indique le pourcentage de la variance totale
(de la variable expliquée) expliqué par le modèle (à savoir, l’ensemble des variables explicatives
mentionnées) et ce pourcentage est décomposé selon l’apport de chaque variable. Cette analyse
permet d’évaluer le rôle global d’une variable catégorielle sur la variable considérée. On utilise
alors la commande
anova <variable expliquée> <variables explicatives>
Par défaut, les variables explicatives sont supposées catégorielles ou qualitatives. Pour intro-
duire une variable continue dans l’analyse, il faut faire précéder son nom par c..
Exemple 9 : ANOVA
. use sysage
(Systolic Blood Pressure Data)
. anova systolic drug
Number of obs = 58 R-squared = 0.3355
Root MSE = 10.7211 Adj R-squared = 0.2985
Source | Partial SS df MS F Prob > F
-----------+----------------------------------------------------
Model | 3133.23851 3 1044.41284 9.09 0.0001
|
drug | 3133.23851 3 1044.41284 9.09 0.0001
|
Residual | 6206.91667 54 114.942901
-----------+----------------------------------------------------
Total | 9340.15517 57 163.862371
c V. Simonnet et A. Terracol, 2014 39
-------------+----------------------------------------------------
Total | 9340.15517 57 163.862371
Le premier modèle indique que le médicament utilisé a une influence sur le niveau de pres-
sion sanguine. On introduit ensuite la maladie afin de voir si l’effet du médicament reste si on
contrôle pour la maladie. On trouve que cet effet est toujours significatif. On introduit ensuite
l’interaction du médicament et de la maladie pour tenir compte de l’interaction possible entre
ces deux variables. En contrôlant pour l’âge dans le dernier modèle, on constate que l’effet de
la maladie redevient significatif.
40
c V. Simonnet et A. Terracol, 2014
probabilité (ou risque) de survenue de l’événement dans le groupe non exposé au risque, et p1
cette probabilité dans le groupe exposé au risque. Les commandes regroupées dans epitab
permettent de travailler sur les statistiques suivantes :
— Risk difference : p1 − p0
— Risk ratio : pp10
p1 p0
— Odds difference : 1−p 1
− 1−p 0
p1
1−p1
— Odds ratio : p0
1−p0
Si on dispose d’une variable de temps, on pourra également calculer des taux d’incidence.
Ces derniers correspondent au nombre d’événement par unité de temps dans les groupes expo-
sés et non exposés. Si C1 est le nombre de cas d’exposés, et C0 le nombre de cas non exposés,
le taux d’incidence chez les exposés, Ir1 est donné par ∑ C1 ti où ti est le temps chez l’individu
exposés
C1
i. Chez les non exposés, Ir0 = ∑non exposés ti
. On définit alors la différence des taux d’incidence
Ir1
Ir1 − Ir0 , et le ratio des taux d’incidences Ir0
c V. Simonnet et A. Terracol, 2014 41
Attr. frac. ex. | .7319588 | .4757944 .859163 (exact)
Attr. frac. pop | .2439863 |
+-------------------------------------------------
chi2(1) = 19.83 Pr>chi2 = 0.0000
.
. tabodds lowbw hyp
--------------------------------------------------------------------------
hyp | cases controls odds [95% Conf. Interval]
------------+-------------------------------------------------------------
0 | 40 388 0.10309 0.07445 0.14275
1 | 20 52 0.38462 0.22965 0.64416
--------------------------------------------------------------------------
Test of homogeneity (equal odds): chi2(1) = 19.79
Pr>chi2 = 0.0000
42
c V. Simonnet et A. Terracol, 2014
--------------------------------------------------------------------------
agegrp | cases controls odds [95% Conf. Interval]
------------+-------------------------------------------------------------
0 | 13 86 0.15116 0.08436 0.27086
1 | 13 104 0.12500 0.07023 0.22249
2 | 17 113 0.15044 0.09035 0.25050
3 | 17 137 0.12409 0.07496 0.20540
--------------------------------------------------------------------------
Test of homogeneity (equal odds): chi2(3) = 0.48
Pr>chi2 = 0.9224
. cs lowbw hyp
| hypertens |
| Exposed Unexposed | Total
-----------------+------------------------+------------
Cases | 20 40 | 60
Noncases | 52 388 | 440
-----------------+------------------------+------------
Total | 72 428 | 500
| |
Risk | .2777778 .0934579 | .12
| |
| Point estimate | [95% Conf. Interval]
|------------------------+------------------------
Risk difference | .1843198 | .0772494 .2913903
Risk ratio | 2.972222 | 1.848078 4.780157
Attr. frac. ex. | .6635514 | .4588974 .7908019
Attr. frac. pop | .2211838 |
+-------------------------------------------------
chi2(1) = 19.83 Pr>chi2 = 0.0000
c V. Simonnet et A. Terracol, 2014 43
. cs lowbw hyp, by( agegrp)
| hypertens |
| Exposed Unexposed | Total
-----------------+------------------------+------------
low birth weight | 19 40 | 59
gestation period | 2662.969 16314.54 | 18977.51
-----------------+------------------------+------------
| |
Incidence Rate | .0071349 .0024518 | .0031089
| |
| Point estimate | [95% Conf. Interval]
|------------------------+------------------------
Inc. rate diff. | .0046831 | .0013862 .00798
Inc. rate ratio | 2.910064 | 1.591878 5.143278 (exact)
Attr. frac. ex. | .6563649 | .3718112 .8055715 (exact)
Attr. frac. pop | .2113717 |
+-------------------------------------------------
(midp) Pr(k>=19) = 0.0002 (exact)
(midp) 2*Pr(k>=19) = 0.0004 (exact)
44
c V. Simonnet et A. Terracol, 2014
3 | 3.672211 1.115109 10.83264 1.422588 (exact)
-----------------+-------------------------------------------------
Crude | 2.910064 1.591878 5.143278 (exact)
M-H combined | 3.014735 1.724284 5.270959
-------------------------------------------------------------------
Test of homogeneity (M-H) chi2(3) = 2.41 Pr>chi2 = 0.4920
Après l’estimation, la commande rotate permet d’effectuer une rotation des facteurs. À
nouveau, plusieurs méthodes sont disponibles :
— varimax (le défaut) pour des facteurs orthogonaux
— promax pour des facteurs obliques
c V. Simonnet et A. Terracol, 2014 45
. use autofull, clear
(Automobile Models)
46
c V. Simonnet et A. Terracol, 2014
--------------------------------------------------------------------------
LR test: independent vs. saturated: chi2(45) = 721.42 Prob>chi2 = 0.0000
. rotate
Factor analysis/correlation Number of obs = 74
Method: principal factors Retained factors = 2
Rotation: orthogonal varimax (Kaiser off) Number of params = 19
--------------------------------------------------------------------------
Factor | Variance Difference Proportion Cumulative
-------------+------------------------------------------------------------
Factor1 | 4.91107 2.97125 0.6836 0.6836
Factor2 | 1.93983 . 0.2700 0.9536
--------------------------------------------------------------------------
LR test: independent vs. saturated: chi2(45) = 721.42 Prob>chi2 = 0.0000
c V. Simonnet et A. Terracol, 2014 47
--------------------------------------------------------------------------
Factor | Variance Proportion Rotated factors are correlated
-------------+------------------------------------------------------------
Factor1 | 5.90347 0.8217
Factor2 | 3.95191 0.5501
--------------------------------------------------------------------------
LR test: independent vs. saturated: chi2(45) = 721.42 Prob>chi2 = 0.0000
48
c V. Simonnet et A. Terracol, 2014
de ces variables :
Fm = α1m X1 + α2m X2 . . .
On obtient le graphique des scores et des facteurs de charge avec scoreplot et loadingplot
c V. Simonnet et A. Terracol, 2014 49
Component loadings
headroom
.5
Component 2
trunk
mpg
gear_ratio
length
turn
0
displacement
weight
−.5
price
−.4 −.2 0 .2 .4
Component 1
50
c V. Simonnet et A. Terracol, 2014
Notes
c V. Simonnet et A. Terracol, 2014 51
Chapitre 4
Graphiques
Un grand nombre de graphiques peuvent être tracés par Stata. Nous n’en aborderons que
quelques uns.
On peut classer les graphiques en trois grandes catégories :
— Les graphiques permettant une représentation visuelle de statistiques descriptives (moyenne,
médiane, percentile, etc.)
— Les graphiques univariés (portant sur une seule variable)
— Les graphiques multivariés (une variable reliée à une ou plusieurs autres)
Ces types de graphiques ont en commun un certain nombre d’options concernant les titres,
sous-titres, légendes etc.
c V. Simonnet et A. Terracol, 2014 53
Exemple 14 : Graphique de statistiques descriptives (2)
Si on souhaite représenter les mêmes informations que dans l’exemple 13, mais sous forme de
"points sur une ligne", on tapera :
54
c V. Simonnet et A. Terracol, 2014
4.2 Graphiques univariés
Les principaux graphiques univariés sont les suivants :
— histogram pour un histogramme
— kdensity pour une estimation par noyau de la densité
— graph pie pour un graphique "en camembert"
— graph box et graph hbox pour les "boîtes à moustache"
Exemple 15 : Un histogramme
On peut tracer une estimation non-paramétrique de la densité d’une variable avec la com-
mande kdensity <varname>. Le type de noyau utilisé se contrôle avec l’option kern()
et la largeur de la fenêtre avec l’option bwidth
c V. Simonnet et A. Terracol, 2014 55
Les graphiques en « camembert » sont obtenus avec la commande graph pie. Si les
catégories que l’on veut représenter sont représentées par une série de variables indicatrices, on
fait suivre la commande de la liste de ces variables :
graph pie cat1 cat2 cat 3
Si une seule variable catégorielle est présente, on utilise l’option over() :
graph pie , over(categ)
Enfin, si on veut savoir comment se répartit une variable (par exemple une dépense) entre
différentes valeurs d’une variable catégorielle (par exemple des postes de dépenses), on tapera
graph pie cout, over(poste)
Il est possible de faire ressortir une des tranches du camembert grâce à l’option pie(<n◦ de
la tranche> explode) ; et d’indiquer le pourcentage (ou la somme, ou une phrase quel-
conque) correspondant à une tranche particulière avec l’option plabel(<n◦ de la tranche>
<type de label>)
On dispose d’une variable catégorielle trage indiquant l’appartenance à des quartile d’âge.
On peut produire le camembert suivant :
56
c V. Simonnet et A. Terracol, 2014
Enfin, les graphiques en « boîte à moustache » (box and whiskers plot) sont produits par
la command box <varname>. On peut distinguer divers sous-échantillons selon la valeur
de variables catégorielles avec l’option over(varname) (jusqu’à trois variables, dans des
over() différents)
c V. Simonnet et A. Terracol, 2014 57
4.3 Graphiques multivariés
Pour représenter l’évolution d’une (ou de plusieurs) variables en fonction d’une autre, on
utilisera la commande graph twoway (ou tout simplement twoway). Cette commande au-
torise plusieurs types de graphiques, par exemple :
— scatter pour un nuage de points
— line pour obtenir des points reliés entre eux (nécessite de faire un sort sur la variable
en abscisse au préalable)
— lfit pour la prédiction linéaire
— qfit pour la prédiction quadratique
— graph matrix permet de présenter sous forme matricielle une série de nuages de
points de chaque variable en fonction de toutes les autres
On obtient un nuage de point à l’aide de la commande
twoway scatter <liste de variables>
La liste de variables doit en contenir au moins deux. La dernière correspondra à la variable
en abscisses, les autres aux variables en ordonnées (attention à la lisibilité du graphique si on
inclut plusieurs variables en ordonnées). Le type de symbole utilisé se contrôle avec l’option
symbol(). Pour voir une liste des symboles autorisés, taper palette symbol
Nuage de points pour le poids de naissance contre la durée de gestation, on utilise le symbole
du cercle
Si on désire représenter une série de nuages de points pour tous les couples de variables
d’une liste, on utilisera la commande
graph matrix <liste de variables>
58
c V. Simonnet et A. Terracol, 2014
Si on ne veut qu’une moitié de la matrice (qui est « symétrique »), on ajoutera l’option half
On représente l’évolution des espérances de vie des hommes et des femmes depuis 1900 aux
États-Unis. On utilise une ligne pointillée pour les hommes, et pleine pour les femmes
c V. Simonnet et A. Terracol, 2014 59
4.4 Superposition de graphiques
On peut superposer deux (ou plus) graphiques en séparant les commandes par ||, ou en
incluant les commandes entre parenthèses. Si on souhaite représenter le nuage de points des
variables var1 et var2 ainsi que la droite de regression linéaire liant les deux variables, on
tapera :
twoway scatter var1 var2 || lfit var1 var2
ou bien
twoway (scatter var1 var2) (lfit var1 var2)
On peut superposer des graphiques de variables qui ne sont pas mesurées sur la même échelle
en séparant les axes des abscisses grâce aux options yaxis(1) et yaxis(2)
60
c V. Simonnet et A. Terracol, 2014
4.5 Légende, titres etc.
Pour donner un titre aux axes du graphique, on utilise les options xtitle() et ytitle().
Pour l’intitulé du graphique, on utilise l’option title(), et subtitle() pour un sous-titre.
L’exemple suivant indique les divers titres que l’on peut spécifier dans un graphique.
Exemple 23 : Titres
c V. Simonnet et A. Terracol, 2014 61
Pour donner une légende aux variables représentées en ordonnée on utilise l’option legend(label(1
"legende1") label(2 "legende2"))
En utilisant l’option name(), on peut créer plusieurs fenêtres de graphiques simultanément.
Pour sauvegarder un graphique, on utilisera la commande graph save
Pour un guide des graphiques Stata, voir Mitchell (2004) et les liens donnés en section 1.3
sysuse uslifeexp,clear
generate ratio=le_female/le_male
label var ratio "female/male ratio"
twoway (line le year, yaxis(1) xaxis(1 2) sort) ///
(line ratio year, sort yaxis(2) ///
ylabel(40(10)80, axis(1) angle(horizontal) ///
grid gstyle(major) glcolor(black) glwidth(thin) nogmax) ///
ytick(25, axis(1) notick) ///
ylabel( 1(0.05)1.15 , angle(horizontal) labsize(small) axis(2) ///
grid gstyle(major) glcolor(black) glwidth(thin)) ///
ytick(2, axis(2) notick)) ///
, scheme(s2mono) graphregion(color(white) lwidth(thick)) ///
xlabel(1918, axis(1)) xtitle("", axis(1)) ///
title(US life expectancy) subtitle(1900-2000) ///
note(note: 1918 dip due to influenza pandemic)
62
c V. Simonnet et A. Terracol, 2014
c V. Simonnet et A. Terracol, 2014 63
Notes
64
c V. Simonnet et A. Terracol, 2014
Chapitre 5
Estimation
5.1 Généralités
La plupart des commandes d’estimation de Stata ont une structure commune dont la syntaxe
est la suivante :
commande <var. dep> <liste des vars indep.>, options
Pour toutes les commandes d’estimations, les conditions if et in peuvent être spécifiées, et les
observations peuvent être pondérées en ajoutant [weight=<variable de pondération>]
à la commande.
Après avoir effectué l’estimation, un certain nombre de prédictions peuvent être effectuées
avec la commande predict. La liste des prédictions autorisées varie selon l’estimation effec-
tuée, et peut être consultée dans la rubrique d’aide de la commande d’estimation utilisée.
Les tests de contrainte linéaires sur les paramètres se font avec la commande test.
On peut accéder au vecteur des paramètres estimés β̂ qui est stocké dans la macro e(b),
ainsi qu’à la matrice de variance-covariance stockée dans e(V). On peut également accéder aux
paramètres et écart-types estimés de chaque variable individuellement, qui sont stockés dans les
macros internes _b[variable] et _se[variable]. Pour la constante, on remplace le nom
de la variable par _cons
De façon générale, et comme pour les commandes de description de données vues précé-
demment, les commandes d’estimation stockent un certain nombre de résultats dans des macros
e() dont on peut obtenir la liste à l’aide de la commande ereturn list :
. regress price mpg weight
Source | SS df MS Number of obs = 74
---------+------------------------------ F( 2, 71) = 14.74
Model | 186321280 2 93160639.9 Prob > F = 0.0000
Residual | 448744116 71 6320339.67 R-squared = 0.2934
---------+------------------------------ Adj R-squared = 0.2735
Total | 635065396 73 8699525.97 Root MSE = 2514
--------------------------------------------------------------------------
price | Coef. Std. Err. t P>|t| [95% Conf. Interval]
---------+----------------------------------------------------------------
mpg | -49.51222 86.15604 -0.57 0.567 -221.3025 122.278
weight | 1.746559 .6413538 2.72 0.008 .467736 3.025382
_cons | 1946.069 3597.05 0.54 0.590 -5226.245 9118.382
--------------------------------------------------------------------------
c V. Simonnet et A. Terracol, 2014 65
. ereturn list
scalars:
e(N) = 74
e(df_m) = 2
e(df_r) = 71
e(F) = 14.73981538538409
e(r2) = .2933891231947527
e(rmse) = 2514.028573297152
e(mss) = 186321279.7394509
e(rss) = 448744116.3821706
e(r2_a) = .2734845914537599
e(ll) = -682.8636883111165
e(ll_0) = -695.7128688987767
macros:
e(title) : "Linear regression"
e(depvar) : "price"
e(cmd) : "regress"
e(properties) : "b V"
e(predict) : "regres_p"
e(model) : "ols"
e(estat_cmd) : "regress_estat"
matrices:
e(b) : 1 x 3
e(V) : 3 x 3
functions:
e(sample)
<output ommited>
<output ommited>
<output ommited>
66
c V. Simonnet et A. Terracol, 2014
<output ommited>
----------------------------------------------
Variable | reg1 reg2
-------------+--------------------------------
mpg | -49.512221 -72.865012
weight | 1.7465592** 3.5243386***
turn | -395.19019**
_cons | 1946.0687 12744.244**
----------------------------------------------
legend: * p<0.05; ** p<0.01; *** p<0.001
Enfin, les effets marginaux ainsi que les élasticités peuvent être calculés avec la commande
mfx compute
sous Stata 10 et les versions antérieures, et avec la commande margins depuis Stata 11.
c V. Simonnet et A. Terracol, 2014 67
— i.var1*i.var2 : inclut toutes les indicatrices pour les différentes valeurs de var1
et var2, ainsi que les termes d’interactions entre ces catégories.
Par défaut, Stata omet l’indicatrice de catégorie la plus représentée. Il est possible de changer
ce comportement à l’aide de la commande char ... [omit]...
Par exemple, si vous voulez que la catégorie exclue soit celle de niveduc=1, vous taperez
char niveduc[omit] 1
5.2.2 Stata 11
Stata 11 a éliminé la nécessité de spécifier le préfixe xi:, et la syntaxe a été légèrement
modifiée. Pour introduire automatiquement les différents niveaux d’une variable catégorielle,
on fera précéder son nom du préfixe i. (comme dans les versions de Stata plus anciennes).
Les interactions seront spécifiées avec # et ##. Les variables devant être traitées comme des
variables continues seront indiquées par le préfixe c.
Par exemple, la commande
regress wage i.niveduc
inclura automatiquement les différents niveaux de la variable de niveau d’éducation dans la
régression. La commande
regress wage i.niveduc#c.age
inclura les niveaux d’éducation croisés avec la variable continue d’âge. Attention, écrire
i.niveduc#age
produira les croisements des niveaux de la variable d’éducation avec les niveaux de la variable
d’âge, qui sera donc considérée comme une catégorielle !
Si on souhaite introduire les variables telles qu’elles en plus de leurs interactions, on mettra
## au lieu de # :
regress wage i.niveduc##c.age
effectue la régression de wage sur les niveaux de niveduc, sur age ainsi que sur les croise-
ments de ces derniers.
On peut se servir de ces opérateurs pour inclure des puissances de variables explicatives
sans avoir à les générer. Par exemple,
regress wage c.age##c.age##c.age
effectue une régression de wage sur age, age au carré et age au cube.
Il est également possible de choisir de n’inclure qu’un seul niveau de la variable catégorielle,
en faisant suivre i. par le niveau en question. Par exemple,
regress wage i2.niveduc
inclura dans la régression une seule indicatrice pour niveduc=2.
Il est également possible de spécifier la catégorie de référence avec le préfixe ib#. (où #
est un chiffre) au lieu de i.. Par exemple,
regress wage ib4.niveduc
prendra comme catégorie de référence le niveau d’éducation valant 4. Si l’on veut que la se-
conde catégorie dans l’ordre croissant soit la catégorie de référence, on utilisera ib(#2).niveduc.
Si l’on veut que la dernière catégorie soit la catégorie de référence, on tapera ib(last).niveduc.
68
c V. Simonnet et A. Terracol, 2014
Enfin, il est possible d’appliquer ces opérateurs à tout un groupe de variables en réunissant
ces dernières dans un jeu de parenthèses. Par exemple,
regress wage i.niveduc##(c.age c.experience)
est équivalent à
regress wage i.niveduc##c.age i.niveduc##c.experience
5.3.2 MCG
On peut tester l’hypothèse d’homoscedasticité des résidus à l’aide du test de Breush-Pagan
avec la commande estat hettest après avoir estimé le modèle. Stata peut également tracer
un graphique des résidus contre la variable prédite afin d’effectuer une détection « visuelle » de
l’hétéroscédasticité à l’aide de la commande rvfplot (residuals versus fitted plot)
En présence d’hétéroscédasticité, il convient d’ajouter l’option robust afin d’appliquer la
correction de White à la matrice de variance-covariance des résidus :
regress y x1 x2, robust
c V. Simonnet et A. Terracol, 2014 69
5.4 Variables instrumentales
Le traitement de l’endogénéité d’une variable explicative par la méthode des variables ins-
trumentales se fait à l’aide de la commande ivregress. Trois méthodes sont proposées : les
doubles moindres carrés (2sls), le maximum de vraisemblance à information limitée (liml)
et la méthode des moments généralisée (gmm). En notant varlist1 la liste des variables
exogènes, varlist2 les variables endogènes, et varlist_iv la liste des instruments, l’es-
timation par variables instrumentales s’écrit :
ivregress <méthode> varlist1 (varlist2 = varlist_iv)
où méthode est soit 2sls, soit liml soit gmm. Si l’option gmm est spécifiée, on peut spécifier
le type de matrice de poids désiré via l’option wmatrix.
Après une estimation par variables instrumentales, on peut effectuer un test d’endogé-
néité avec la commande estat endoenous ; et un test de suridentification avec estat
overid.
5.5 Tests
La commande test permet de tester des hypothèses de contraintes linéaires sur les coeffi-
cients. Imaginons que l’on fasse l’estimation suivante :
y = β0 + β1 x1 + β2 x2 + β3 x3 + ε
Des tests d’hypothèses non-linéaires (e.g. un test de l’hypothèse exp(β1 ) = 0) peuvent être
effectuées avec la commande testnl :
testnl exp(_b[x1])=0
Notez que la commande testnl, au contraire de test, nécessite que l’on spécifie le
coefficient à tester sous la forme _b[varname]
70
c V. Simonnet et A. Terracol, 2014
Avant d’utiliser ces commandes, il est judicieux d’indiquer à Stata quelle est la variable
identifiant les individus, et, éventuellement, quelle est la variable indiquant le temps. Cela se
fait à l’aide de la commade tsset :
tsset <variable d’identifiant> <variable de temps>
Alternativement, on peut utiliser les commandes iis et tis :
iis <variable d’identifiant>
tis <variable de temps>
Il est toutefois possible d’indiquer ces variables à Stata à l’aide des options i() et t() lorsque
vous taperez la commande.
xtsum et xttab permettent d’obtenir des statistiques descriptives intra et inter-individuelles.
Pour estimer un modèle en données de panel, on utilise la commande
xtreg y x1 x2, option
. Le type de modèle est déterminé par l’option utilisée, par exemple fe pour le modèle à effets
fixes, et re pour le modèle à effets aléatoires.
1. L’autre possibilité pour estimer un modèle à effets fixes est d’intégrer des variables indicatrices pour chaque
individu, voir areg. On peut également avoir recours à l’estimateur de Hausman-Taylor, xthtaylor lorsqu’on
doit intégrer dans les variables explicatives des variables invariantes au fil du temps. Pour estimer un modèle à
effets fixes en utilisant des variables instrumentales, voir xtivreg, fe
c V. Simonnet et A. Terracol, 2014 71
Le test de Breush-Pagan (xttest0) teste la significativité des effets aléatoires. La com-
mande xttest1 permet d’obtenir plusieurs les résultats de plusieurs tests classiques à ef-
fectuer après le modèle à effets aléatoires (test de Breush-Pagan, test de Baltagi-Li (1995) de
corrélation sérielle d’ordre 1, le test joint de Baltagi-Li (1991) de corrélation sérielle et d’effets
aléatoires, etc...).
Le test d’autocorrélation sérielle au premier ordre des résidus peut s’effectuer grâce à la
commande xtserial y x1 x2.
Dans le cadre des données de panel, si on veut tester l’hypothèse nulle d’effets aléatoires
(c’est à dire de non-corrélation des effets individuels et des régresseurs), on va utiliser le modèle
à effet fixes comme modèle consistent dans tous les cas, et le modèle à effets aléatoires comme
modèle consistent et efficient sous H0, mais non consistent sous l’hypothèse alternative. On
tapera alors :
xtreg y x1 x2 x3, fe
estimate store fixed
xtreg y x1 x2 x3, re
estimate store random
hausman fixed random
72
c V. Simonnet et A. Terracol, 2014
tique. Des variables indiquant un classement peuvent également être utilisées dans le cadre des
modèles ordonnés.
La commande logit permet de reporter les « odd ratios » plutôt que les coefficients en
ajoutant l’option or :
logit y x1 x2 x3, or
On peut également obtenir les effets marginaux issus de l’estimation probit en utilisant
dprobit :
dprobit y x1 x2 x3
c V. Simonnet et A. Terracol, 2014 73
5.8 Modèles à sélection endogène
Lorsque l’échantillon sur lequel on souhaite effectuer ses analyses est lui même issu d’un
processus qui n’est pas indépendant de celui que l’on veut analyser, alors on fait face à un
problème de sélection endogène. Par exemple, lorsque l’on souhaite étudier les déterminants
du salaire, l’échantillon des individus travaillant est auto-sélectionné car seuls ceux dont les
caractéristiques permettent d’avoir un salaire plus élevé travailleront, et seront donc observés.
En 1979, Heckman a proposé une solution pour corriger le biais résultant de cette sélection
endogène. Il s’agit de spécifier que le processus de sélection dans l’échantillon est lié à celui
que l’on étudie via une corrélation entre leurs termes d’erreurs (supposés suivre une loi normale
bivariée). On implémente cette méthode avec la commande heckman. En notant varlist1
la liste des variables explicatives de l’équation d’intérêt, et varlist2 la liste des variables
influençant le processus de sélection, on tapera :
heckman <variable dépendante> <varlist1>, select(<varlist2>)
Notez que l’échantillon utilisé doit contenir des personnes pour lesquelles la variable dépen-
dant est observée, et d’autres pour lesquelles elle ne l’est pas. Pour ces derniers, la variable
dépendante doit être codée comme manquante. Enfin, la variable dépendant doit être continue.
On peut indiquer à Stata d’implémenter la méthode en deux étapes (avec introduction du
ratio de Mills) avec l’option twostep.
Après l’estimation, la commande predict permet de spécifier une série de prédictions, en
particulier l’espérance conditionnelle de la variable dépendante, sachant que l’individu participe
au processus étudié (option ycond).
74
c V. Simonnet et A. Terracol, 2014
. Si on a un échantillon tiré dans le stock, et que la variable indiquant le temps passé avant
l’entrée en observation est dstock, on tapera
stset dur, fail(exit) enter(dstock)
Si vos données indiquent les dates de début (begin) et de fin (end) d’épisodes, on utilisera
l’option origin() qui permet d’indiquer quand l’individu devient à risque. on fera alors la
déclaration suivante :
stset end, fail(exit) origin(begin)
Lors de la déclaration des données de durée, Stata crée quatre variables qui lui serviront
dans son analyse :
— _st vaut 1 si l’observation doit être utilisée, et 0 sinon
— _t0 indique le moment du début d’observation
— _t indique le moment de fin d’observation
— _d vaut 1 si la durée est complète, et 0 sinon
Une fois la déclaration effectuée, la commande stgen permet la création de variables de
façon plus aisée. De même, la commande stfill permet le « remplissage » de certaines
variables au cours d’un épisode pour un individu donné.
5.9.2 Estimation
Stata propose une large gamme d’estimateurs pour les données de durée.
Estimateurs non-paramétriques
On peut également tracer le graphique de la fonction de hasard intégré avec l’option na.
Pour lister les valeurs de la fonction de survie ou du hasard intégré, on utilisera la commande
sts list qui a la même syntaxe que sts graph.
Enfin, on peut générer des variables contenant les valeurs de la fonction de survie, de hasard
ou de hasard intégré avec la commande sts gen <nom de variable> = <type> où
le type peut être s si on veut la survie, na si on veut le hasard intégré, haz si on veut le hasard.
Enfin, on peut tester l’égalité des fonctions de survie entre deux sous-échantillons avec la
commande sts test : la commande
sts test, by(sexe)
testera l’égalité de la fonction de survie entre les hommes et les femmes.
c V. Simonnet et A. Terracol, 2014 75
Estimation de modèles
L’estimation d’un modèle de Cox à hasard proportionnel se fait avec la commande stcox
suivi de la liste des variables explicatives et des options. Parmi ces dernières, nohr permet
l’affichage direct des paramètres estimés, et non pas du ratio de hasard correspondant.
Les modèles paramétriques sont estimés à l’aide de la commande streg, où l’on va préci-
ser la forme que doit prendre la fonction de hasard de base grâce à l’option dist(). Les distri-
butions autorisées sont exponential, weibull, lognormal, loglogistic, gamma,
gompertz.
La forme paramétrique (hasard proportionnel ou temps accéléré) est déterminé par la loi que
l’on a choisi pour le hasard de base. Le tableau 5.1 donne quelques unes de ces lois.
76
c V. Simonnet et A. Terracol, 2014
TABLE 5.1 – Quelques lois usuelles
Loi Hasard Survie Paramétrisation Métrique
Exponentielle λ e−λt λ = exp (Xβ ) PH/AFT
α−1 −λt α
Weibull λαt e λ = exp (Xβ ) PH/AFT
ln(t)−µ
φ
1 − Φ ln(t)−µ
σ
Log-normale
ln(t)−µ σ µ = Xβ AFT
1−Φ σ
1 1 −1
1
γ γ
Log-logistique λ t λ = exp (−Xβ ) AFT
1 1
γ 1+(λt) γ γ 1+(λt) γ
c V. Simonnet et A. Terracol, 2014 77
Notes
78
c V. Simonnet et A. Terracol, 2014
Chapitre 6
Programmation
Lorsque Stata rencontre une macro dans une commande, il la remplace par son contenu. Par
exemple, si on a :
local i=10
...
su if age==‘i’
c V. Simonnet et A. Terracol, 2014 79
6.2 macros numériques
On les initialise en leur donnant un nom et une valeur de départ : local i=1
On pourra par la suite changer leur valeur ou effectuer des opérations les utilisant :
local i=1
...
local i=‘i’+1
...
gen a‘i’=a*‘i’ ...
local i "Contenu"
...
display "‘i’"
...
Une application utile est la définition une fois pour toutes d’un chemin d’accès à des fichiers
(on utilise alors plutôt des macros globales) :
6.4 Boucles
On utilise des boucles afin d’éviter d’avoir à écrire plusieurs fois la même commande ou
lorsque les commandes à effectuer ne diffèrent que par un paramètre.
80
c V. Simonnet et A. Terracol, 2014
2 Donner la condition d’arrêt 1 et ouvrir une accolade
3 Donner la série de commandes à effectuer
4 Incrémenter la macro et fermer l’accolade
Si on veut créer les puissances de 2 à 10 de la variable salaire, les nommer sal2 à sal10,
et simultanément diviser ces puissances par les entiers de 2 à 5, et créer les variables sal2d2
à sal10d5, on écrira :
local i=2
while ‘i’<=10 {
gen sal‘i’=salaire^‘i’
local j=2
1. En fait, la "condition d’arrêt" s’apparente plus à une condition de "continuation" : elle va être de la forme
"tant que ... fait..." ;
c V. Simonnet et A. Terracol, 2014 81
while ‘j’<=5 {
gen sal‘i’d‘j’=sal‘i’/‘j’
local j=‘j’+1
}
local i=‘i’+1
}
Exemple 26 : foreach
Exemple 28 : forvalues
82
c V. Simonnet et A. Terracol, 2014
Exemple 29 : forvalues (2)
Après avoir fait exécuter ce code à Stata, on peut appeler le programme en tapant helloworld
Si on veut spécifier des arguments qui seront utilisés par la commande, on utilise syntax,
qui permet de spécifier les types d’arguments que Stata doit recevoir pour exécuter la com-
mande. On peut indiquer que Stata doit recevoir une liste de variable (varlist), un nom de
variable (varname), une option (à spécifier entre crochets), etc. (voir l’aide pour syntax).
Lorsque la commande est appelée, chaque élément de la syntaxe est stockée dans une macro
locale du même nom. Ansi, si le premier élément de la syntaxe est varlist, la liste de va-
riable spécifiée par l’utilisateur sera stockée dans la macro locale ‘varlist’ (en fait, tous les
arguments contenant une liste de variables seront stockés dans ‘varlist’, même si on avait
spécifié varname ou encore newvarlist).
L’exemple suivant définit la syntaxe d’une commande qui va créer les logarithmes népériens
de chaque variable qu’on lui indique :
c V. Simonnet et A. Terracol, 2014 83
quietly generate ln‘word’=ln(‘word’)
}
end
Pour faire en sorte que la commande que vous avez programmé soit accessible à tout mo-
ment, il faut l’enregistrer dans un fichier .ado dont le nom reprend le nom de la commande (par
exemple creeln.ado pour l’exemple ci-dessus) ; et le placer dans le répertoire "PERSONAL"
indiqué lorsqu’on tape la commande sysdir 2 .
• la méthode d0, est similaire à la précédente, mais permet d’utiliser plusieurs observations
pour construire la contribution à la vraisemblance (utile pour les estimateurs de panel).
Les étapes de la création d’un programme de maximisation de vraisemblance sont les sui-
vantes :
2. Repérer le nombre d’équations que cette fonction comprend (un paramètre auxiliaire tel
qu’un écart-type ou un coefficient de corrélation est considéré comme une équation à
part).
84
c V. Simonnet et A. Terracol, 2014
La programmation en elle même se fait dans un programme Stata commençant par program
define “ nom du programme ” et se terminant par end. Les étapes indispensables sont :
1. Donner les arguments du programme qui seront ensuite stockés dans des macros locales.
ils comprennent obligatoirement : lnf qui va correspondre à la contribution à la fonc-
tion de log-vraisemblance ; et un nom de macro par équation (on peut leur donner le
nom qu’on veut).
3. Repérer le nombre de variables dépendantes (généralement une seule) qui seront ensuite
nommée $ML_y1, $ML_y2...
Ne pas oublier de faire précéder les commandes de quietly afin de ne pas surcharger la fe-
nêtre d’output.
puis, éventuellement
et enfin :
ml maximize 6
Un exemple étant toujours plus parlant, nous allons maintenant programmer un probit dans
l’exemple 32.
3. lf, d0, d1 ou d2
4. On peut y ajouter l’option noconstant (après une virgule) qui supprime la constante de l’équation.
5. On peut aussi inclure ml search pour rechercher de meilleures valeurs initailes, ou ml init pour spé-
cifier des valeurs initiales
6. Éventuellement suivi des options difficult ou trace, voir Gould et al. (2006)
c V. Simonnet et A. Terracol, 2014 85
Exemple 32 : Programmation d’un probit
où Y est la variable dépendante (égale à 0 ou 1), X est le vecteur des variables explicatives et β
le vecteur des paramètres à estimer.
Comme il n’est pas possible d’identifier σ , on le pose à 1, et on écrit la fonction de log-
vraisemblance comme :
ln (Φ (Xβ )) si Y = 1
LL =
ln (Φ (−Xβ )) si Y = 0
Étudions maintenant cette fonction :
On va maintenant utiliser notre programme pour estimer un probit sur la base auto.dta
fournie avec Stata.
Nous allons maintenant programmer une estimation linéaire, exemple plus complexe car elle
comprends deux équations (Xβ et σ ).
86
c V. Simonnet et A. Terracol, 2014
Exemple 33 : Estimation linéaire
Petit « truc » : comme σ ne peut être négatif, on va faire estimer son logarithme à Stata en
spécifiant son exponentielle dans l’écriture de la vraisemblance. Cette méthode assure que Stata
utilise bien un nombre positif dans ces calculs (sinon ça n’a pas de sens), il ne nous restera plus
ensuite qu’à recalculer la vraie valeur de paramètre en passant ln (σ ) à l’exponentielle, il faudra
également recalculer l’écart-type grâce à la Delta-méthode.
ml maximize
c V. Simonnet et A. Terracol, 2014 87
6.10.1 Monte-Carlo
Afin d’effectuer des simulations de Monte-Carlo, il faut au préalable écrire un programme
contenant le processus générateur de données, ainsi que le calcul des statistiques auxquelles
on s’intéresse. Le programme devra être de type « rclass » afin de pouvoir sauver les ré-
sultats (commande return scalar <nom du scalaire> = <statistique>) que
l’on souhaite dans des macros que l’on pourra ensuite appeler (sous le nom de r(<nom du
scalaire>)). On exécute ensuite ce programme un grand nombre de fois avec la commande
simulate qui va ensuite créer une base de donnée regroupant les statistiques d’intérêt pour
chaque réplication :
simulate <stockage des r() dans des variables>, reps(<nombre de
réplications>) : <appel du programme>
On peut maintenant étudier les 1000 observations (une par réplication) des variables contenant
les paramètres estimés par les MCO.
Pour vérifier que le paramètre de la constante β̂0 est bien distribué selon une loi normale
centrée sur la vraie valeur β0 (1 dans notre exemple), on tapera par exemple :
kdensity beta0, xline(1) norm
et on obtiendra le graphique suivant :
88
c V. Simonnet et A. Terracol, 2014
4
3
Density
21
0
.6 .8 1 1.2 1.4
r(beta0)
6.10.2 Bootstrap
Un certain nombre de commandes admettent une option vce(bootstrap) permettant de
calculer la matrice de variance-covariance à l’aide de la méthode du bootstrap.
On peut également bootstaper toute commande, y compris celles écrites par l’utilisateur à
l’aide de la commande bootstrap :
bootstrap <liste de statistiques>, reps(<nombre de tirages>) :
<appel de la commande>
Si on souhaite bootstraper les coefficients d’une régression, il est inutile de spécifier la liste de
statistiques :
bootstrap, reps(100) : regress y x1 x2
Si on souhaite bootstraper la différence entre les coefficients de x1 et de x2, on tapera :
bootstrap diff=(_b[x1]-_b[x2]), reps(100) : regress y x1 x2
c V. Simonnet et A. Terracol, 2014 89
Notes
90
c V. Simonnet et A. Terracol, 2014
Bibliographie
G OULD , W., P ITBLADO , J. et S RIBNEY, W. (2006). Maximum likelihood estimation with Stata.
Stata Press, 3rd édition.
UCLA ACADEMIC T ECHNOLOGY S ERVICES (2006). « Regression with Stata ». Web book.
http ://www.ats.ucla.edu/stat/stata/webbooks/reg/default.htm.
91