Vous êtes sur la page 1sur 91

F ORMATION À S TATA 11

N OTES DE COURS

V ÉRONIQUE S IMONNET ET A NTOINE T ERRACOL


Table des matières

Liste des exemples 6

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

2 Gestion des données 19


2.1 Types de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.1.1 Variables numériques et alphanumériques . . . . . . . . . . . . . . . . 19
2.1.2 Valeurs manquantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2 Labels, notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2.1 Labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2.2 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.3 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.3.1 Les principales commandes . . . . . . . . . . . . . . . . . . . . . . . . 21
2.3.2 Résultats sauvegardés . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.4 Création et modification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.4.1 Création de variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.4.2 Changer de format . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.4.3 Supprimer des données . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.5 Les variables de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

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

3 Procédures statistiques courantes 33


3.1 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.1.1 Tests sur une seule variable . . . . . . . . . . . . . . . . . . . . . . . . 33
3.1.2 Tests sur plusieurs variables . . . . . . . . . . . . . . . . . . . . . . . 37
3.2 Analyse de la variance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.3 Tables d’épidémiologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.3.1 Quelques définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.3.2 Commandes Stata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.4 Analyse de facteurs et analyse en composantes principales . . . . . . . . . . . 45
3.4.1 Analyse de facteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.4.2 Analyse en composantes principales . . . . . . . . . . . . . . . . . . . 48

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

1 Commentaires dans un fichier .do . . . . . . . . . . . . . . . . . . . . . . . . . . . 16


2 Un exemple de session Stata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3 Tests de normalité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4 Tests graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5 Tests sur l’écart-type et sur la moyenne . . . . . . . . . . . . . . . . . . . . . . . . 35
6 Tests sur deux sous-populations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
7 Tests sur données appariées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
8 Test du χ 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
9 ANOVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
10 Tables d’épidémiologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
11 Analyse de facteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
12 Analyse en composantes principales . . . . . . . . . . . . . . . . . . . . . . . . . . 49
13 Graphique de statistiques descriptives . . . . . . . . . . . . . . . . . . . . . . . . . 53
14 Graphique de statistiques descriptives (2) . . . . . . . . . . . . . . . . . . . . . . . 54
15 Un histogramme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
16 Estimation de densité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
17 Un graphique en camembert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
18 Boîte à moustache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
19 Nuage de points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
20 Matrice de nuages de points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
21 Graphique reliant les observations . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
22 Deux axes des abscisses différents . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
23 Titres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
24 Utilisation des options avancées . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
25 Création de variables en chaîne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
26 foreach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
27 foreach (2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
28 forvalues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
29 forvalues (2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
30 Hello world . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
31 Utilisation de syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
32 Programmation d’un probit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
33 Estimation linéaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
34 Propriétés des MCO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

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 .

1.1 Les fenêtres de Stata


La figure 1.1 présente les quatres fenêtres principales de Stata, numérotées de 1 à 4.
1. La fenêtre « Stata Results » dans laquelle s’affichent les résultats des commandes
2. La fenêtre « Stata Command » dans laquelle on tape les instructions
3. La fenêtre « Review » qui indique toutes les commandes effectuées au cours de la ses-
sion. Cliquer sur un des éléments de la fenêtre la fait apparaître à nouveau dans la fenêtre
de commandes (attention, cela n’annule pas les éventuelles modifications de la base de
données effectuées entretemps).
4. La fenêtre « Variables » qui liste toutes les variables contenues dans la base de don-
née, ainsi que leurs éventuels labels. Cliquer sur le nom d’une de ces variables la fait
apparaître dans la base de donnée.

1. La commande set memory permet cet ajustement, voir infra.


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.

1.3 Stata sur le web


Le site officiel de Stata (http://stata.com/) contient de nombreuse ressources utiles
aux utilisateurs débutants comme avertis. Notons entre autre :
— la faq : http://stata.com/support/faqs/
— les archives de la mailing list : http://stata.com/statalist/
— la page des graphiques : http://stata.com/capabilities/graphexamples.
html
— des exemples de codes pour des graphiques simples : http://stata.com/support/
faqs/graphics/gph/statagraphs.html
— Les bases de données utilisées dans les exemples des manuels et des fichiers d’aide :
http://www.stata-press.com/data/r11/

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/

1.4 Personnalisation et mise à jour


1.4.1 Personnalisation
La mémoire allouée par défaut par Stata à la base de donnée est de 1 Mo (peut varier selon les
versions de Stata). Cela est parfois insuffisant, et il convient alors d’augmenter la taille de cette
mémoire en utilisant la commande set memory, suivie de la taille de la mémoire souhaitée, et
éventuellement de l’option permanent si on veut voir ce réglage effectué à chaque démarrage
de Stata. On tapera par exemple
set memory 20m, permanent
pour allouer de façon « permanente » 20 Mo de mémoire à la base de donnée.

1.4.2 Mise à jour


Pour chaque version de Stata, des mises à jour sont régulièrement disponibles (gratuite-
ment). On peut s’informer de la disponibilités de ces mises à jour en tapant
update query
et en se laissant guider par les instructions.


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

1.5 Commandes et ensemble de commandes


1.5.1 Syntaxe générale
La syntaxe générale d’une commande se présente comme suit :
commande [varlist] [if exp] [in range] [weight] [, options]

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]

où les options possibles sont :


— detail
— meanonly
— format
— separator(#)
Lorsqu’une partie d’une commande ou d’une option est soulignée, cela indique la syn-
taxe minimale pour la commande ou l’option. On pourra donc écrire indifféremment su, sum,
summ, summa,..., summarize
Le fait que varlist soit entre crochets indique qu’il n’est pas nécessaire de préciser une
liste de variables (idem pour if et in). La commande sera alors effectuée sur toute les variables
de la base.
Les options pour cette commande ont les effets suivants :
— detail permet d’ajouter des statistiques telles que les quantiles, et les moments d’ordre
3 et 4.
— meanonly permet de ne calculer que les moyennes et statistiques liées (somme, nombre
d’observations...). Cette option supprime l’affichage des résultats, mais les stocke dans
des macros réutilisables (voir la section 2.3.2).
— format utilise le format d’affichage spécifique des variables
— separator(#) trace une ligne toutes les # variables
Pour obtenir des statistiques détaillées sur l’ensemble des variables de la base de données,
on pourra taper

2. Ces commandes ne sont donc pas « garanties » par StataCorp.

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)

1.5.2 by, bysort


Un certain nombre de commandes sont dites « by-able », c’est-à-dire qu’elles peuvent être
effectuées pour différents sous-groupes de la base de données, identifiés par les valeurs d’une
ou de plusieurs variables. Pour que ces commandes soient effectuées séparément pour chacun
des groupes, il faut lui rajouter le préfixe by suivi du nom de la ou des variables identifiant
les groupes. Par exemple, si l’on dispose d’une variable sexe identifiant les hommes et les
femmes, et que l’on souhaite obtenir des statistiques descriptives concernant une variable age
en séparant les sexes, on tapera :
by sexe : summarize age
Si on veut également des résultats séparés par sexe et par région, on tapera :
by sexe region : su age

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.

TABLE 1.1 – Opérateurs logiques


== égal à
!= ou ∼= différent de
> supérieur à
< inférieur à
>= supérieur ou égal à
<= inférieur ou égal à
& et
| ou

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>

Ainsi, 0(2)8 est équivalent à la liste « 0, 2, 4, 6, 8 » ; 100(-25)0 est équivalent à « 100,


75, 50, 25, 0 », et ainsi de suite.

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

1.6 Ouverture de bases de données


1.6.1 Les bases en format Stata
Les bases de donnée en format Stata portent l’extension .dta. Pour les charger en mémoire,
on peut soit utiliser le menu déroulant (File/Open) ou l’icône correspondante et rechercher
la base dans l’arborescence, soit utiliser la commande use :
use C:/Stata/auto.dta
Si une base est déjà chargée en mémoire, il convient d’utiliser l’option clear afin de préciser
que l’on désire effectivement changer de base de donnée :
use C:/Stata/auto.dta, clear

1.6.2 Les autres formats


Excel
Les bases sous Excel peuvent être directement copiées-collées sous Stata sous les conditions
suivantes :
— La première ligne du fichier contient les noms de variables
— chacune des lignes suivantes correspond à une observation
— le séparateur décimal soit le point, et non la virgule
Pour ouvrir l’éditeur de Stata afin d’y coller les données, on peut taper
edit
ou cliquer sur l’icône « Data editor » .

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.

1.7 Fichiers .do et fichiers .log


Lorsque l’on souhaite effectuer une série complexe d’opérations, ou tout simplement lorsque
l’on veut conserver les différentes étapes de son travail, il est conseillé d’utiliser les fichiers .do
et .log

1.7.1 Fichiers .do


Un fichier .do est un simple fichier texte contenant l’ensemble des commandes que l’on
souhaite voir Stata exécuter. Pour créer un fichier .do, on passe par l’éditeur proposé par Stata
en cliquant sur . Pour exécuter la série de commande du fichier, il suffit de cliquer sur
l’icône d’exécution dans l’éditeur de texte. Si on veut exécuter les commandes sans que le
résultat s’affiche à l’écran, il faut utiliser l’icône .
Pour n’exécuter qu’une partie des commandes du fichier .do, il faut sélectionner ces lignes
avant de cliquer sur l’icône d’exécution.
Il est souvent souhaitable d’ajouter des commentaires aux commandes dans un fichier .do.
Il existe trois façons d’indiquer à Stata qu’un portion de texte doit être ignorée.
— L’étoile * placée en début de ligne indique que cette ligne ne doit pas être lue par Stata.
Attention, ailleurs qu’en début de ligne, l’étoile reprend son rôle de symbole de multi-
plication.
— Les trois slash /// indiquent que le reste de la ligne (y compris le retour chariot final)
doit être ignorée. En plus de commentaires, cela permet de couper une longue commande
en plusieurs lignes en insérant /// à l’endroit où on souhaite couper la commande 4
(voir l’exemple 1 ci-dessous).
— Enfin, tout bloc de texte (même de plusieurs lignes) inclus entre /* et */ sera consi-
déré comme un commentaire. On peut également s’en servir pour couper les longues
commandes, comme dans l’exemple 1.

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
*/

use C:/Recherche/Bases/base.dta,clear /// get data

*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)

1.7.2 Fichiers .log


On peut sauvegarder l’ensemble de ce qui s’imprime à l’écran dans un fichier .log. Pour en
créer un, on peut utiliser la commande
log using C:/marecherche/montravail.log
(NB : préférer le format .log au format .smcl par défaut qui ne permet pas l’ouverture dans
un éditeur de texte). Alternativement, on peut en ouvrir un en cliquant sur . Pour clore un
fichier log, on tapera log close. Pour le suspendre temporairement, log off, et pour le
reprendre log on (ou peut également cliquer sur l’icône de log pour suspendre, reprendre ou
fermer un fichier log)

16
c V. Simonnet et A. Terracol, 2014
Notes


c V. Simonnet et A. Terracol, 2014 17
Chapitre 2

Gestion des données

2.1 Types de variables


2.1.1 Variables numériques et alphanumériques
Stata distingue les variables numériques des variables alphanumériques. Les variables nu-
mériques peuvent être stockées sous 5 types différents, selon la précision dont on a besoin. Les
variables ne prenant que des valeurs entières peuvent être stockées sous les formats suivants :

TABLE 2.1 – Variables entières


type précision valeurs admises
byte . ±100
int . ±32000
long . ±2.109

Les variables pouvant prendre des valeurs décimales peuvent être stockées sous les formats
suivants :

TABLE 2.2 – Variables décimales


type précision valeurs admises
float 10−8 ±1036
double 10−16 ±10308

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.

2.1.2 Valeurs manquantes


Les valeurs manquantes des variables numériques sont repérées par un point 1 . Celles des
variables alphanumériques le sont par un espace.
Une valeur manquante (numérique) est considérée comme ayant une valeur plus grande que
toute autre valeur. Il est important de s’en souvenir car, si les valeurs manquantes sont ignorées
dans les calculs demandés à Stata, elles ne le sont pas pour les conditions logiques. Par exemple,
taper
summarize wage if age>=60
donnera les statistiques descriptives de la variable wage pour tous les individus pour lesquels
la variable age est plus grande que 60 et pour ceux dont la variable age est manquante. Pour
éviter cela, il faut taper
summarize wage if age>=60 & age<.

2.2 Labels, notes


2.2.1 Labels
On peut attacher un label à une base de donnée, à une variable ou une valeur particulière de
cette variable. Ces labels seront utilisés en particulier dans les graphiques en faisant apparaître
ce label plutôt que le nom de la variable, qu’il convient de garder le plus court possible pour des
raisons pratiques. La commande label permet de définir ces labels.
label data "nom de la base"
permet de donner un label à la base de données.
label variable <nom de la variable> "label de la variable"
donne un label à une variable particulière, par exemple :
label variable wage "salaire horaire, en Euros"

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

notes wage : les indépendants peuvent avoir des valeurs négatives

Pour lister toutes les notes, on tapera simplement notes.

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 :

2.3.1 Les principales commandes


— describe décrit la base de donnée
— list liste toutes les valeurs de la base, observation par observation
— summarize <liste de variables> donne les statistiques descriptives des va-
riables spécifiées (voir plus haut)
— codebook <liste de variables> décrit les variables spécifiées, en précisant
le nombre de valeurs manquantes, les valeurs min et max, certains percentiles, etc.
— sort <liste de variables> trie la base de donnée selon les valeurs croissantes
des variables spécifiées. L’ordre de tri correspond à la liste des variables spécifiées.
— tabulate <1 ou 2 variables> donne les fréquences et pourcentage de chaque
modalité de la variable si une seule est indiquée. Si deux sont indiquées, il en résulte ta-
bleau croisé indiquant les fréquences pour chaque couple de valeurs. Dans le cas de deux
variables, les options row et col donnent les pourcentages en ligne ou en colonnes, et
l’option chi2 effectue un test d’indépendance entre les variables.
Dans le cas d’une seule variable, l’option summarize(<nom d’une variable>)
donne les statistiques descriptives de la seconde variable pour chaque modalité de la
première. L’option generate(<nouvelle variable>) crée des variables indi-
catrices pour chaque modalité de la variable tabulée.
— table <liste de 4 variables au plus>, contents(<liste de statistique
suivies des variables auxquelles elles doivent s’appliquer>)
Permet d’obtenir les statistiques indiquées pour chaque sous groupe d’observations cor-
respondant au croisement des variables de la première liste.
— tabstat <liste de variables>, statistics(<liste de statistiques>)
Permet d’obtenir des statistiques telles que la moyenne, la médiane, les percentiles etc.
du groupe de variables indiquées.
— correlate <liste de variables> affiche la matrice de corrélation des va-
riables spécifiées. L’option covariance permet d’obtenir les covariances au lieu des
corrélations.


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

50% 21 Mean 18.87931


Largest Std. Dev. 12.80087
75% 28 36
90% 34 42 Variance 163.8624
95% 42 42 Skewness -.094992
99% 44 44 Kurtosis 2.13251
. codebook disease
---------------------------------------------------------------------------------------
disease
---------------------------------------------------------------------------------------
type: numeric (int)
range: [1,3] units: 1
unique values: 3 missing .: 0/58
tabulation: Freq. Value
19 1
19 2
20 3
. codebook systolic

---------------------------------------------------------------------------------------
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

On peut également visualiser directement le tableau de données avec la commande browse.


La commande edit permet en outre de modifier directement le tableau de données (décon-
seillé).

2.3.2 Résultats sauvegardés


La plupart des commandes Stata stockent automatiquement un certain nombre de résultats
dans des macros accessibles par l’utilisateur.
La commande return list permet d’afficher la liste de ces macros :
summarize price

Variable | Obs Mean Std. Dev. Min Max


---------+--------------------------------------------------------
price | 74 6165.257 2949.496 3291 15906

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)

Variable | Obs Mean Std. Dev. Min Max


---------+--------------------------------------------------------
price | 22 9814.364 3022.929 6229 15906

Attention, l’exécution d’une nouvelle commande efface et remplace les macros r() sau-
vées par les commandes précédentes.

2.4 Création et modification


2.4.1 Création de variable
Les deux principales commandes pour créer une variable sont generate et egen
La syntaxe de generate est :
generate <nouvelle variable>=expression [if] [in]
où expression définit la formule de calcul de la nouvelle variable, par exemple :
generate lnwage=ln(wage)
.
Si on veut créer une variable alphanumérique, il faut indiquer sa modalité entre guillements :
generate pays="France"

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()

2.4.2 Changer de format


Il est possible de passer d’un format alphanumérique à un format numérique, et inversement,
à l’aide des commande encode, decode, destring et tostring.
Si on dispose d’une variable caractère contenant une "vraie" chaîne alphanumérique (comme
des prénoms, ou des noms de départements par exemple), on peut créer une variable numérique
catégorielle prenant une valeur différente pour chaque chaîne alphanumérique unique dans la
variable originelle. Les labels de ces valeurs correspondront aux chaînes alphanumériques de la
variable originelle :

/*a est une variable alphanumérique


contenant "A" ou "B"*/

. describe a

storage display value


variable name type format label variable label
-------------------------------------------------------------
a str1 %9s

. encode a, g(b)

/*b est maintenant une variable numérique prenant


les valeurs 1 ou 2, et les labels de ces valeurs
sont "A" et "B"*/

. describe b

storage display value


variable name type format label variable label
------------------------------------------------------------------
b long %8.0g 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

b | Freq. Percent Cum.


------------+-----------------------------------
A | 50 6.72 6.72
B | 694 93.28 100.00
------------+-----------------------------------
Total | 744 100.00

decode <numvar>, generate(<stringvar>) effectue l’opération inverse


destring <stringvar> , [generate(<numvar>) | replace] s’utilise lorsque
la variable alphanumérique contient en fait des nombres stocké en tant que chaîne de caractère.
C’est l’équivalent de generate <numvar>=real(<stringvar>)
tostring effectue l’opération inverse.

2.4.3 Supprimer des données


Les commandes keep et drop permettent de conserver et de supprimer des variables ou des
observations. Suivis d’une liste de variables, elles permettent de conserver uniquement les va-
riables spécifiées (keep), ou de supprimer ces mêmes variables (drop). Suivis d’une condition
if, elles permettent de conserver ou de supprimer les observations pour la quelle la condition
if est vérifiée.

2.5 Les variables de date


Stata permet de travailler avec des dates allant jusqu’à une précision d’une miliseconde.
Pour pouvoir profiter des outils liés aux variables de date, il convient de les déclarer en tant que
tel grâce à la commande format. Comme pour la plupart des logiciels, Stata assigne la valeur
0 à la date du premier janvier 1960.
Les formats de dates autorisés, et les unités correspondantes sont les suivants :
— %tc : milliseconde
— %td : jour
— %tw : semaine
— %tm : mois
— %tq : trimestre
— %th : semestre
— %ty : année

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 :

generate madate=date(strdate, "DMY")


format madate2 %td

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 :

generate madatemens=monthly(strdatemens, "MY")


format madatemens %tm

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 Fusion de bases de données


Deux commandes permettent de fusionner différentes bases de données : merge et append

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

append using base2.dta


save base12.dta, replace

2.7 Format wide et format long


Les formats "wide" et "long" sont des concepts importants dans l’organisation des données.
Un format "wide" (en anglais large) correspond à l’utilisation de différentes variables en lieu
et place de différentes observations. Le fichier de données est donc plus large car les variables
sont rangées en colonne. A l’inverse, le format "long" correspond à l’utilisation minimale des
variables avec plus d’observations, ce qui allonge la base de donnée, puisque les observations
sont rangées en ligne. Un exemple va clarifier le concept :

TABLE 2.4 – Format long


pays année pop
Allemagne 1996 81896
Allemagne 1997 82052
Allemagne 1998 82029
Allemagne 1999 82087
Allemagne 2000 82168
France 1996 59533
France 1997 59735
France 1998 59942
France 1999 60156
France 2000 60431
Italie 1996 57397
Italie 1997 57512
Italie 1998 57588
Italie 1999 57646
Italie 2000 57728


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)

rename popmois popannée


.

30
c V. Simonnet et A. Terracol, 2014
Notes


c V. Simonnet et A. Terracol, 2014 31
Chapitre 3

Procédures statistiques courantes

3.1 Tests
Un grand nombre de procédures de tests sont possibles avec Stata. Nous n’en présenterons
que quelques uns.

3.1.1 Tests sur une seule variable


Tests de normalité
. Plusieurs procédures permettent de tester la normalité de la distribution d’une variable.
Un test sur le skewness et le kurtosis (troisième et quatrième moments de la distribution) est
obtenu avec la commande sktest <nom de la variable> (l’hypothèse nulle est celle
de normalité). Les tests de Shapiro-Wilk et Shapiro-Francia sont obtenus respectivement avec
swilk et sfrancia, suivi du nom de la variable à tester. Le test skewness-kurtosis exige
au minimum 8 observations, tandis que les tests Shapito-Wilk et Shapiro-Francia s’appliquent
pour un nombre d’observations entre 4 et 200 ; et entre 5 et 5000, respectivement.

Exemple 3 : Tests de normalité

. 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

Tous les tests concluent au rejet de l’hypothèse de normalité.

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

Exemple 4 : Tests graphiques

. use births
(Data from 500 births)

. qnorm bweight
5000 4000
birth weight in grams
2000 3000
1000

1000 2000 3000 4000 5000


Inverse Normal

Tests d’égalité de la variance et d’égalité de la moyenne


Sur une population La commande sdtest <nom de la variable> = <valeur>
permet de tester que l’écart-type de la variable est égale à une valeur donnée.

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>

Exemple 5 : Tests sur l’écart-type et sur la moyenne

. 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

Sur deux sous-populations On peut également vouloir tester l’égalité de la variance et de


la moyenne d’une variable sur deux sous-populations différentes. On utilisera alors les com-
mandes sdtest et ttest combinés avec l’option by() qui permet de différencier les deux
sous populations.
Comme le test d’égalité des moyennes dépend du fait que les variances sont ou non égales
dans les deux sous-populations, le mieux est de commencer par tester l’égalité des variances. Si
on trouve que ces dernières sont différentes, on ajoutera l’option unequal lors du test sur les
moyennes.
Une alternative au test de Student est le test « rank-sum » de Wilcoxon (ou Mann-Whitney)
(commande ranksum), qui permet de tester l’égalité des distributions sur les deux sous-populations.
Un test non paramétrique d’égalité des médianes est effectué avec la commande median

Exemple 6 : Tests sur deux sous-populations

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)

Variance ratio test


------------------------------------------------------------------------------
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
------------------------------------------------------------------------------
ratio = sd(0) / sd(1) f = 0.5505
Ho: ratio = 1 degrees of freedom = 427, 71
Ha: ratio < 1 Ha: ratio != 1 Ha: ratio > 1
Pr(F < f) = 0.0002 2*Pr(F < f) = 0.0004 Pr(F > f) = 0.9998

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

On utilise maintenant le test de Wilcoxon, puis celui sur la médiane

. ranksum bweight, by(hyp)

Two-sample Wilcoxon rank-sum (Mann-Whitney) test


hyp | obs rank sum expected
-------------+---------------------------------
0 | 428 112389.5 107214
1 | 72 12860.5 18036
-------------+---------------------------------
combined | 500 125250 125250
unadjusted variance 1286568.00
adjustment for ties -4.38
----------
adjusted variance 1286563.62

Ho: bweight(hyp==0) = bweight(hyp==1)


z = 4.563
Prob > |z| = 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

3.1.2 Tests sur plusieurs variables


Tests sur données appariées
Si on souhaite tester l’égalité des variances ou des moyennes de deux variables, on utilise en-
core une fois les commandes sdtest et ttest suivis de variable1 = variable2. La
version non-paramétrique du test fait appel à la commande signrank. Ces tests sont souvent
utiles lorsque l’on dispose de données où chaque individu a été observé dans deux circonstances
différentes, et que l’on souhaite savoir si cette circonstance a une influence sur la moyenne (ou
la variance) du résultat d’une mesure.

Exemple 7 : Tests sur données appariées

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

Le sexe de l’enfant est-il indépendant de la présence d’hypertension chez la mère ?


. use births
(Data from 500 births)
. tabulate sex hyp, chi2 exact

sex of | hypertens
baby | 0 1 | Total
-----------+----------------------+----------
1 | 221 43 | 264
2 | 207 29 | 236
-----------+----------------------+----------
Total | 428 72 | 500

Pearson chi2(1) = 1.6172 Pr = 0.203


Fisher’s exact = 0.251
1-sided Fisher’s exact = 0.126

On conclue à l’indépendance des deux variables.

3.2 Analyse de la variance


Préalablement à toute estimation, on peut mesurer l’effet d’une ou d’un ensemble de va-
riables sur la variable à étudier. Pour cela, on opère une analyse de variance-covariance entre les

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

. anova systolic drug disease


Number of obs = 58 R-squared = 0.3803
Root MSE = 10.5503 Adj R-squared = 0.3207
Source | Partial SS df MS F Prob > F
-----------+----------------------------------------------------
Model | 3552.07225 5 710.414449 6.38 0.0001
|
drug | 3063.43286 3 1021.14429 9.17 0.0001
disease | 418.833741 2 209.41687 1.88 0.1626
|
Residual | 5788.08293 52 111.309287
-----------+----------------------------------------------------
Total | 9340.15517 57 163.862371
. anova systolic drug disease drug#disease
Number of obs = 58 R-squared = 0.4560
Root MSE = 10.5096 Adj R-squared = 0.3259
Source | Partial SS df MS F Prob > F
-------------+----------------------------------------------------
Model | 4259.33851 11 387.212591 3.51 0.0013
|
drug | 2997.47186 3 999.157287 9.05 0.0001
disease | 415.873046 2 207.936523 1.88 0.1637
drug#disease | 707.266259 6 117.87771 1.07 0.3958
|
Residual | 5080.81667 46 110.452536


c V. Simonnet et A. Terracol, 2014 39
-------------+----------------------------------------------------
Total | 9340.15517 57 163.862371

. anova systolic drug##disease


Number of obs = 58 R-squared = 0.4560
Root MSE = 10.5096 Adj R-squared = 0.3259
Source | Partial SS df MS F Prob > F
-------------+----------------------------------------------------
Model | 4259.33851 11 387.212591 3.51 0.0013
|
drug | 2997.47186 3 999.157287 9.05 0.0001
disease | 415.873046 2 207.936523 1.88 0.1637
drug#disease | 707.266259 6 117.87771 1.07 0.3958
|
Residual | 5080.81667 46 110.452536
-------------+----------------------------------------------------
Total | 9340.15517 57 163.862371

. anova systolic drug##disease c.age


Number of obs = 58 R-squared = 0.6826
Root MSE = 8.1164 Adj R-squared = 0.5980
Source | Partial SS df MS F Prob > F
-------------+----------------------------------------------------
Model | 6375.73983 12 531.311652 8.07 0.0000
|
drug | 2762.01519 3 920.671731 13.98 0.0000
disease | 605.323109 2 302.661555 4.59 0.0153
drug#disease | 608.728232 6 101.454705 1.54 0.1871
age | 2116.40132 1 2116.40132 32.13 0.0000
|
Residual | 2964.41534 45 65.8758965
-------------+----------------------------------------------------
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.

3.3 Tables d’épidémiologie


Stata propose une série de commandes pour l’analyse épidémiologique. Elles sont regrou-
pées sous le nom générique epitab (voir help epitab).

3.3.1 Quelques définitions


Considérons une variable dichotomique 0/1 indiquant l’exposition à un risque, et une autre
indiquant la survenue d’un événement (par exemple une maladie). On peut également avoir une
variable indiquant la durée au bout de laquelle l’événement est survenu. On note p0 ∈ [0, 1] la

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

3.3.2 Commandes Stata


— ir <var. de cas> <var. d’exposition> <var. de temps> pour cal-
culer un taux d’incidence
— cs <var. de cas> <var. d’exposition> Pour obtenir des taux de risques
— cc <var. de cas> <var. d’exposition> Pour les odds-ratios. Avec l’op-
tion by(), permet de donner le ratio pour chaque strate, et de tester l’homogénéité du
ratio entre les strates
— mcc <var. de cas> <var. d’exposition> pour des données appariées
— tabodds <var. de cas> <var. d’exposition> permet de traiter plusieurs
niveaux d’exposition. Un test de tendance linéaire du log des risques en fonction du de-
gré d’exposition est alors réalisé.
— mhodds <var. de cas> <var. d’exposition> [var. d’ajustement]
permet de contrôler pour une ou plusieurs variables d’ajustement.

Exemple 10 : Tables d’épidémiologie

. use births, clear


(Data from 500 births)
. cc lowbw hyp
Proportion
| Exposed Unexposed | Total Exposed
-----------------+------------------------+------------------------
Cases | 20 40 | 60 0.3333
Controls | 52 388 | 440 0.1182
-----------------+------------------------+------------------------
Total | 72 428 | 500 0.1440
| |
| Point estimate | [95% Conf. Interval]
|------------------------+------------------------
Odds ratio | 3.730769 | 1.907649 7.100405 (exact)


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

Score test for trend of odds: chi2(1) = 19.79


Pr>chi2 = 0.0000

. cc lowbw hyp, by(sex)

sex of baby | OR [95% Conf. Interval] M-H Weight


-----------------+-------------------------------------------------
1 | 5.316129 2.047939 13.39574 1.761364 (exact)
2 | 2.773333 .9524546 7.381347 2.224576 (exact)
-----------------+-------------------------------------------------
Crude | 3.730769 1.907649 7.100405 (exact)
M-H combined | 3.89698 2.105169 7.213886
-------------------------------------------------------------------
Test of homogeneity (M-H) chi2(1) = 1.05 Pr>chi2 = 0.3065
Test that combined OR = 1:
Mantel-Haenszel chi2(1) = 20.87
Pr>chi2 = 0.0000

. mhodds lowbw hyp, by(sex)


Maximum likelihood estimate of the odds ratio
Comparing hyp==1 vs. hyp==0
by sex
-------------------------------------------------------------------------------
sex | Odds Ratio chi2(1) P>chi2 [95% Conf. Interval]
----------+--------------------------------------------------------------------
1 | 5.316129 17.42 0.0000 2.20717 12.80429
2 | 2.773333 5.07 0.0244 1.09713 7.01043
-------------------------------------------------------------------------------

Mantel-Haenszel estimate controlling for sex


----------------------------------------------------------------
Odds Ratio chi2(1) P>chi2 [95% Conf. Interval]
----------------------------------------------------------------
3.896980 20.87 0.0000 2.076218 7.314479
----------------------------------------------------------------
Test of homogeneity of ORs (approx): chi2(1) = 1.01
Pr>chi2 = 0.3161

. egen agegrp=cut(matage), group(4)


. tabodds lowbw agegr

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

Score test for trend of odds: chi2(1) = 0.11


Pr>chi2 = 0.7398
. cc lowbw agegr
Proportion
| Exposed Unexposed | Total Exposed
-----------------+------------------------+------------------------
Cases | 47 13 | 60 0.7833
Controls | 354 86 | 440 0.8045
-----------------+------------------------+------------------------
Total | 401 99 | 500 0.8020
| |
| Point estimate | [95% Conf. Interval]
|------------------------+------------------------
Odds ratio | .8783138 | .4431392 1.851345 (exact)
Prev. frac. ex. | .1216862 | -.8513449 .5568608 (exact)
Prev. frac. pop | .0979021 |
+-------------------------------------------------
chi2(1) = 0.15 Pr>chi2 = 0.6989
. mhodds lowbw agegr

Score test for trend of odds with agegrp


(The Odds Ratio estimate is an approximation to the odds ratio
for a one unit increase in agegrp)
----------------------------------------------------------------
Odds Ratio chi2(1) P>chi2 [95% Conf. Interval]
----------------------------------------------------------------
0.959663 0.11 0.7398 0.752686 1.223555
----------------------------------------------------------------

. 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)

agegrp | RR [95% Conf. Interval] M-H Weight


-----------------+-------------------------------------------------
0 | 3.242188 1.215774 8.646161 1.292929
1 | 5.037879 1.877767 13.51617 1.128205
2 | 1.104762 .2815061 4.335604 1.615385
3 | 3.654545 1.520747 8.782332 1.428571
-----------------+-------------------------------------------------
Crude | 2.972222 1.848078 4.780157
M-H combined | 3.088892 1.88337 5.066054
-------------------------------------------------------------------
Test of homogeneity (M-H) chi2(3) = 3.267 Pr>chi2 = 0.3523
. ir lowbw hyp gestw

| 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)

. ir lowbw hyp gestwks


| 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)
. ir lowbw hyp gestwks, by(agegrp)
agegrp | IRR [95% Conf. Interval] M-H Weight
-----------------+-------------------------------------------------
0 | 3.358837 .8645539 11.64461 1.255072 (exact)
1 | 4.533259 1.211913 16.95702 1.084352 (exact)
2 | 1.122428 .1245475 4.826488 1.59266 (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

3.4 Analyse de facteurs et analyse en composantes princi-


pales
3.4.1 Analyse de facteurs
L’analyse de facteurs se propose de résumer la structure de corrélation entre variables ob-
servées par un petit nombre de « facteurs » sous-jacents inobservés. Plus précisément, pour K
variables observées, et M facteurs, on a :

X1 = λ11 F1 + λ21 F2 + · · · + λM1 FM + ε1


X2 = λ12 F1 + λ22 F2 + · · · + λM2 FM + ε2
..
.
Xk = λ1k F1 + λ2k F2 + · · · + λMk FM + εk
..
.
XK = λ1K F1 + λ2K F2 + · · · + λMK FM + εK
où les Fm sont les facteurs inobservés, les λmk les « charges de facteurs » qui permettent de
recomposer la variables observée Xk ; et où εk est un terme d’erreur inobservé. La commande
factor <liste de variables> permet de procéder à l’analyse des facteurs. Plusieurs
méthodes méthodes sont utilisables via les options
— factor(#) permet de choisir le nombre de facteurs à retenir
— ipf pour une estimation itérée
— ml pour une estimation par maximum de vraisemblance
— pcf pour la méthode par composante principale
— pf (le défaut) pour la méthode des facteurs principaux

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

Finalement, predict <liste de nouvelles variables> permet de créer des


nouvelles variables contenant les facteurs estimés.

Exemple 11 : Analyse de facteurs


c V. Simonnet et A. Terracol, 2014 45
. use autofull, clear
(Automobile Models)

. factor price mpg headroom rear_seat trunk weight length ///


turn displacement gear_ratio
(obs=74)
Factor analysis/correlation Number of obs = 74
Method: principal factors Retained factors = 6
Rotation: (unrotated) Number of params = 45
--------------------------------------------------------------------------
Factor | Eigenvalue Difference Proportion Cumulative
-------------+------------------------------------------------------------
Factor1 | 6.22509 5.59928 0.8665 0.8665
Factor2 | 0.62581 0.18554 0.0871 0.9536
Factor3 | 0.44027 0.24295 0.0613 1.0149
Factor4 | 0.19731 0.18004 0.0275 1.0424
Factor5 | 0.01727 0.01599 0.0024 1.0448
Factor6 | 0.00128 0.02360 0.0002 1.0450
Factor7 | -0.02232 0.03640 -0.0031 1.0418
Factor8 | -0.05872 0.03083 -0.0082 1.0337
Factor9 | -0.08955 0.06281 -0.0125 1.0212
Factor10 | -0.15236 . -0.0212 1.0000
--------------------------------------------------------------------------
LR test: independent vs. saturated: chi2(45) = 721.42 Prob>chi2 = 0.0000
Factor loadings (pattern matrix) and unique variances
--------------------------------------------------------------------------------------
Variable | Factor1 Factor2 Factor3 Factor4 Factor5 Factor6 |Uniqueness
-------------+------------------------------------------------------------+-----------
price | 0.5001 -0.2485 0.5174 -0.0624 0.0024 0.0000 | 0.4165
mpg | -0.7897 0.0662 -0.0713 -0.1096 0.0511 0.0272 | 0.3516
headroom | 0.5756 0.4650 -0.0658 -0.1067 0.0215 -0.0082 | 0.4362
rear_seat | 0.6789 0.2855 0.2382 -0.0121 -0.0476 0.0154 | 0.3982
trunk | 0.7600 0.3814 0.0397 -0.0381 0.0181 -0.0024 | 0.2736
weight | 0.9636 -0.1731 -0.0034 0.0562 0.0937 -0.0018 | 0.0295
length | 0.9561 -0.0044 -0.0481 0.1946 0.0161 0.0056 | 0.0454
turn | 0.8546 -0.0836 -0.1996 0.1874 -0.0407 0.0110 | 0.1859
displacement | 0.9050 -0.1924 -0.0720 -0.2029 -0.0029 0.0080 | 0.0975
gear_ratio | -0.7678 0.2060 0.2397 0.2260 0.0300 0.0035 | 0.2586
--------------------------------------------------------------------------------------
. factor price mpg headroom rear_seat trunk weight length ///
turn displacement gear_ratio, factor(2)
(obs=74)

Factor analysis/correlation Number of obs = 74


Method: principal factors Retained factors = 2
Rotation: (unrotated) Number of params = 19
--------------------------------------------------------------------------
Factor | Eigenvalue Difference Proportion Cumulative
-------------+------------------------------------------------------------
Factor1 | 6.22509 5.59928 0.8665 0.8665
Factor2 | 0.62581 0.18554 0.0871 0.9536
Factor3 | 0.44027 0.24295 0.0613 1.0149
Factor4 | 0.19731 0.18004 0.0275 1.0424
Factor5 | 0.01727 0.01599 0.0024 1.0448
Factor6 | 0.00128 0.02360 0.0002 1.0450
Factor7 | -0.02232 0.03640 -0.0031 1.0418
Factor8 | -0.05872 0.03083 -0.0082 1.0337
Factor9 | -0.08955 0.06281 -0.0125 1.0212
Factor10 | -0.15236 . -0.0212 1.0000

46
c V. Simonnet et A. Terracol, 2014
--------------------------------------------------------------------------
LR test: independent vs. saturated: chi2(45) = 721.42 Prob>chi2 = 0.0000

Factor loadings (pattern matrix) and unique variances


-------------------------------------------------
Variable | Factor1 Factor2 | Uniqueness
-------------+--------------------+--------------
price | 0.5001 -0.2485 | 0.6881
mpg | -0.7897 0.0662 | 0.3720
headroom | 0.5756 0.4650 | 0.4524
rear_seat | 0.6789 0.2855 | 0.4576
trunk | 0.7600 0.3814 | 0.2769
weight | 0.9636 -0.1731 | 0.0415
length | 0.9561 -0.0044 | 0.0859
turn | 0.8546 -0.0836 | 0.2626
displacement | 0.9050 -0.1924 | 0.1440
gear_ratio | -0.7678 0.2060 | 0.3680
-------------------------------------------------

. 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

Rotated factor loadings (pattern matrix) and unique variances


-------------------------------------------------
Variable | Factor1 Factor2 | Uniqueness
-------------+--------------------+--------------
price | 0.5579 0.0249 | 0.6881
mpg | -0.7229 -0.3246 | 0.3720
headroom | 0.2783 0.6857 | 0.4524
rear_seat | 0.4556 0.5786 | 0.4576
trunk | 0.4801 0.7018 | 0.2769
weight | 0.9269 0.3154 | 0.0415
length | 0.8385 0.4593 | 0.0859
turn | 0.7882 0.3408 | 0.2626
displacement | 0.8849 0.2701 | 0.1440
gear_ratio | -0.7715 -0.1918 | 0.3680
-------------------------------------------------

Factor rotation matrix


--------------------------------
| Factor1 Factor2
-------------+------------------
Factor1 | 0.8748 0.4844
Factor2 | -0.4844 0.8748
--------------------------------
. rotate, promax

Factor analysis/correlation Number of obs = 74


Method: principal factors Retained factors = 2
Rotation: oblique promax (Kaiser off) Number of params = 19


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

Rotated factor loadings (pattern matrix) and unique variances


-------------------------------------------------
Variable | Factor1 Factor2 | Uniqueness
-------------+--------------------+--------------
price | 0.6351 -0.1511 | 0.6881
mpg | -0.6899 -0.1555 | 0.3720
headroom | 0.0104 0.7338 | 0.4524
rear_seat | 0.2646 0.5476 | 0.4576
trunk | 0.2368 0.6877 | 0.2769
weight | 0.9304 0.0783 | 0.0415
length | 0.7626 0.2799 | 0.0859
turn | 0.7581 0.1539 | 0.2626
displacement | 0.9024 0.0374 | 0.1440
gear_ratio | -0.8066 0.0198 | 0.3680
-------------------------------------------------

Factor rotation matrix


--------------------------------
| Factor1 Factor2
-------------+------------------
Factor1 | 0.9709 0.7707
Factor2 | -0.2397 0.6372
--------------------------------
. predict fact1 fact2
(regression scoring assumed)
Scoring coefficients (method = regression; based on promax(3) rotated factors)
----------------------------------
Variable | Factor1 Factor2
-------------+--------------------
price | 0.01361 -0.02811
mpg | -0.07526 0.00294
headroom | -0.05605 0.29874
rear_seat | 0.04690 0.17082
trunk | -0.02598 0.36684
weight | 0.62689 -0.42378
length | 0.05641 0.60937
turn | 0.01359 0.03239
displacement | 0.21845 -0.01009
gear_ratio | -0.05583 0.01421
----------------------------------

3.4.2 Analyse en composantes principales


L’analyse en composantes principales permet également de « résumer » un ensemble de va-
riables observées en un certain nombre de « composantes » qui sont des combinaisons linéaires

48
c V. Simonnet et A. Terracol, 2014
de ces variables :

Fm = α1m X1 + α2m X2 . . .

La commande correspondante est pca <liste de variables>


Après l’estimation, on peut générer les composantes prédites par l’estimation avec predict
<liste de nouvelles variables>

On obtient le graphique des scores et des facteurs de charge avec scoreplot et loadingplot

Exemple 12 : Analyse en composantes principales

. pca price mpg headroom trunk weight length turn ///


displacement gear_ratio, factor(2)

Principal components/correlation Number of obs = 74


Number of comp. = 2
Trace = 9
Rotation: (unrotated = principal) Rho = 0.7801
--------------------------------------------------------------------------
Component | Eigenvalue Difference Proportion Cumulative
-------------+------------------------------------------------------------
Comp1 | 6.02281 5.02471 0.6692 0.6692
Comp2 | .998097 .288666 0.1109 0.7801
Comp3 | .709432 .269418 0.0788 0.8589
Comp4 | .440014 .138721 0.0489 0.9078
Comp5 | .301293 .0375348 0.0335 0.9413
Comp6 | .263758 .13191 0.0293 0.9706
Comp7 | .131849 .0345361 0.0146 0.9852
Comp8 | .0973127 .061874 0.0108 0.9961
Comp9 | .0354388 . 0.0039 1.0000
--------------------------------------------------------------------------
Principal components (eigenvectors)
------------------------------------------------
Variable | Comp1 Comp2 | Unexplained
-------------+--------------------+-------------
price | 0.2121 -0.6150 | .3516
mpg | -0.3444 0.1261 | .2696
headroom | 0.2424 0.6585 | .2133
trunk | 0.3148 0.3757 | .2622
weight | 0.3934 -0.1160 | .05454
length | 0.3863 0.0114 | .1009
turn | 0.3562 0.0061 | .2357
displacement | 0.3739 -0.1124 | .1453
gear_ratio | -0.3283 0.0699 | .3459
------------------------------------------------
. 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.

4.1 Graphiques de statistiques descriptives


Les commandes graph bar (barres verticales), graph hbar (barres horizontales) et
graph dot (points sur une ligne) permettent de représenter des statistiques particulières
d’une variable donnée. L’option over(<nom de variable>) permet de distinguer plu-
sieurs sous-échantillons. On peut indiquer jusqu’à trois variables pour distinguer ces sous caté-
gories.
La syntaxe générale est :
graph [bar|hbar|dot] (statistique) varname [, over(varname)...]
où statistique est la statistique (mean, median, p1...p99 etc.) que l’on souhaite représenter

Exemple 13 : Graphique de statistiques descriptives

On cherche à représenter la médiane du poids de naissance en fonction du sexe du terme de la


grossesse et de la présence d’hypertension chez la mère (version avec barres verticales)

graph bar (median) bweight , over(preterm) over(hyp) ///


ytitle(Médiane du poids de naissance)


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 :

graph dot (median) bweight , over(preterm) over(hyp) ///


ytitle(Médiane du poids de naissance)

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"

Un histogramme de la variable sera obtenu avec la commande


histogram <nom de la variable>
Le nombre de barres peut être contrôlé avec l’option bin(#) où # est le nombre de barres.
On peut indiquer à Stata de placer la fréquence, le pourcentage à la place de la densité sur l’axe
vertical en indiquant l’option freq ou percent.

Exemple 15 : Un histogramme

Un histogramme du poids de naissance, en utilisant les pourcentages, avec 30 barres

histogram bweight, percent bin(30)

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

Exemple 16 : Estimation de densité

Densité de la durée de la grossesse, noyau gaussien, largeur de fenêtre=1.1

kdensity gestwks, kern(gauss) bwidth(1.1)


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>)

Exemple 17 : Un graphique en camembert

On dispose d’une variable catégorielle trage indiquant l’appartenance à des quartile d’âge.
On peut produire le camembert suivant :

graph pie, over(trage) pie(2, explode) plabel(2 percent) ///


plabel(1 "1er quartile")

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)

Exemple 18 : Boîte à moustache

Graphique du poids de naissance, en fonction de la présence d’hypertension chez la mère


graph box bweight, over(hyp)


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

Exemple 19 : Nuage de points

Nuage de points pour le poids de naissance contre la durée de gestation, on utilise le symbole
du cercle

twoway scatter bweight gestwks, scheme symbol(oh)

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

Exemple 20 : Matrice de nuages de points

graph matrix bweight gestwks matage

Si on dispose de données telles que à chaque valeur de la variable en abscisse corresponde


une seule valeur pour les variables en ordonnées (par exemple l’évolution du PIB (en ordonnée)
dans le temps (en abscisse)), il peut être intéressant de joindre les observations par une ligne.
C’est le rôle de la commande
twoway line <liste de variables>
Le style de ligne se contrôle avec l’option lpattern(). Pour voir une liste des styles de
lignes autorisés, taper palette line. Il est souvent utile d’ajouter l’option sort pour s’as-
surer que les données sont classées selon les valeurs de la variable en abscisse (sinon on risque
d’avoir une graphique illisible).

Exemple 21 : Graphique reliant les observations

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

twoway line le_male le_female year, sort lpattern(dash solid)


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)

Exemple 22 : Deux axes des abscisses différents

twoway (line le year, sort yaxis(1)) ///


(line ratio year, sort 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

Exemple 24 : Utilisation des options avancées

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)

La commande estimates store permet de sauvegarder le contenu d’une estimation


sous un nom que l’on choisit, puis d’y revenir ultérieurement (par exemple pour des test d’Haus-
mann)

regress price mpg weight

<output ommited>

estimates store reg1

regress price mpg weight turn

<output ommited>

estimates store reg2

estimates replay reg1

<output ommited>

estimates replay reg2

66
c V. Simonnet et A. Terracol, 2014
<output ommited>

estimates table reg1 reg2, star

----------------------------------------------
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.

5.2 Variables catégorielles


5.2.1 Stata 10 et avant
L’inclusion de variables catégorielles dans une procédure d’estimation est facilitée par le
préfixe xi:
Si on dispose d’une variable catégorielle (par exemple la variable niveduc), et que l’on
souhaite inclure la série des indicatrices correspondantes dans notre modèle, on fait précéder la
commande par le préfixe xi:, et on indique à Stata les variables catégorielles à décomposer en
y ajoutant le préfixe i.. Par exemple, on pourra taper
xi: regress wage age i.niveduc sexe
afin d’inclure automatiquement la série des indicatrices correspondant aux différentes valeurs
possibles de niveduc.
On peut également introduire automatiquement des interactions entre les diverses catégories
et d’autres variables (continues ou catégorielles). Pour introduire, en plus des indicatrices pour
niveduc, les interactions entre le niveau d’éducation et l’âge, on tapera :
xi: regress wage sexe i.niveduc*age

Les différentes possibilités sont résumées ci-dessous :


— i.var1 : inclut les indicatrices pour les différentes valeurs de var1
— i.var1*var2 : inclut les indicatrices pour les différentes valeurs de var1, ainsi que
les termes d’interactions entre ces catégories et la variable var2
— i.var1|var2 : inclut uniquement les termes d’interaction entre les différentes valeurs
de var1 et la variable var2


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 Moindres carrés


5.3.1 MCO
On effectue une regression multiple par la méthode des moindres carrés ordinaires avec la
commande regress :
regress <variable dependante> <liste des variables indépendantes>
On peut indiquer à Stata de ne pas inclure de constante dans le modèle en indiquant l’option
noconstant
Suite à l’estimation d’un modèle, on peut obtenir diverses prédictions à l’aide de la com-
mande predict :
predict <nouvelle variable>, option
Le type de prédiction souhaitée est précisé par l’option, qui peut être :
— xb : prédiction linéaire
— residuals résidus estimés
— ...
Pour guide complet en ligne sur les méthodes de régression avec Stata, voir UCLA Acade-
mic Technology Services (2006).

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

Afin de pouvoir tester pour la présence d’autocorrélation, il est nécessaire d’indiquer au


préalable à Stata quelle est la variable représentant le temps avec la commande tsset <variable
de temps> après avoir effectué l’estimation par les MCO avec regress, on obtient la sta-
tistique de Durbin-Watson en tapant
estat dwatson
Si le résultat indique la présence d’autocorrélation, on peut effectuer une correction de Prais-
Winsten ou de Cochrane-Orcutt à l’aide de la commande prais.


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 + ε

Pour tester l’égalité des coefficients β1 et β2 , on tape :


test x1=x2
Pour tester l’hypothèse β1 = β2 = β3 , on utilise l’option accumulate :
test x1=x2
test x2=x3, accumulate

De même, si on veut tester que β1 = β3 = 1, on pourra taper :


test x1=x3

test x3=1, accumulate

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]

5.6 Données de panel


Les commandes Stata relatives aux données de panel commencent par le préfixe xt

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.

5.6.1 Modèles à effets fixes


Ce modèle repose sur la différenciation des variables par rapport à la moyenne individuelle
pour éliminer les effets fixes 1 . Quelques particularités des résultats : trois statistiques de R2
sont affichées. Le R2 within donne la part de la variabilité intra-individuelle de la variable de
gauche expliquée par celles des variables de droite. C’est le plus important des trois. Le R2
between estime l’apport des effets fixes au modèle. Le R2 overall traduit la qualité globale de
la régression. D’autre part, deux F-stat sont proposées. La première indique la significativité
jointe des variables explicatives, la seconde la significativité jointe des effets fixes.
Le LM-test de Breush-Pagan (xttest2) teste la corrélation entre observations dans le
modèle à effets fixes.
Le test d’autocorrélation sérielle au premier ordre des résidus peut s’effectuer grâce à la
commande pantest2 id_temps. On peut aussi utiliser xtserial y x1 x2 qui n’im-
pose pas de choix entre le modèle à effets fixes ou aléatoires. Enfin, la commande xtregar y
x1 x2, lbi permet d’estimer modèles a effets fixes ou aléatoires avec erreurs autocorrélées
d’ordre 1. L’option lbi permet d’effectuer le test de Baltagi-Wu et celui de Durbin-Watson.

5.6.2 Modèles à effets aléatoire


xtreg y x1 x2, re estime le modèle à effets aléatoires. Ce dernier permet d’estimer
les coefficients des variables ne variant pas dans le temps (sexe, ethnie, etc.). Il se base sur
l’hypothèse que les effets individuels sont indépendants des régresseurs du modèle.
On retrouve les trois R2 . Le R2 within donne la contribution des effets aléatoires au mo-
dèle. Le R2 between indique la part de la variabilité inter-individuelle expliquée par celles des
variables de droite. Il se focaliser sur celui-ci. Le R2 overall est le même que précédemment.

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.

5.6.3 Test d’Hausman


Le test d’Hausman permet de tester une hypothèse H0 à l’aide de l’estimation d’un modèle
consistent que H0 soit vérifiée ou non ; et d’un modèle consistent et efficient si H0 est vérifiée,
et inconsistent sinon 2 . On utilise la commande estimate store <nom du modèle>
pour stocker les résultats des différents modèles avant d’effectuer le test :
<estimation du modèle consistent>
estimate store consist
<estimation du modèle efficient>
estimate store effic
hausman consist effic
Lors de l’appel de la commande hausman, il faut toujours placer le nom du modèle consistent
en premier, et celui de l’efficace en second. D’autre part, on peut remplacer le nom du second
modèle par un point pour indiquer que l’on souhaite utiliser le dernier modèle à avoir été estimé
comme modèle efficient :
hausman consist .

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

5.7 Variables qualitatives


Stata permet d’estimer des modèles « qualitatifs » sur des variables prenant la valeur 0 ou
1, pour indiquer la survenance ou non d’un évènement, ou la présence ou nom d’une caractéris-

2. Un estimateur θ̂ est dit "consistent" s’il converge en probabilité


 vers la quantité θ à estimer lorsque la taille
de l’échantillon tend vers l’infini : limN→∞ Pr |θ̂ − θ | < ε = 1∀ε > 0. Un estimateur est "efficient" s’il est de
variance minimale parmi les estimateurs sans bias.

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.

5.7.1 Probit et Logit


Ces deux modèles se basent sur l’estimation de la probabilité que la variable dépendante soit
égale à 1. Dans le modèle probit, le résidu est supposé suivre une loi normale contrée-réduite,
et une loi logistique dans le modèle logit. Les commandes correspondantes sont probit et
logit :
probit <variable dépendante> <liste des variables explicatives>
logit <variable dépendante> <liste des variables explicatives>

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

5.7.2 Probit et Logit ordonnés


Lorsque la variable endogène représente un classement ordinal à plus de 2 catégories (par
exemple des réponses liées à la satisfaction), on utilise les modèles ordonnés. Les commandes
Stata correspondantes sont oprobit et ologit

5.7.3 Logit multinimial


Lorsque la variable dépendante est une variable catégorielle que l’on ne peut ordonner (par
exemple un choix entre différentes alternatives), on utilise un logit multinomial avec la com-
mande Stata mlogit. Attention, l’interprétation des coefficients doit se faire en référence à une
catégorie de base que l’on peut définir avec l’option base(<numéro de la modalité>)
de la commande mlogit.
Après avoir estimé le modèle, Stata peut prédire les probabilités associées à chaque modalité
à l’aide de la commande predict. si la variable dépendante prenait 3 modalités, on peut
calculer les probabilités associées à ces modalités avec :
predict pr1 pr2 pr3, pr
ou bien avec
predict pr1, outcome(1) pr
predict pr2, outcome(2) pr
predict pr3, outcome(3) pr


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).

5.9 Modèles de durée


Si vos données représentent des durées (par exemple de chômage), et que ces durées sont
censurées pour une partie des observations (par exemple si on a interrogé des individus au cours
de leur épisode de chômage), il faut effectuer l’analyse en terme de modèles de durée. Stata
propose un ensemble de commandes préfixées par st pour effectuer ces analyses.

5.9.1 Déclaration des données


Une étape essentielle dans l’analyse des données de durée est leur déclaration, qui permettra
à Stata d’effectuer correctement les analyses. Elle se fait à l’aide de la commande stset et
sert à indiquer la variable de durée, les censures, le mode d’échantillonnage, etc. La variable
indiquant les « sorties » est indiquée avec l’option failure(<nom de la variable>)
(cette variable vaut 1 si la durée observée est complète, et zero si elle est censurée). On indique si
nécessaire (lorsqu’il y a plusieurs observations pour un même individu, ou que l’épisode étudié
est divisé en plusieurs morceaux avec des valeurs différentes pour les variables explicatives)
avec l’option id(<nom de la variable>).
Si vous disposez d’un échantillon en stock, il convient d’utiliser l’option enter() pour
indiquer le moment auquel l’individu a commencé à être observé.
Par exemple, si la variable de durée est dur, celle de sortie exit, on tapera :
stset dur, fail(exit)

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

L’estimateur de Kaplan-Meier de la fonction de survie est calculé et représenté graphique-


ment à l’aide de la commande sts graph. On peut distinguer la fonction de survie selon les
valeurs prises par une variable en utilisant l’option by(). Par exemple, pour représenter les
fonctions de survie associées à un sexe, on tapera :
sts graph, by(sexe)

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.

5.9.3 Hétérogénéité inobservée


Il est souvent nécessaire d’introduire un paramètre d’hétérogénéité inobservée dans la mo-
délisation des durées, faute de quoi un phénomène de type « mover-stayer » risque de venir
biaiser l’estimation du hasard de base. Stata propose deux distributions pour ce paramètre d’hé-
térogénéité : la distribution Gamma et Inverse-Normale. On les spécifie à l’aide de l’option
frailty(gamma) ou frailty(invgaussian)
Pour plus de détails sur l’estimation de modèles de durée avec Stata, voir Cleves et al.
(2004).

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

6.1 Macros locales et globales


Les variables macros sont des éléments que Stata garde en mémoire et qui peuvent être
rappelées ultérieurement dans le corps du programme. Elles peuvent contenir un chiffre comme
une chaîne de caractères. Stata distingue deux types de variables macros : les macros locales
et les macros globales. La différence entre le deux tient au fait que les locales seront effacées
à la fin du programme, tandis que les globales pourront être utilisées plus tard dans un autre
programme.
— Macros locales
Une macro locale nommée "i" sera appelée ‘i’ dans le corps du programme. Attention
à la différence entre les guillemets d’ouverture et de fermeture : Guillemet d’ouverture :
‘ (AltGr+7) ; Guillemet de fermeture : ’
— Macros globales
Une macro globale nommée "i" sera appelée $i dans le corps du programme.
Nous donnerons par la suite nos exemples en utilisant des macros locales qui sont les plus cou-
rantes.
On définit le type de la macro en l’initialisant :
local nomdelamacro =...
ou
global nomdelamacro =...

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’

Stata lira la commande comme :


su if age==10


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’ ...

6.3 macros alphanumériques


On les initialise en leur donnant un nom et une valeur de départ entre guillemets (il est pré-
férable de ne pas mettre de signe "=" lors de la définition de macros alphanumériques, ce qui
permet de ne pas limiter leur longueur ) :
local i "contenu de i"
On pourra par la suite changer leur contenu ou les utiliser à des fins de comparaisons ou d’affi-
chage :

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) :

global chemin "C:\mondossier\mesfichiers"


...
use $chemin\mabase.dta
...

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.

Les quatre étapes de l’écriture d’une boucle sont :


1 Définir le type de la macro, la nommer et l’initialiser

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

6.5 Boucles simples


local i=1
while ‘i’<=10 {
...
commandes utilisant ‘i’
...
local i=‘i’+1
}

6.6 Boucles imbriquées


Les boucles imbriquées permettent d’effectuer des opérations plus complexes que ce que
permettent les boucles simples et, par exemple, d’effectuer à chaque étape de la boucle "mère"
une série d’instruction donnée par la boucle "fille". L’exemple 25 utilise cette possibilité.
La structure générale d’une boucle imbriquée à deux niveaux est la suivante :
local i=1
while ‘i’<=10 {
local j=1
while ‘j’<=10 {
...
commandes utilisant ‘i’ et ‘j’
...
local j=‘j’+1
}
local i=‘i’+1
}
Exemple 25 : Création de variables en chaîne

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
}

6.7 foreach et forvalues


Les commandes foreach et forvalues permettent de programmer des boucles de façon
plus simple. On utilise par exemple foreach <nom-de-macro> in <liste d’éléments>.
Si la liste d’éléments a été stockée au préalable dans une autre macro locale, on écrira foreach
<nom-de-macro> of local <macroname>. Chaque élément de la liste est alors sto-
ckée dans la macro locale dont on a spécifié le nom. Par exemple :

Exemple 26 : foreach

unab liste : _all /*permet de stocker la liste des variables


sous la macro locale ‘liste’*/
foreach var of local liste {
summarize ‘var’, meanonly
display "la moyenne de ‘var’ est "r(mean)
}

Exemple 27 : foreach (2)

foreach mot in age diplome salaire {


summarize ‘mot’, meanonly
display "la moyenne de ‘mot’ est "r(mean)
}

La commande forvalues permet de boucler sur des valeurs numériques :

Exemple 28 : forvalues

forvalues nombre = 1/10 {


generate x‘nombre’=x/‘nombre’
}

82
c V. Simonnet et A. Terracol, 2014
Exemple 29 : forvalues (2)

forvalues nombre = 0(10)100 {


count if age>‘nombre’
}

Notez qu’on utilise le signe = à la place de « in » ou « of ».

6.8 Création de commandes


Il est possible de créer ses propres programmes et commandes que l’on pourra ensuite utili-
ser comme n’importe quelle autre commande de Stata. Pour créer une nouvelle commande, on
utilise program define suivi du nom de la commande que l’on souhaite créer ; puis la suite
des instructions à effectuer, et on termine par end. L’exemple ci-dessous définit un programme
qui affiche l’heure.

Exemple 30 : Hello world

program define helloworld


display "Hello, world"
end

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 :

Exemple 31 : Utilisation de syntax

program define creeln


syntax varlist
foreach word of varlist ‘varlist’ {


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 .

6.9 Estimation par maximum de vraisemblance


Stata permet à l’utilisateur de définir et de maximiser ses propres fonctions de vraisem-
blances à l’aide de la commande ml model.
Plusieurs méthodes sont offertes :

• la méthode lf, la plus simple, ne nécessite que l’écriture de la fonction de log-vraisemblance,


chaque observation étant considérée comme une contribution à cette fonction.

• 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).

• la méthode d1, semblable à d0, nécessite l’écriture du gradient.

• la méthode d2, quant à elle, nécessite l’écriture du gradient et du hessien.

Nous ne traiterons ici que de la méthode lf.

Les étapes de la création d’un programme de maximisation de vraisemblance sont les sui-
vantes :

1. Écrire soigneusement sa log-vraisemblance « à la main » (étape évidente mais impor-


tante).

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).

3. Et enfin, programmer le tout...

2. C’est généralement C:/ado/personal

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).

2. Éventuellement définir des variables intermédiaires temporaires (double précision) qui


seront stockées sous formes de macros locales et ensuite appelées dans la fonction de
log-vraisemblance.

3. Repérer le nombre de variables dépendantes (généralement une seule) qui seront ensuite
nommée $ML_y1, $ML_y2...

4. Remplacer ensuite ‘lnf’ par son expression.

Ne pas oublier de faire précéder les commandes de quietly afin de ne pas surcharger la fe-
nêtre d’output.

Après avoir définit notre programme de vraisemblance, comment l’utiliser ?


On l’appelle à l’aide de la commande ml model de la façon suivante :

ml model méthode 3 nom_de_la_commande (variable(s) dépendante(s) = variables indépendantes) 4


| {z }
équation 1
(... = ...) ...
| {z }
équation 2

puis, éventuellement

ml check si on veut que Stata vérifie la cohérence du programme 5 .

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

Rappelons que la fonction de vraisemblance d’un modèle probit est :


 Y  1−Y
Xβ −Xβ
Φ .Φ
σ σ

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 :

— Combien d’équations ? Une seule (Xβ ).

— Combien de variables dépendantes ? Une seule

On peut maintenant écrire le programme :

capture program drop myprobit 7


program define myprobit 8
args lnf xb 9
quietly replace ‘lnf’=ln(normprob(‘xb’)) if $ML_y1==1 10
quietly replace ‘lnf’=ln(normprob(-‘xb’)) if $ML_y1==0 11
end

On va maintenant utiliser notre programme pour estimer un probit sur la base auto.dta
fournie avec Stata.

ml model lf myprobit (foreign = price mpg weight) 12


ml maximize

Nous allons maintenant programmer une estimation linéaire, exemple plus complexe car elle
comprends deux équations (Xβ et σ ).

7. Permet de supprimer le programme de la mémoire de Stata si on doit le corriger.


8. Notre programme s’appelle donc "myprobit"
9. On définit les arguments de la fonction de log-vraisemblance
10. Cas où la variable dépendante est égale à 1
11. Cas où la variable dépendante est égale à 0
12. foreign est donc notre variable dichotomique dépendante ($ML_y1 dans le pro-
gramme), et price mpg weight sont les variables explicatives

86
c V. Simonnet et A. Terracol, 2014
Exemple 33 : Estimation linéaire

La fonction de log-vraisemblance s’écrit :


  
y − Xβ
LL = ln φ − ln (σ )
σ
où y est la variable dépendante (continue).

Étudions maintenant cette fonction :

— Combien d’équations ? Deux (Xβ et σ ).

— Combien de variables dépendantes ? Une seule

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.

On peut maintenant écrire le programme :

capture program drop lineaire


program define lineaire
args lnf xb lnsigma 13
tempvar sigma 14
quietly generate double ‘sigma’=exp(‘lnsigma’)
quietly replace ‘lnf’=ln(normd(($ML_y1-‘xb’)/‘sigma’))-‘lnsigma’
end
et on appelle le programme pour la maximisation :

ml model lf lineaire (price = foreign mpg) () 15

ml maximize

6.10 Monte-Carlo et bootstrap


Stata permet d’implémenter assez facilement les méthodes de simulations de Monte-Carlo,
ainsi que le calcul des écarts-type par la méthode du bootstrap.
13. xb correspondra à Xβ et lnsigma à ln (σ )
14. On définit une variable temporaire appelée sigma
15. La spécification de la seconde équation est vide car elle ne comporte qu’une constante


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>

L’exemple 34 présente le code permettant de vérifier « expérimentalement » les propriétés


des estimateurs des MCO

Exemple 34 : Propriétés des MCO

program define mco, rclass /*L’option rclass indique/*


*/ que l’on va sauver des scalaires dans des r()*/
syntax ,obs(integer) /*on crée une option pour indiquer
le nombre d’observations souhaité*/
capture drop _all /*On supprime la base en mémoire*/
set obs ‘obs’ /*On crée le nombre d’observations souhaité*/
drawnorm x1 x2 epsilon /*On tire dans une loi normale*/
quietly generate y = 1+x1+x2+epsilon /*Processus générateur*/
quietly regress y x1 x2 /*On estime le modèle*/
return scalar beta0=_b[_cons] /*on stocke le coeff de /*
/* la constante*/
return scalar beta1=_b[x1] /*on stocke le coeff de x1*/
return scalar beta2=_b[x2] /*on stocke le coeff de x2*/
end

Si on souhaite executer le programme 1000 fois, avec un nombre d’observations de 100, on


tapera :

simulate beta0=r(beta0) beta1=r(beta1) beta2=r(beta2), /*


/*reps(1000): mco, obs(100)

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)

Kernel density estimate


Normal density

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

C LEVES , M., G OULD , W. et G UTIERREZ , R. (2004). An Introduction to Survival Analysis


Using Stata. Stata Press.

G OULD , W., P ITBLADO , J. et S RIBNEY, W. (2006). Maximum likelihood estimation with Stata.
Stata Press, 3rd édition.

M ITCHELL , M. (2004). A Visual Guide to Stata Graphics. Stata Press.

S TATA C ORP (2009). Stata 11 Complete Documentation Set. Stata Press.

UCLA ACADEMIC T ECHNOLOGY S ERVICES (2006). « Regression with Stata ». Web book.
http ://www.ats.ucla.edu/stat/stata/webbooks/reg/default.htm.

91

Vous aimerez peut-être aussi