Mémento Stata
Transcription
Mémento Stata
Formation à Stata 10 Memento Benoît Rapoport © Benoît Rapoport 2013 Page 1 Introduction Stata est un logiciel de statistiques et d'économétrie - très complet (avec des fonctions graphiques étendues), - très convivial (avec depuis Stata 8.0 des menus déroulants), - très souple, - très dynamique, (une version complète tous les 2 ans intégrant chaque fois de véritables innovations + 1 à 2 versions intermédiaires), - qui dispose d'une communauté d'utilisateurs très active ayant créé de nombreux modules additionnels. Il intègre depuis Stata 9.0 un logiciel matriciel de plus en plus complet (Mata). Remarque préliminaire importante : à partir de Stata 8, toutes les commandes (y compris l'ensemble de leurs options) peuvent être lancées à partir des menus déroulants. Ceci permet de faire ce qu'on veut alors qu'on ne connaît pas précisément la syntaxe. Par ailleurs, la commande lancée à l'aide du menu déroulant est automatiquement traduite dans la fenêtre de résultats. Il est donc possible de la récupérer pour l'insérer dans un programme. Ceci est en particulier utile pour les graphiques, en raison du grand nombre d'options. Cette notice n’est qu’un recueil de quelques commandes utiles. Pour le détail et des exemples, on se réfèrera à la documentation Stata La version actuelle de Stata est Stata 12 (juillet 2011). Les exemples décrits dans cette notice concernent Stata 10.1 mais sont valables pour la plupart aussi pour Stata 11.2. Par ailleurs, on peut toujours utiliser les syntaxes anciennes avec une version de Stata plus récente : les versions récentes lisent les syntaxes anciennes. Remarque TRES importante : Stata différencie minuscules et majuscules. Remarque sur la notation des commandes. En dehors de l'appel des poids (pondération – voir plus bas) ce qui figure entre [] est optionnel. En revanche, ne figurent que la syntaxe et les options principales. Les détails peuvent être trouvés dans l'aide. Ce qui est souligné donne l'abréviation minimale de la commande ou de l'option. La plupart d'entre elles en possèdent un. © Benoît Rapoport 2013 Page 2 1 1.1 Prise en main du logiciel : éléments épars Configuration des fenêtres On configure les fenêtres à la souris et on peut sauvegarder la configuration. Fenêtre résultat (en haut à droite) : affiche le résultat des commandes. Fenêtre de commande "Command" (en bas à droite) : permet de taper les commandes de façon interactive qui sont exécutées avec la touche Entrée. Fenêtre de variables "Variables"(en bas à gauche) : liste les variables avec leurs caractéristiques (format, label…). Il suffit de cliquer sur l'une d'elles pour qu'elle soit saisie dans la fenêtre de commande. Fenêtre de commandes passées "Review" (en haut à gauche) : affiche chacune des commandes exécutées. Il suffit de cliquer sur l'une d'elles pour la rappeler dans la fenêtre de commande. On peut aussi les rappeler avec les touches Up et Down. On peut les envoyer directement dans un fichier de programme ("do-file", voir plus loin), ou les copier. Remarque : Très pratique : ce que vous avez fait avec la barre d'outils ou le menu déroulant s'affiche automatiquement dans la fenêtre de commandes passées "Review". © Benoît Rapoport 2013 Page 3 On peut choisir le thème (les couleurs et polices des fenêtres) et le sauvegarder sous forme de préférences. A noter : la barre de menus (en haut) et la barre d'outils (juste en dessous) avec quelques commandes élémentaires. 1.2 Définition de la taille du buffer de l'ascenseur de la fenêtre de résultats La taille du buffer de l'ascenseur de la fenêtre de résultats doit être définie (elle est très faible par défaut). ► Instruction : set scrollbufsize # 10000 <= # <= 500000 Peut être réglé dans le menu déroulant. Effectif seulement à la session suivante. 1.3 Choix du répertoire de travail sysdir – sysdir set permet de voir quels sont les répertoires du système utilisés par Stata (sysdir) et les modifier (sysdir set). cd chemin et/ou nom_de_répertoire permet de modifier le répertoire de travail actuel (mettre entre " " si le chemin contient des espaces). 1.4 Taille de la mémoire allouée : set mem Stata charge les bases en mémoire vive, ce qui rend les opérations assez rapides. L'inconvénient est qu'il faut disposer de beaucoup de RAM (ce qui n'est plus un problème maintenant) ou avoir des fichiers de petite taille. Il faut définir la taille de la mémoire allouée à Stata. Il n'est pas possible d'ouvrir un fichier excédant la taille de la mémoire allouée. On peut allouer plus que la RAM, mais le supplément est pris sur la mémoire virtuelle (disque dur), ce qui ralentit considérablement le logiciel. Il est recommandé de ne pas allouer plus de 2/3 de la RAM. Stata charge tout en mémoire vive : la base active, mais aussi les commandes exécutées et les matrices créées. De plus, de nombreuses commandes créent des variables temporaires. Il faut donc prévoir de la marge. ► Instruction : set memory 30m (fixe la taille de la mémoire à 30 méga de RAM). Si on veut la fixer de façon permanente à 30m, on ajoute l'option "permanent" : set memory 30m, permanent (ou set mem 30m, permanent) On peut fixer la taille de la mémoire par défaut dans le raccourci : Dans la ligne de la cible du raccourci, on ajoute /m# ou /k# où # est la taille de la RAM allouée (en méga ou kilo). Exemple : I:\Stata10\wsestata.exe /m200 (alloue 200m). © Benoît Rapoport 2013 Page 4 1.5 Format de stockage des variables Variables numériques type Minimum Maximum bytes -------------------------------------------------------byte -127 100 1 int -32,767 32,740 2 long -2,147,483,647 2,147,483,620 4 float -1.70141173319*10^38 1.70141173319*10^38 4 double -8.9884656743*10^307 8.9884656743*10^307 8 ------------------------------------------------------- La précision pour float est 3.795x10^-8. La précision pour double est 1.414x10^-16. Variables alphanumériques (string) Longueur type maximum Bytes -------------------------------str1 1 1 str2 2 2 ... . . ... . . ... . . str244 244 244 ---------------------------------- 1.6 Réduction du format de stockage des variables Il est nécessaire de régulièrement réduire au maximum le type de stockage des variables pour éviter de surcharger la mémoire : ne pas stocker sur 8 bytes (format double) une indicatrice qui pourrait être stockée sur 1 byte (format byte). ► Instruction : compress 1.7 Garder trace de ce qu'on a fait Stata ne conserve pas dans un fichier le contenu de la fenêtre de résultat. On peut copier-coller le contenu ou une partie de la fenêtre de résultats, c'est parfois pratique. Ou ouvrir un log – avec l'icône de la barre d'outil, ou avec la commande log using "chemin et nom du fichier". 2 formats : log (conseillé car permet d'ouvrir le fichier comme un txt) et smcl (formaté). 1.8 L'aide On accède à l'aide en utilisant le menu déroulant, ou en tapant dans la fenêtre de commande help nom_de_la_commande. L'aide en ligne décrit la syntaxe et donne quelques exemples et références. L'aide papier est beaucoup plus complète, donnant en particulier les formules et des exemples détaillés. A partir de Stata 11, l'aide papier et l'aide en ligne fusionnent sous forme de fichiers pdf fournis avec le logiciel. © Benoît Rapoport 2013 Page 5 1.9 La mise à jour Taper update query permet de savoir si Stata est à jour. Il faut suivre ensuite les suggestions de Stata pour la mise à jour. Note : on ne peut généralement pas mettre soi-même à jour une licence réseau (à moins d’avoir des droits). © Benoît Rapoport 2013 Page 6 2 2.1 Structure générale d’une commande Structure générale d'une commande Les commandes d'estimations ont généralement la syntaxe suivante [by varlist1:] command [varlist2] [in exp] [if exp] [[aw ou pw ou fw ou iw = varname]] [, options] Attention : il ne faut pas mettre les [] : ils signifient juste que ce qui est à l'intérieur est optionnel. Sauf pour les poids (d'où les doubles []) : en fait, les [] sont réservés dans Stata aux poids. Ce qui est en gras correspond à des mots réservés par Stata. Ce qui est en italique sont des arguments. in et if restreignent le champ (cf. infra). by varlist exécute la commande pour toutes les combinaisons des variables de varlist1 (cf. infra). Exemple : summarize [varlist] [in exp] [if exp] [weight] [, options] options possibles detail : affiche des statistiques supplémentaires meanonly : supprime l’affichage et calcule seulement la moyenne (option pour programmeurs) format : utilise le format d’affichage de la variable separator(#) : tire une ligne de séparation toutes les # variables Ce qui est souligné dans le nom de commande et dans les options est le raccourci (minimal) : su, sum, summ etc. fonctionnent. 2.2 Les expression by, if et in if permet de définir une condition et d'appliquer une commande seulement aux observations vérifiant la condition. in permet de restreindre le champ de l'instruction à un sous-ensemble d'observations. by permet d'implémenter une commande selon les différentes combinaisons d'une liste de variables. Il faut trier d'abord la base selon la liste de variables ou alors utiliser bysort. by fonctionne avec la plupart des commandes. & et | sont utilisés pour exprimer le ET (&) et la OU (|) dans l'expression de conditions. Remarque importante : Il y a deux types d'égalité sous Stata : l'égalité de définition (=) et l'égalité d'évaluation de condition (==) dont le contraire est (!= ou ~=). Exemples : voir section 5. © Benoît Rapoport 2013 Page 7 3 3.1 Manipulation élémentaire de fichiers Extension des bases Stata Les bases Stata ont pour extension dta. 3.2 use : ouvrir un fichier de format Stata (.dta) use "chemin et nom du fichier", clear use "C:\Program Files (x86)\Stata11\auto.dta" open dans le menu déroulant. 3.3 Lecture de bases de données d'un autre format que Stata Stata peut lire différents formats de fichiers. Les fichiers bruts avec une virgule ou une tabulation comme séparateurs : insheet using filename.txt (ou using filename si l'extension est .raw). Si la première ligne donne le nom des variables, elle est automatiquement utilisée. Les fichiers bruts avec une virgule ou une tabulation ou un espace comme séparateurs : infile varlist using filename.txt (ou using filename si l'extension est .raw). Il faut donner le nom des variables dans varlist. S'il y a des variables alphanumériques il faut les signaler par strX où X est le nombre de caractères (infile str6 nom_individu varlist using filename.txt (dans varlist figurent les variables autres). Les fichiers bruts de format fixé : Soit avec la commande infile et un dictionnaire (.dct) Soit la commande infix similaire à celle utilisée par SAS pour lire ce type de fichiers. On peut aussi copier (copier/coller) une feuille excel (ou une sélection) dans l'éditeur de Stata. Il faut que le séparateur décimal soit un point (non une virgule sinon les données sont copiées sous forme de chaînes de caractères). Il faut d’abord ouvrir l’éditeur (voir ci-dessous 2.4) Stata permet aussi de lire directement des fichiers SAS XPORT (commande fdause). On peut utiliser aussi Stat Transfer (ou d’autres logiciels). Ce logiciel permet de convertir des bases d'un grand nombre de formats dans un autre format (SAS, Stata, Excel…). Les exportations peuvent se faire avec les commandes outfile et outsheet ou Stat/transfer (ou sous format SAS XPORT avec Stata 8 : commande fdsave). 3.4 Sauvegarder une table save ["chemin et nom du fichier"] [, replace] ou avec la barre d'outils. © Benoît Rapoport 2013 Page 8 3.5 Ouvrir une table pour la regarder browse [varlist] [if] [in] permet de la regarder. edit [varlist] [if] [in] permet de l'éditer et donc de la modifier directement (à éviter généralement). Les commandes peuvent agir sur une sélection de variables et/ou d'observations (cf. 2.2). 3.6 Examiner une table et les variables (caractéristiques) describe [varlist] [, short] décrit de façon synthétique les variables (format, label). Avec l'option short, on a seulement les éléments importants sur le fichier (nom, taille, nombre d'observations). codebook [varlist] décrit de façon détaillée les variables. list [varlist] [if] [in] : produit une liste des variables sélectionnées pour toutes les observations (ou celles sélectionnées). 3.7 Examiner les variables (statistiques) summarize [varlist] [, detail] : comme proc means ; l'option detail donne des éléments supplémentaires sur la distribution. tabulate varname ou tabulate varname1 varname2 : comme proc freq Voir infra tabsum (tab varname1, su(varname2)), tables et tabstat qui permettent d'avoir d'autres types de tableaux de fréquence. © Benoît Rapoport 2013 Page 9 4 4.1 Manipulation avancée de fichiers sort : trie le fichier sort varlist : trie le fichier dans l’ordre croissant les variables de la varlist. gsort : permet de trier par ordre décroissant (plus lent que sort). 4.2 merge : assemble des fichiers Étape 1 : trier les deux fichiers : sort varlist Étape 2 : merge varlist using "chemin et nom du fichier" Avec cette syntaxe, Stata assemble les premières observations de chaque fichier qui ont une varlist commune, puis les deuxièmes etc. D'autres possibilités sont offertes avec les options. Rq : La syntaxe a changé avec Stata 11 : merge a:b varlist using "chemin et nom du fichier" avec a, b = 1 ou m (ex : merge 1:m… : 1 observation dans le fichier maître et m dans le fichier secondaire). 4.3 append : met bout à bout des fichiers append using "chemin et nom du fichier" 4.4 reshape : transforme des données en lignes en données en colonnes Exemple : (wide form) -i------- x_ij -------id sex inc80 inc81 inc82 ------------------------------1 0 5000 5500 6000 2 1 2000 2200 3300 3 0 3000 2000 1000 (long form) -i- -j-x_ijid year sex inc ----------------------1 80 0 5000 1 81 0 5500 1 82 0 6000 2 80 1 2000 2 81 1 2200 2 82 1 3300 3 80 0 3000 3 81 0 2000 3 82 0 1000 reshape convertit les données d'une forme à l'autre: © Benoît Rapoport 2013 Page 10 4.5 reshape long inc, i(id) j(year) (1ère forme à 2ème forme) reshape wide inc, i(id) j(year) (2ème forme à 1ère forme) keep/drop : comme leur nom l'indique keep/drop [varlist] pour garder/éliminer des variables. keep/drop [if] [in] pour garder/éliminer des observations. On ne peut faire les deux en même temps. 4.6 collapse : produit des fichiers de moyennes, écarts-types etc. Exemple : collapse (mean) age education (median) wage, by(county) Produit un fichier avec autant d'observations que de modalités de la variable "county" et 4 variables : county, age (qui est l'âge moyen dans le comté), education (qui est l'éducation moyenne dans le comté) et wage qui est le salaire médian dans le comté. On met entre parenthèses la statistique désirée que l'on fait suivre de la liste de variables concernées. Attention, le fichier actif est automatiquement remplacé par un nouveau fichier actif. Si on veut conserver le précédent, le sauvegarder et l'enregistrer il faut utiliser preserve/restore (cf. infra). 4.7 preserve/restore A la différence de SAS, il n'y a sous Stata qu'un seul fichier actif. preserve "met de côté" le fichier courant. On peut alors travailler dessus, en effacer une partie etc. Ensuite, restore permet de restaurer le fichier initial. Exemple : la commande collapse permet de créer un fichier de moyennes, par exemple (il y a beaucoup d'autres statistiques disponibles, voir doc). preserve collapse (mean) age education (median) wage, by(county) save toto restore © Benoît Rapoport 2013 Page 11 5 5.1 Création de variables Introduction Il y a deux types d'instructions pour créer des variables selon la fonction que l'on utilise (voir l'aide en ligne). Note : il existe d’autres façons de créer des variables. generate/replace Note : en souligné est indiqué le raccourci. La plupart des commandes ont un raccourci. egen (extension to generate)/replace Syntaxe : generate newvar = fonction egen newvar = fonction generate est utilisée avec les opérateurs usuels, les fonctions mathématiques (numériques (trigonométrie, arrondi…), dates ou alphanumériques) ou statistiques, et quelques fonctions spéciales, egen avec certaines fonctions particulières (en particulier des fonctions statistiques un peu plus compliquées). Exemples : g sum_mob = sum(x) sum_mob pour l'observation i est la somme des x de 1 à i. egen sum = total(x) sum pour l'observation i est la somme des x de 1 à n. g sum1_3 = x1 + x2 + x3 sum1_3 est la somme des variables x1, x2 et x3, si l'une des variables est manquante pour l'observation i, le résultat est manquant pour i. egen sum1_3b = rowtotal(x1 x2 x3) x1, x2 et x3, les manquantes sont traitées comme des 0. sum1_3b est la somme des variables Remarque : total et rowtotal ont remplacé sum et rsum dans Stata 10 et supérieurs. Exemples : g femme = 1 if sex == 2 crée la variable femme qui prend la valeur 1 si la variable sex vaut 2 et est manquante sinon. g femme = sex == 2 crée la variable femme qui prend la valeur 1 si la variable sex vaut 2 et la valeur 0 sinon. S'il y a plusieurs conditions, il faut mettre des () : g femme_30a50ans = (sex == 2 & age >= 30 & age <= 50) g essai = 1 in 1/50 crée la variable essai qui prend la valeur 1 pour les 50 premières observations. by ident_menage: egen revenu_menage = sum(revenu) crée la variable de revenu du ménage qui est la somme des revenus des membres du ménage. © Benoît Rapoport 2013 Page 12 Auparavant on aura écrit sort ident_menage Stata 8 (et > 8) permet décrire directement : bysort ident_menage: egen revenu_menage = total(revenu) 5.2 Une variable est modifiée par replace replace femme = 0 if sex == 1 On peut aussi utilise recode : recode femme . = 0 5.3 Les formats de variable Numériques : int, float, double Chaînes de caractère (variable alphanumérique) : string (ex str2 : chaîne de 2 caractères) Dates (voir doc). Les formats sont gérés en général automatiquement. Dans un programme, il vaut mieux créer les variables numériques sous forme double (avec la plus grande précision) pour limiter les problèmes d'arrondi. Cela peut-être important quand on a des critères d'arrêt dans une boucle ou pour les matrices. On peut ensuite utiliser la commande compress. g double logsal = log(sal) Les commandes destring variable et tostring variable, permettent de transformer une variable alphanumérique en variable numérique et inversement, dès lors que les modalités prises par la variable alphanumérique sont toutes réelles. Remarque importante : les valeurs manquantes (missing) sont désignées par un . (ou "" s'il s'agit d'une variable alphanumérique). Sous Stata, cela correspond à +∞, ce qui diffère de SAS : donc la condition "x > 2" prend toutes les valeurs supérieures à 2, y compris les valeurs manquantes (il faut préciser "& x != ." si on veut les exclure). 5.4 Abréviations et listes de variables De même que les commandes et les options possèdent généralement une abréviation (souvent la ou les premières lettres), on peut abréger une variable en utilisant les premières lettres de son nom, il faut que ces premières lettres suffisent à l'identifier (exemple : si on a education et educ14 comme variable, educ ne suffit pas mais educa et educ1 suffisent). En outre les raccourcis suivants existent : x-y : prend toutes les variables entre x et y dans l'ordre du fichier x* : prend toutes les variables commençant par x (on peut aussi utiliser *x ou x1*x2 ou x? etc.) © Benoît Rapoport 2013 Page 13 5.5 Les étiquettes ("labels") On peut appliquer un label - à une base : label data "description". - à une variable : label variable "description". - aux modalités d'une variable qualitative o label define sexe 1 "homme" 2 "femme" (on définit le label). o label values sex sexe (on attache le label à la variable) © Benoît Rapoport 2013 Page 14 6 Statistiques descriptives Les différentes commandes autorisent un grand nombre d'options, on n'en cite ici que quelques unes, généralement les plus utiles. On omet ici les if et autres in qui sont permis mais optionnels. Par ailleurs, ces commandes peuvent être combinées avec le préfixe by: (exemple : bysort sex: su revenu). 6.1 Statistiques élémentaires summarize [varlist] [, detail] (rappel) ; l'option detail donne des éléments supplémentaires sur la distribution. tabulate varname ou tabulate varname1 varname2 (rappel) tabulate varname, gen(prefix) donne le tableau de fréquence et crée des indicatrices pour les différentes modalités qui auront pour noms prefix1, prefix2 etc. L'option chi2 permet de faire un test du χ 2 (Pearson) entre les deux variables avec la deuxième syntaxe. tab1 varlist donne un tableau de fréquence pour chaque variable de la liste. tab2 varlist [, column row nofreq cell] donne un tableau de fréquence croisé pour chaque paire de variables de la liste ; les options permettent de contrôler les grandeurs présentées. 6.2 Tableaux croisés de statistiques plus élaborés tab varname1, su(varname2) la commande tabsum donne des statistiques descriptives pour la variable varname2 pour toutes les modalités de varname1. table rowvar [colvar [supercolvar]], contents(clist)] donne jusqu'à 5 statistiques descriptives décrites dans clist pour toutes les modalités de rowvar [colvar [supercolvar]]. clist a la forme suivante stat varname ; exemple : mean revenu table sex, c(mean revenu median revenu mean age) tabstat varlist [, by(varname) statistics(statname…)] donne des statistiques (par défaut la moyenne) pour une série de variables (varlist) en séparant éventuellement selon une autre variable (varname). 6.3 Coefficients de corrélation correlate [varlist] [, covariance] affiche la matrice de corrélations ou de variances-covariances avec l'option covariance. pwcorr [varlist] affiche les coefficients pour toutes les paires de variables (traite les manquants pour chaque paire séparément tandis que correlate traite les manquants globalement). © Benoît Rapoport 2013 Page 15 6.4 Tests d'égalité de moyennes et de variances ttest varname1, by(varname2) teste l'égalité des moyennes de varname1 pour les deux modalités de varname2 avec l'option unequal : relâche l'hypothèse de variance identique dans les deux groupes. ttest varname1 = varname2 teste l'égalité des moyennes de varname1 et de varname2 avec l'option unequal : relâche l'hypothèse de variance identique dans les deux groupes. avec l'option unpaired : signifie que les deux variables ne représentent pas des grandeurs identiques (comme par exemple deux mesures de la même chose). ttest varname1 = # teste l'égalité de la moyenne de varname1 au réel #. On a le même genre de tests sur les variances avec sdtest. © Benoît Rapoport 2013 Page 16 7 Les poids sous Stata 4 types de poids : fw : "frequency weights" : poids de réplication : obligatoirement des entiers aw : "analytic weights" : utilisés quand les observations sont elles-mêmes des moyennes d'observations dont le nombre est connu. pw : "probability (sampling) weights" iw : "importance weights" : traités comme aw, mais non renormalisés. Les poids sont pris en compte en écrivant variable_de_poids] à la fin de la commande. (exemple avec aw) : [aw = Exemple : su wage [fw = poids_de_la_strate] Attention : toutes les commandes ne prennent pas tous les types de poids, consulter l'aide en ligne. © Benoît Rapoport 2013 Page 17 8 8.1 Les graphiques Introduction Depuis Stata 7 ou 8, un gros effort a été porté à l'élaboration des graphiques qui sont devenus tout à fait acceptables. Depuis le logiciel intègre même la possibilité d'éditer les graphiques augmentant encore la souplesse. Stata offre de larges possibilités de types de graphiques avec une multitude d'options. De manière générale, je conseille l'utilisation des menus déroulants, bien plus pratique que la recherche de la syntaxe des options dans l'aide. Comme la ligne de commande est à l'exécution retraduit dans la fenêtre "review", il est possible de la récupérer pour la modifier dans la fenêtre de commande et de l'intégrer dans un programme. On peut régler les préférences graphiques (par exemple, l'allure générale) dans le menu des préférences graphiques. © Benoît Rapoport 2013 Page 18 8.2 Les types de graphiques proposés par Stata Stata permet histogrammes, boîtes, camembert, nuages de points, lignes… Dans la plupart des cas, il est nécessaire de préciser si la variable est discrète ou continue. Par exemple, pour les histogrammes, le logiciel doit gérer un découpage du support si la variable est continue. Le menu présente pour chaque graphique différents onglets et différentes cases à cocher ou à remplir. Il est possible de choisir : o Le type de graphique, les variables concernées o Les caractéristiques visuelles du graphique (exemples : couleurs, types de connexion entre les points) o Le champ utilisé o Le format des axes o Le format de la légende, des titres, sous-titres etc. o Les poids o Des options générales ou spécifiques au type de graphique o … © Benoît Rapoport 2013 Page 19 Une fois choisis le graphique et les options, il suffit de soumettre (submit) ses spécifications et le graphique est affiché dans une fenêtre séparée. La commande est traduite dans la fenêtre de "review". Syntaxe générale respectivement pour une seule et deux variables : graph type_graphe varname, options twoway type_graphe varname1 varname2, options En fait on peut dans la plupart des cas se passer du mot graph et du mot twoway. © Benoît Rapoport 2013 Page 20 Types de graphiques unidimensionnels Graphiques en secteurs (pie) graph pie, over(education) 10 16 12 20 Graphiques en bâtons (bar, hbar, dot) : bâtons verticaux, horizontaux ou points sur des axes, on peut choisir la statistique. 0 10 mean of wagefull 20 30 graph bar (mean) wagefull, over(education) 10 12 16 20 Boîtes à moustaches (box, hbox) : verticales ou horizontales 0 10 wagefull 20 30 40 50 graph box wagefull, over(education) 10 © Benoît Rapoport 2013 12 16 20 Page 21 Histogramme (histogram, kdensity) : (attention considéré comme twoway) Exemple Graphique 1 : histogram education, discrete fraction Exemple Graphique 2 : histogram wagefull Graphique 2 : variable continue 0 0 .1 .02 Density Fraction .2 .04 .3 .4 .06 Graphique 1 : variable discrète 10 15 education 0 20 10 20 30 40 50 wagefull Types de graphiques bidimensionnels Nuages de points pour 2 variables continues (scatter, line, connect, area) : nuages, lignes s'il n'y a qu'un seule y pour chaque x (et en particulier si x a un ordre), et points connectés entre eux 0 10 wagefull 20 30 40 50 twoway scatter wagefull age 20 30 40 age 50 60 line le year line le_w le_b year ou bien twoway (line le_w year) (line le_b year) cette syntaxe permet de gérer séparément les options. Il faut trier par la variable x si nécessaire. © Benoît Rapoport 2013 Page 22 line avec plusieurs courbes 30 50 40 50 life expectancy 60 60 70 70 80 80 line avec une seule courbe 40 1900 1920 1940 1960 1980 2000 Year 1900 1920 1940 1960 1980 2000 Life expectancy, whites Year Life expectancy, blacks Séries chronologiques (dot, spike, dropline) Il y a d'autres possibilités… Avec les options, on peut faire des pyramides des âges, des barres empilées, représenter la droite de régression (lfit) avec le nuage de points, ajouter l'intervalle de confiance (lfitci), tracer des fonctions spécifiques… 8.3 Personnalisation des graphiques Les options permettent de personnaliser le graphique. Exemple Graphique 1b : histogram education, discrete fraction addlabel ytitle(Proportion) ytitle(, size(medium) color(green) orientation(horizontal)) ylabel(, angle(horizontal) format(%9.0g)) xtitle(Niveau d'éducation) xtitle(, size(medium) color(green)) title(Répartition du niveau d'éducation, size(medium) color(sienna)) Exemple Graphique 2b : histogram wagefull, bin(50) normal ylabel(, angle(horizontal)) xtitle(Salaire) title(Salaire de réserve) subtitle(Femmes) Graphique 1b : variable discrète Graphique 2b : variable continue Répartition du niveau d'éducation Salaire de réserve .4 Femmes .06 .332 .304 .2975 .3 Density .04 Proportion .2 .02 .1 .0665 0 0 10 15 Niveau d'éducation © Benoît Rapoport 2013 20 0 10 20 30 40 50 Salaire Page 23 8.4 Sauvegarde et édition Le format des graphiques Stata est gph (c'est l'extension par défaut), mais il est possible de choisir différents formats d'enregistrement en particulier windows metafiles (wmf) ou enhanced metafiles (emf) qu'on peut insérer dans un document word. On peut utiliser les menus dans la fenêtre de graphique. Sinon, la commande est graph save ["chemin, nom du fichier [extension]"][, replace] On peut aussi utiliser l'option saving directement dans la syntaxe du graphique line le year, saving(nom du fichier, replace) Le graphique peut être édité On peut alors modifier à la main, couleurs, disposition etc. 8.5 Combiner des graphiques On peut mettre plusieurs graphiques sur le même ensemble, quand on stratifie, en particulier. histogram wagefull, bin(50) normal ylabel(, angle(horizontal)) xtitle(Salaire) by(, title(Salaire de réserve) subtitle(Femmes)) by(married) © Benoît Rapoport 2013 Page 24 Salaire de réserve Femmes Non Oui Density .06 .04 .02 0 0 20 40 60 0 20 40 60 Salaire Density normal wagefull Graphs by married Plus généralement, on peut combiner des graphiques différents et pas seulement du même type pour différentes modalités d'une variable de stratification. Si on a sauvegardé plusieurs graphiques (sur le disque) avec pour nom par exemple g1, g2, on peut utiliser la commande graph combine suivie du nom des fichiers avec l'extension .gph. graph combine g1.gph g2.gph g3.gph Si on ne veut pas sauvegarder les graphiques on peut simplement les stocker en mémoire avec l'option naming(nom du fichier, replace), puis utiliser la commande graph combine suivie du nom des fichiers (sans l'extension .gph). graph combine g1 g2 g3 © Benoît Rapoport 2013 Page 25 9 9.1 Modèles de régression simples Structure générale d'une commande d'estimation Les commandes d'estimations ont généralement la syntaxe suivante [by varlist:] command varname varlist [in exp] [if exp] [[aw ou pw ou fw ou iw = varname]] [, options] Attention : il ne faut pas mettre les [] : ils signifient juste que ce qui est à l'intérieur est optionnel. Sauf pour les poids (d'où les doubles []) : en fait, les [] sont réservés dans Stata aux poids. 9.2 Modèle de régression linéaire Commande regress exemple : regress salaire age education [pw = poids] if sex == 1 bysort sex: regress salaire age education [pw = poids] On peut choisir le mode de calcul de la matrice de variances-covariances avec l'option vce(vce_type). Par exemple, vce_type peut être 9.3 o robust (matrice de White corrigeant pour la présence d'hétéroscédasticité). o cluster varname (relâche l'hypothèse d'indépendance des observations, par exemple si la même personne est interrogée plusieurs fois, ou si plusieurs observations appartiennent à la même entité (ménage, entreprise…). varname contient le nom de la variable identifiant l'entité). Expansion de variables qualitatives La plupart des commandes autorisent l'expansion de variables qualitatives. Par exemple : xi: regress y x1 x2 i.x3 régresse y sur x1, x2 et la série d'indicatrices construite à partir de la variable x3. Voir la doc pour d'autres possibilités (croisement de qualitatives ou de qualitatives et de quantitatives). La modalité de référence est la plus fréquente par défaut, mais elle peut être choisie. Attention aux ":" après xi. Stata crée alors les variables indicatrices correspondantes commençant par le préfixe _I (peut être changé). Ces variables sont temporaires et effacées dès que Stata rencontre un nouveau xi. Il ne faut donc pas nommer des variables commençant par _I qui seraient alors effacées du fichier. © Benoît Rapoport 2013 Page 26 9.4 Estimation d'une variable dichotomique (probit, logit) Le modèle probit suppose que le terme d'erreur est distribué normalement, tandis que le modèle logit suppose qu'il est distribué selon la loi logistique. La syntaxe est simplement : probit travaille age education married logit travaille age education married probit travaille age education married Iteration Iteration Iteration Iteration 0: 1: 2: 3: log log log log likelihood likelihood likelihood likelihood = = = = -1266.2225 -1176.8804 -1176.3896 -1176.3896 Probit regression Number of obs LR chi2(3) Prob > chi2 Pseudo R2 Log likelihood = -1176.3896 = = = = 2000 179.67 0.0000 0.0709 -----------------------------------------------------------------------------travaille | Coef. Std. Err. z P>|z| [95% Conf. Interval] -------------+---------------------------------------------------------------age | .0353986 .0040167 8.81 0.000 .0275261 .0432711 education | .0523707 .0105444 4.97 0.000 .0317041 .0730373 married | .1795113 .0673504 2.67 0.008 .047507 .3115156 _cons | -1.607623 .1728399 -9.30 0.000 -1.946383 -1.268863 ------------------------------------------------------------------------------ dprobit calcule les effets marginaux des variables explicatives. dprobit travaille age education married Iteration Iteration Iteration Iteration 0: 1: 2: 3: log log log log likelihood likelihood likelihood likelihood = = = = -1266.2225 -1176.8804 -1176.3896 -1176.3896 Probit regression, reporting marginal effects Log likelihood = -1176.3896 Number of obs LR chi2(3) Prob > chi2 Pseudo R2 = 2000 = 179.67 = 0.0000 = 0.0709 -----------------------------------------------------------------------------travai~e | dF/dx Std. Err. z P>|z| x-bar [ 95% C.I. ] ---------+-------------------------------------------------------------------age | .0125873 .0014222 8.81 0.000 36.208 .0098 .015375 educat~n | .0186224 .0037444 4.97 0.000 13.084 .011284 .025961 married*| .0646766 .024548 2.67 0.008 .6705 .016563 .11279 ---------+-------------------------------------------------------------------obs. P | .6715 pred. P | .6842687 (at x-bar) -----------------------------------------------------------------------------(*) dF/dx is for discrete change of dummy variable from 0 to 1 z and P>|z| correspond to the test of the underlying coefficient being 0 La commande logit donne les coefficients pour une régression logistique. La commande logistic quant à elle, donne les ratios d'occurrence (odd-ratios). © Benoît Rapoport 2013 Page 27 Après un logit (probit), la prédiction par défait (predict) donne la probabilité prédite. 9.5 Réaffichage des résultats En retapant le nom de la dernière commande d'estimation qui a été exécuté, Stata, réaffiche les resultats. Taper dprobit après un probit fonctionne car Stata n'a pas besoin de refaire l'estimation. De même taper reg, robust après une régression fonctionne et Stata affiche les résultats avec les écarts-types robustes (note : ne marche pas pour toutes les estimations). © Benoît Rapoport 2013 Page 28 10 Estimation sous contraintes : constraint On peut vouloir imposer des contraintes aux paramètres lorsque l'on fait une estimation (par exemple parce que notre modèle théorique nous impose une relation entre eux). On utilise d'abord la commande constraint pour définir la contrainte. constraint [define] # [exp=exp | coeflist] Example : Une seule équation : on contraint les coefficients de var1 et var2 à être identiques : constraint 1 var1 = var2 Une seule équation : on contraint le coefficient de var1 à 1 : constraint 2 var1 = 1 Plusieurs équations : on contraint les coefficients de var1 et var2 dans l'équation eq1 à être nuls : constraint 3 [eq1]: var1 var2 Une seule équation : on contraint le coefficient de var1 à être le même dans les équations eq1 et eq2 : constraint 4 [eq1 = eq2]: var1 Ensuite on met l'option constraint(#) après la commande. On met une seule contrainte ou une liste. regress endog var1 var2 var3, constr(1) regress endog var1 var2 var3, constr(1-2) © Benoît Rapoport 2013 Page 29 11 Commandes post-estimation Après une estimation, il est possible d'exécuter un certain nombre de commandes relatives à cette estimation. 11.1 Récupérer les grandeurs après l'estimation La plupart des commandes d'estimation sont des commande de type "e-class", ce qui signifie que les résultats sont stockés dans des macros de type e() dont on obtient la liste après une estimation en tapant ereturn list. En particulier, les coefficients sont stockés dans une matrice appelée e(b) et la matrice de variances-covariances est e(V). Attention : il s'agit de macros temporaires qui sont remplacées dès qu'on exécute une autre commande. Il faut donc les stocker autrement si on veut les conserver (voir l'exemple de programmation, voir aussi la doc pour d'autres méthodes). 11.2 predict : prédiction post-estimation Ce qu'on peut prédire dépend du modèle : résidus, valeurs prédites, index, probabilités etc. De même la grandeur par défaut dépend du modèle : par exemple, la prédiction linéaire après les MCO ou la probabilité estimée après un probit. La syntaxe est predict varname [, options] options permet de préciser le type de la grandeur. predict varname, re : si on veut les résidus. Il s'agit d'une prédiction out-of-sample. Si on veut une prédiction in-sample, il faut le préciser : predict varname if e(sample). e(sample) est un marqueur qui prend la valeur 1 si l'observation a été utilisée pour l'estimation et est manquant sinon. 11.3 test : tests post-estimation On écrit le test (test de Wald) après la commande, exactement comme il s'écrit. Par exemple : après reg y x1 x2 x3 test x1 = x2 teste l'égalité des coefficients de x1 et x2 test x1 = 1 teste que le coefficient de x1 est différent de 1 test (x1 = x2) (x1 = x3) teste l'égalité des coefficients de x1 et x2 et l'égalité des coefficients de x1 et x3 La succession des deux tests suivants est équivalente au test précédent test x1 = x2 test x1 = x3, accum Il faut préciser l'équation quand il y en a plusieurs (voir la doc). Exemple après une "seemingly unrelated regression" (modèle de Zellner, commande sureg) sureg (price foreign mpg displ) (weight foreign length) test de significativité de la variable foreign dans l'équation de prix © Benoît Rapoport 2013 Page 30 test [price]foreign test que la variable foreign est jointement nulle dans les deux équations test [price]foreign [weight]foreign test que la variable foreign est identique dans les deux équations (test croisé) test [price]foreign = [weight]foreign La commande testnl permet de faire des tests non linéaires. Dans ce cas on écrit testnl _b[x1]/_b[x2] = _b[x3] © Benoît Rapoport 2013 Page 31 12 Présentation des différents formats de données : coupe, panel, modèles de durée, séries temporelles Sauf pour les données en coupe, il faut généralement définir les données selon le format qu'elles ont. En effet, Stata a besoin d'informations spécifiques, dans la plupart des cas. 12.1 Données en coupe 12.2 Données de panel Les commandes sont nommées xtquelquechose. xtcommand, i(varnamei) t(varnamet) Pour les versions Stata antérieure à 10.0, on peut aussi définir auparavant iis varnamei tis varnamet Pour Stata 10, on peut utiliser la commande xtset : xtset varnamei [varnamet] Avec cette syntaxe, on peut omettre varnamet si l'ordre n'a pas d'importance (plusieurs employés d'une même entreprise, par exemple) ; il faut en revanche la préciser s'il y a une dimension temporelle (une même personne observée à différentes dates). L'avantage d'utiliser xtset est qu'il n'est alors pas nécessaire de repréciser les i(varnamei) et t(varnamet) à chaque commande utilisée. Exemples : xtreg y x1 x2, i(indiv) estime un modèle de régression linéaire à effet fixe. xtreg y x1 x2, i(indiv) re aléatoire. estime un modèle de régression linéaire à effet 12.3 Données de durée Les données de ce type doivent être déclarées comme telles à l'aide de la commande stset (voir la doc pour la description complète). stset timevar, failure(failvar[ == numlist]) origin(time exp) enter(time exp) id(varname) timevar est la variable de durée failvar est la variable d'événement/failure (optionnelle, si elle n'est pas précisée, on suppose que tous les enregistrements finissent par l'événement ; sinon, 0 et missing signifient une censure et toutes les autres valeurs de failvar l'évènement), numlist donne la liste des valeurs signalant l'événement (toutes les autres valeurs signifient une censure). © Benoît Rapoport 2013 Page 32 origine indique quand l'individu est à risque. id est utilisé quand il y a plusieurs enregistrements par individu (une ligne par enregistrement). enter indique quand l'individu est observé pour la première fois. La plupart des commandes pour les modèles de durée s'écrivent stcommand (exemple streg). 12.4 Séries temporelles Les données de ce type doivent être déclarées comme telles à l'aide de la commande tsset (voir la doc pour la description complète). tsset timevar, format(%fmt) tsset timevar, daily tsset timevar, weekly etc. Ensuite un grand nombre de commandes sont disponibles. Stata permet d'utiliser la plupart des opérateurs temporels standards (ex. L. est l'opérateur retard ; on peut les utiliser de façon synthétique L(1/3).varname signifie L.varname L2.varname L3.varname). 12.5 Survey data Données par strates ou cluster. Les variables identifiant les strates ou clusters doivent être déclarées (voir doc). © Benoît Rapoport 2013 Page 33 13 Analyse de survie 13.1 Déclaration des données de type modèles de durée : stset Les données de ce type doivent être déclarées comme telles à l'aide de la commande stset. Syntaxe de base stset timevar, failure(failvar[ == numlist]) origin(time exp) enter(time exp) id(varname) timevar est la variable de durée failvar est la variable d'événement/failure (optionnelle, si elle n'est pas précisée, on suppose que tous les enregistrements finissent par l'événement ; sinon, 0 et missing signifient une censure et toutes les autres valeurs de failvar l'évènement), numlist donne la liste des valeurs signalant l'événement (toutes les autres valeurs signifient une censure). origine indique quand l'individu est à risque. id est utilisé quand il y a plusieurs enregistrements par individu (une ligne par enregistrement). enter indique quand l'individu est observé pour la première fois. Les différentes formes du fichier Les données de survie que l'on peut traiter avec Stata peuvent prendre différentes formes. On peut avoir un seul enregistrement par personne ou plusieurs / avoir de la censure ou non / un seul évènement ou plusieurs Données avec un seul enregistrement par personne +----------------------------+ | failtime load bearings | |----------------------------| 1. | 100 15 0 | 2. | 140 15 1 | 3. | 97 20 0 | +----------------------------+ failtime est la durée jusqu'à l'évènement, les autres variables des covariables. On suppose ici que l'évènement est toujours observé. On déclare avec stset failtime © Benoît Rapoport 2013 Page 34 Données avec un seul enregistrement par personne et censure 1. 2. 3. 4. +-------------------------------------+ | failtime load bearings failed | |-------------------------------------| | 100 15 0 1 | | 140 15 1 0 | | 97 20 0 1 | | 122 20 1 1 | +-------------------------------------+ failtime est la durée jusqu'à l'évènement ou la censure, failed indique si l'évènement a eu lieu (observations 1, 3, 4) ou non (censure observation 2) ; les autres variables sont des covariables. On déclare avec stset failtime, failure(failed) Données avec plusieurs enregistrements par personne 1. 2. 3. 4. 5. 6. +------------------------------------------------------------+ | id year age died stime surgery posttran wait | |------------------------------------------------------------| | 1 67 30 1 50 0 0 0 | | 2 68 51 1 6 0 0 0 | | 3 68 54 0 16 0 0 1 | | 3 68 54 1 16 0 1 1 | | 4 68 40 0 39 0 0 36 | |------------------------------------------------------------| | 4 68 40 1 39 0 1 36 | +------------------------------------------------------------+ Le 4ième individu a 2 enregistrements : - l'un allant de t = 0 à t = 36 durant lequel il a survécu (died = 0) et pour lequel la variable posttran vaut 0 - l'un allant de t = 36 à t = 39 à la fin duquel il décède (died = 1) et pour lequel la variable posttran vaut 1 On déclare avec stset t, failure(died) id(id) Données avec plusieurs enregistrements par personne et plusieurs évènements 1. 2. 3. 4. 5. 6. +------------------------------------------------------------+ | id year age code stime surgery posttran wait | |------------------------------------------------------------| | 1 67 30 402 50 0 0 0 | | 2 68 51 286 6 0 0 0 | | 3 68 54 208 16 0 0 1 | | 3 68 54 401 16 0 1 1 | | 4 68 40 204 39 0 0 36 | | 4 68 40 401 39 0 1 36 | +------------------------------------------------------------+ © Benoît Rapoport 2013 Page 35 La variable code indique le type d'évènement. Pour des données médicales, ça pourrait indiquer si le patient a eu une complication / laquelle / est décédé / est guéri etc. On déclare avec stset day, failure(code == 402) id(patid) On indique ainsi quels sont les codes qui signalent l'évènement (le décès ici). Données avec plusieurs enregistrements par personne enregistrant la date d'entrée et la date courante (ou le jour d'entrée et le jour courant) plutôt que la durée 1. 2. 3. 4. 5. 6. +------------------------------------------+ | id year age code curday addday | |------------------------------------------| | 1 67 30 402 292 287 | | 2 68 54 286 300 298 | | 2 68 54 208 308 . | | 2 68 54 401 311 . | | 4 68 40 204 297 294 | | 4 68 40 401 307 . | +------------------------------------------+ Les variables adday et curday code indiquent le jour d'admission (seulement pour le premier épisode) et le jour de la fin de chacun des épisodes. On peut avoir des dates au lieu des jours, ça ne change rien. On déclare avec stset curday, failure(code == 402) id(patid) origin(time adday) Il se peut que le patient ne soit pas à risque dès son entrée, mais seulement après un certain évènement – par exemple une opération – qui est signalée par une variable (ou un code particulier de la variable décrivant le type d'évènement). On déclare avec stset curday, failure(code == 402) id(patid) origin(code == 208) Ici l'information avant que l'individu ne soit à risque n'est pas pertinente. Dans ces deux cas, stata renormalise la durée de façon à ce qu'elle prenne la valeur 0 dès que le sujet est à risque. 13.2 Description : stdescribe Produit un résumé des données de survie. 13.3 stfill stfill permet de remplir les différentes lignes d'un même individu lorsque celles-ci n'ont pas été remplies systématiquement. Par exemple, le sexe n'a peut-être été enregistré que pour la première ligne. stfill varlist [if] [in], {baseline|forward} © Benoît Rapoport 2013 Page 36 L'option baseline indique qu'on l'on remplit toutes les lignes du même identifiant avec l'information de la première ligne (à utiliser typiquement quand les variables ne varient pas dans le temps). L'option forward indique qu'on l'on remplit toutes les lignes du même identifiant avec l'information de la dernière ligne où les variables de varlist sont renseignées. 13.4 Estimateur de Kaplan-Meier : sts graph La commande sts graph permet de tracer l'estimateur de Kaplan-Meier de la fonction de survie, l'estimateur de Nelson-Aalen de la fonction de hasard cumulé (option cumhaz) et la fonction de hasard (option hazard). sts graph sts graph, cumhaz sts graph, hazard Elle peut être combinée avec l'option by(varlist), ce qui permet de tracer les fonctions pour plusieurs groupes. L'option adjustfor(varlist) permet de tracer des courbes ajustées. Par exemple, supposons que l'on compare la survie de personnes ayant ou non suivi un traitement. Si la distribution des âge n'est pas identique dans les deux groupes, on comparera des choses non-comparables puisque les plus âgés décèdent plus rapidement qu'ils aient ou non suivi le traitement. L'option permet de corriger de ceci. 13.5 Modèles de survie paramétriques : streg La syntaxe de base est : streg varlist Principales options Par défaut le modèle estimé est le modèle exponentiel. On peut changer pour d'autres modèles avec l'option distribution distribution(exponential) : distribution exponentielle distribution(gompertz) : distribution Gmpertz distribution(loglogistic) ou llogistic : distribution log-logistique distribution(weibull) : distribution Weibull distribution(lognormal) ou lnormal : distribution lognormale distribution(gamma) : distribution gamma généralisée On peut ajouter de l'hétérogénéité inobservée avec l'option frailty. Deux formes de distributions sont possibles : gamma et invgaussian (gaussienne inverse). frailty(gamma | invgaussian) © Benoît Rapoport 2013 Page 37 Remarque : la distribution définie par l'option distribution est gardée en mémoire ; de même que l'option frailty, tant que l'on ne change pas de distribution. Autres options On peut stratifier l'estimation avec l'option strata(varname) ; dans ce cas les coefficients des variables explicatives sont identiques d'une strate à l'autre, mais les constantes et les paramètres auxiliaires peuvent varier. L'option n'est pas disponible si on a spécifié l'option frailty. L'option offset(varname) permet de contraindre le coefficient de la variable varname à 1. Quand on a choisi l'option frailty, on peut ajouter l'option shared(varname) qui indique que les observations ayant la même varname partage aussi la même valeur de la distribution précisée dans l'option frailty. Note : cette option n'est pas disponible avec la distribution gamma (distribution(gamma)), les matrices de variances-covariances robust, opg et les clusters, ainsi que le préfixe svy. ancillary(varlist) spécifie que les paramètres auxiliaires des Weibull, lognormal, Gompertz, et log-logistic et le premier paramètre auxiliaire (sigma) de la distribution gamma généralisée soient estimés comme étant des combinaisons linéaires de varlist. anc2(varlist) spécifie que le second paramètre auxiliaire (kappa) de la distribution gamma généralisée soit estimé comme étant une combinaison linéaire de varlist. 13.6 Modèles de survie semi-paramétriques : stcox stcox estime un modèle de Cox à hasards proportionnels. stcox [varlist] [if] [in] [, options] Les principales options sont les suivantes estimate : modèle sans covariable. strata(varnames) : variables identifiant la strate .(mêmes coefficients mais hasards de base différents. shared(varname) : variables identifiant la frailty partagée (même valeur d’hétérogénéité inobsevée (distribution gamma). offset(varname) inclut une variable dont le coefficient est constraint à 1 tvc(varlist) : signale les explicatives qui varient dans le temps. texp(exp) : multiplicateur pour les explicatives qui varient dans le temps ; le défaut est texp(_t). nohr : reporte les coefficients et non les hazard-ratios. On peut aussi choisir la façon dont les évènements qui arrivent en même temps sont traités. 13.7 Test d'égalité des fonctions de survie : sts test On peut tester l'égalité des fonctions de survie (plusieurs types de tests peuvent être choisis) entre deux ou plusieurs groupes définis par une varlist. sts test varlist © Benoît Rapoport 2013 Page 38 Ce test peut être fait par strates avec l'option strata(varlist). Avec l'option detail on obtient en plus du test total, le test strate par strate. Par exemple, par défaut, la commande effectue le test du logrank. L'option cox effectue le test de Cox, etc… 13.8 Taille d'échantillon nécessaire : stpower La commande stpower permet de déterminer la taille de l'échantillon nécessaire pour détecter un effet. Elle est disponible avec le modèle de cox (stpower cox), le modèle exponentiel (stpower exponentiel) et la comparaison de deux fonctions de survie (stpower logrank). (voir des exemples variés dans la doc). Avec le modèle de cox, on cherche à déterminer la taille minimale de l'échantillon nécessaire pour détecter un taux de hasard donné (l'effet d'une variable donnée). Il faut préciser le taux de hasard, le risque d'erreur (1ère espèce), la puissance (2ième espèce) et l'écart-type de la variable. stpower cox, hratio(#) sd(#) power(#) alpha(#) stpower cox, hratio(3) sd(0.75) power(0.95) alpha(0.001) Avec le modèle exponentiel, on cherche à déterminer la taille minimale de l'échantillon nécessaire pour détecter une réduction du hasard donnée. stpower exponential 0.4, hratio(0.5) On peut aussi se baser sur la différence des logs des hasards. stpower exponential 0.4, hratio(0.5) loghazard On peut aussi choisir les risques de 1ère et 2ième espèce avec les options alpha(#) et power(#). Avec stpower logrank, on peut déterminer la taille de l'échantillon nécessaire pour comparer des fonctions de survie : stpower logrank 0.2, hratio(0.6667) power(0.9) Donne la taille nécessaire pour détecter un ratio de hasard de 0.6667, quand le taux de survie (à 5 ans par exemple) est à la base de 20%. Utile quand on connaît le taux de survie, par exemple d'un traitement, et qu'on a un taux de survie cible pour un autre traitement ; la commande permet alors de © Benoît Rapoport 2013 Page 39 déterminer la taille nécessaire de l'échantillon pour l'identifier (avec une puissance de 90% dans cet exemple). Inversement, si on précise la taille de l'échantillon avec l'option n(#), on obtient la puissance du test. © Benoît Rapoport 2013 Page 40 14 Modèles de comptage : poisson, nbreg poisson depvar indepvars [, exposure(varnamee) offset(varnameo) irr] estime une régression de Poisson de la variable depvar sur les variables indepvars. Note : voir d'autres options dans la doc/l'aide. irr transforme les coefficients en ratios de taux d'incidence. exposure(varnamee) indique la durée d'exposition. offset(varnameo) signale une variable dont on veut contraindre le coefficient à 1. En général, si on dispose de la durée d'exposition, le nombre d'évènements sera proportionnel à la durée (varnamee). Dans ce cas : exposure(varnamee) inclut la variable ln(varnamee) en contraignant son coefficient à 1. Si on a déjà le log de l'exposition, on précisera plutôt : offset(varnameo) ou varnameo est ce log. estat gof produit un test de goodness-of-fit après une régression. nbreg depvar indepvars [, exposure(varnamee) dispersion(mean | constant)] offset(varnameo) estime une régression négative binomiale de la variable depvar indepvars. irr sur les variables dispersion(mean | constant) spécifie la paramétrisation du modèle : la dispersion est soit une fonction de l'espérance de la moyenne (c'est le cas par défaut), soit une constante. Note : la commande gnbreg (régression négative binomiale généralisé permet de paramétrer le paramètre du processus en fonction de variables explicatives). zip depvar indepvars, inflate(varlist[, exposure(varnamee) offset(varnameo) irr] offset(varname)] [, estime une régression de Poisson à zéro prépondérant (ZIP – zéro-inflated Poisson) de la variable depvar sur les variables indepvars. L'option inflate(varlist) permet de préciser les variables jouant sur la probabilité d'avoir 0. zinb depvar indepvars, inflate(varlist[, offset(varname)] [, exposure(varnamee) offset(varnameo) irr dispersion(mean | constant)] estime une régression négative binomiale à zéro prépondérant (ZINB – zéro-inflated negative binomiale) de la variable depvar sur les variables indepvars. L'option inflate(varlist) permet de préciser les variables jouant sur la probabilité d'avoir 0. © Benoît Rapoport 2013 Page 41 15 Séries temporelles : introduction 15.1 Déclaration des données de type séries temporelles : tsset Les données de ce type doivent être déclarées comme telles à l'aide de la commande tsset (voir la doc pour la description complète). tsset timevar, format(%fmt) tsset timevar, daily tsset timevar, weekly etc. 15.2 Retardées, avances Stata permet d'utiliser la plupart des opérateurs temporels standards (ex. L. est l'opérateur retard ; on peut les utiliser de façon synthétique L(1/3).varname signifie L.varname L2.varname L3.varname). Pour pouvoir les utiliser il faut que les données aient été déclarées comme séries temporelles. Stata traite alors un retard (par exemple) en fonction du pas qui a été déclaré (le mois par exemple). On peut utiliser les opérateurs en créant des variables (gen varret = L.var) ou directement dans une commande (reg dep var L.var). Le L est l'opérateur retard ; F l'opérateur avance ; D l'opérateur différence et S l'opérateur différence saisonnière 15.3 Représentation graphique des séries, corrélogrammes : tsline, corrgram tsline permet de tracer la série. tsline varname La commande permet de tabuler l'autocorrélogramme et les commandes ac et pac de tracer les corrélogrammes et les corrélogrammes partiels. Par exemple, sur des données mensuelles, on peut trace le corrélogramme (graphique des autocorrélations) avec les intervalles de confiance. ac varname, lag(24) Cela permet d'observer s'il y a une tendance et une saisonnalité. Ensuite, on peut tracer le corrélogramme partiel en tenant compte de la tendance et de la saisonnalité. pac DS12.varname, lag(24) (par exemple avec une saisonnalité annuelle – tous les 12 mois) L'option lag(#) permet de choisir le nombre d'autocorrélations à calculer. © Benoît Rapoport 2013 Page 42 15.4 Estimation : séries univariées Il y a 4 estimateurs pour les séries temporelles univariées sous Stata : newey et prais qui sont peu utilisés aujourd'hui et arima (modèles arma avec perturbations autorégressives à moyenne mobile) et arch (modèles autorégressif conditionnellement hétéroscédastiques – volatilité non constante). Processus autorégressif (AR) L'expliquée dépend de ses p retardées (5 dans l'exemple). arima varname, ar(5) Processus à moyenne mobile (MA) L'expliquée est une fonction d'un terme d'erreur et des q retardées de ce terme d'erreur (3 dans l'exemple). arima varname, ma(4) Processus autorégressif à moyenne mobile (ARMA) On mêle les deux. arima varname, ar(5) ma(4) On peut vouloir désaisonnaliser auparavant (ici avec une saisonnalité de 12 mois) : arima S12.varname, ar(5) ma(4) On peut aussi vouloir prendre en compte un éventuel trend : arima DS12.varname, ar(5) ma(4) Modèle arch (voir la doc) De manière la plus générale, la variable expliquée peut dépendre d'explicatives, d'une combinaison linéaire de fonctions des variances retardées des termes d'erreur et d'un processus Arma. La fonction peut être choisie. Par exemple, le modèle ARCH le plus simple (avec un retard de 1) suppose que l'expliquée dépend du résidu au carré retardé. arch D.varname, arch(1) On peut ajouter les termes ar et ma arch D.varname, arch(1) ar(1) ma(1 4) 15.5 Modèles multivariés (introduction) Dans certains cas, on veut pouvoir lier différentes variables (expliquer une série par d'autres) pour déterminer des causalités. Stata permet d'estimer le modèle VAR (vector autoregressive) et le modèle SVAR (structural vector autoregressive) pour les séries stationnaires et des modèle à corrections d'erreur (VEC) pour les séries cointégrées. var dln_inv dln_inc dln_consump, dfk var D.ln_inv D.ln_inc D.ln_consump, dfk © Benoît Rapoport 2013 Page 43 var D.ln_inv D.ln_inc D.ln_consump, dfk lags(1/3) Les trois variables sont estimées simultanément (en différence première). Dans la première ligne, on a d'abord crée les différences premières ; dans la seconde on utilise l'opérateur différence D. Dans la troisième, on utilise les 3 premières retardées au lieu de deux premières (par défaut). On peut supposer que certaines de variables sont exogènes : var D.ln_inc D.ln_consump, dfk exog(D.ln_inv) © Benoît Rapoport 2013 Page 44 16 Tables pour épidémiologistes 16.1 Les proportions : proportion La commande proportion varlist donne une estimation (avec les écarts-type et les intervalles de confiance) des catégories identifiées par les variables de varlist. L'option over(varlist) permet de produire les proportions pour différents groupes définis par une varlist. On peut obtenir des proportions standardisées avec les options stdize(varname) qui indique que les estimations doivent être standardisées selon les strates (définies par une variable) et stdweight (varname)qui définit la variable de poids à utiliser. proportion groupage Proportion estimation Number of obs = 48 -------------------------------------------------------------| Proportion Std. Err. [95% Conf. Interval] -------------+-----------------------------------------------groupage | 0 | .1666667 .0543607 .0573071 .2760262 1 | .5625 .0723605 .4169295 .7080705 2 | .2708333 .064821 .1404304 .4012363 -------------------------------------------------------------- 16.2 Les tables d'épidémiologie : ir, cs, cc, mcc, tabodds, mhodds Enquêtes de cohorte ir cas expose temps cas signale l'évènement (indicatrice), expose le fait d'être exposé (indicatrice) et temps la durée d'observation. Produit un tableau résumant le nombre de cas exposés, les durées d'exposition, les taux d'incidence, la différence et le ratio des taux d'incidence, les fractions attribuables à l'exposition pour la population des exposés et l'ensemble de la population. Le tableau donne aussi les intervalles de confiance pour ces statistiques. Note : La commande se transpose en fractions empêchées plutôt qu'attribuables quand le ratio des taux d'incidence est inférieur à 1 (incidence plus importante chez les non-exposés). Les données peuvent être des données agrégées (nombre d'exposés, nombre de non-exposés et les nombres de personnes-années correspondants, on a alors 2 ou plusieurs lignes), ou bien des données individuelles (indicatrice d'exposition, indicatrice d'occurrence de d'évènement et durée d'observation), Stata se chargeant alors d'agréger les données. © Benoît Rapoport 2013 Page 45 L'option by(varlist) permet de produire une analyse stratifiée (par exemple par sexe ou par tranche d'âge). On obtient alors le ratio des taux d'incidence pour chaque strate, le ratio pour l'ensemble (crude) et le ratio qui tient compte du fait qu'il n'est pas nécessairement identique entre les strates, l'estimateur de Mantel-Haenszel (~ équivalent à celui qu'on obtiendrait en faisant une régression de Poisson en contrôlant pour les strates). On obtient aussi un test d'homogénéité de la durée de l'exposition entre les strates. Les options estandard, istandard et standard(varname) spécifient que l'on souhaite des estimations standardisées, c'est-à-dire corrigeant de la différence de structure selon les facteurs de confusion (exemple de la structure par âge). L'option estandard permet de choisir des poids proportionnels à la population des non-exposés (standardisation externe) et istandard permet de choisir des poids proportionnels à la population des exposés (standardisation interne). standard(varname) permet de choisir ses propres poids (si on veut choisir une autre population de référence). La commande existe sous forme immédiate : iri a b N1 N2. a est le nombre de cas parmi les exposés, b parmi les non-exposés, N1 et N2 les durées totales d'observation correspondantes. ir died transplant stime | Heart Transplant | | Exposed Unexposed | Total -----------------+------------------------+-----------Survival Status | 45 30 | 75 Survival Time [D | 28653 3285 | 31938 -----------------+------------------------+-----------| | Incidence Rate | .0015705 .0091324 | .0023483 | | | Point estimate | [95% Conf. Interval] |------------------------+-----------------------Inc. rate diff. | -.0075619 | -.0108619 -.0042619 Inc. rate ratio | .1719715 | .1059858 .2827181 Prev. frac. ex. | .8280285 | .7172819 .8940142 Prev. frac. pop | .7428612 | +------------------------------------------------(midp) Pr(k<=45) = 0.0000 (midp) 2*Pr(k<=45) = 0.0000 (exact) (exact) (exact) (exact) cs cas expose Lorsque l'on ne dispose pas de la durée d'observation, mais seulement du nombre de cas et de non-cas à la fois pour les exposés et les non-exposés, on normalise les ratios, non à l'aide de la durée d'observation mais à l'aide du nombre de sujets. La variable cas signale si l'individu est un cas et la variable expose s'il a été exposé. Si ce ne sont pas des données individuelles, mais des données agrégées, il faut une troisième variable pop qui signale l'effectif. La commande s'écrit alors cs cas expose [pw = pop]. On a alors le même type de sortie qu'avec ir et de la même façon on peut travailler avec des données stratifiées et aussi obtenir des estimations standardisées. © Benoît Rapoport 2013 Page 46 cs died transplant | Heart Transplant | | Exposed Unexposed | Total -----------------+------------------------+-----------Cases | 45 30 | 75 Noncases | 24 4 | 28 -----------------+------------------------+-----------Total | 69 34 | 103 | | Risk | .6521739 .8823529 | .7281553 | | | Point estimate | [95% Conf. Interval] |------------------------+-----------------------Risk difference | -.230179 | -.3862481 -.0741099 Risk ratio | .7391304 | .5981945 .9132712 Prev. frac. ex. | .2608696 | .0867288 .4018055 Prev. frac. pop | .1747573 | +------------------------------------------------chi2(1) = 6.10 Pr>chi2 = 0.0135 Enquêtes de type cas-témoins (case-control data) cc cas expose [pw = pop] La variable cas signale si l'individu est un cas et la variable expose s'il a été exposé et si ce ne sont pas des données individuelles, mais des données agrégées, il faut une troisième variable pop qui signale l'effectif. La commande donne la proportion d'exposés parmi les cas et les témoins, l'odd-ratio avec un intervalle de confiance et les fractions attribuables (parmi les exposés et la population). Donne aussi la statistique de Fisher testant l'égalité du ratio à 1. Là aussi on peut stratifier avec l'option by(varlist). Note : il est possible de choisir la façon d'approximer les intervalles de confiance à l'intérieur de chaque strate. cc died transplant, by(age40) age40 | OR [95% Conf. Interval] M-H Weight -----------------+------------------------------------------------0 | .1242236 .0028176 .9381898 4.128205 (exact) 1 | .2142857 .0259293 1.557739 2.8 (exact) -----------------+------------------------------------------------Crude | .25 .0579606 .8427891 (exact) M-H combined | .1606218 .0420441 .6136256 ------------------------------------------------------------------Test of homogeneity (M-H) chi2(1) = 0.16 Pr>chi2 = 0.6846 Test that combined OR = 1: Mantel-Haenszel chi2(1) = Pr>chi2 = © Benoît Rapoport 2013 8.10 0.0044 Page 47 Le test d'homogénéité est "non-significatif" ce qui indique qu'a priori l'occurrence des cas (décès) peut varier avec l'âge, mais qu'on ne peut pas rejeter l'hypothèse que les odds ratios des exposés et des nonexposés (transplantés et non-transplantés) soient les mêmes dans les deux strates. Comme pour ir ou cc on peut obtenir des estimations standardisées avec les options estandard, istandard et standard(varname). tabodds cas niv_expose [fw = freq] Permet de traiter le cas de différents niveaux d'exposition décrit dans la variable niv_expose. La commande détermine pour chaque niveau le nombre de cas et de témoins, le ratio d'occurrence et son intervalle de confiance, ainsi qu'un test d'homogénéité. L'option graph permet d'obtenir la forme du lien. Elle produit aussi un test de tendance linéaire (score test). On peut ajuster le test en stratifiant par les facteurs de confusion possibles avec l'option adjust(varlist) ; on peut choisir la catégorie de référence avec l'option base(#). mhodds cas niv_expose group [fw = freq] Permet de contrôler pour des facteurs de confusion (variable group). Enquêtes de type cas-témoins appariés (matched case-control data) mcc cas expose [pw = pop] Note : fonction comme la plupart des autres commandes décrites ci-dessus, mais ne permet pas la stratification. On peut dans ce cas utiliser une régression logistique conditionnelle (clogit) pour obtenir des odds-ratios. On peut aussi utiliser mhodds. © Benoît Rapoport 2013 Page 48 17 Écriture d'un programme (fichier "do") Un "do file" n'est rien d'autre qu'une suite d'instructions. On peut y utiliser des macros locales ou globales (voir ci-dessous). 17.1 Macros locales et globales Les macros globales sous Stata (c'est-à-dire les variables qui n'existent que durant la session) se notent $nom_de_macro. Les macros locales sous Stata (c'est-à-dire les variables qui n'existent que durant le déroulement du programme) se notent `nom_de_macro'. Voir ci-dessous. 17.2 Boucles et conditionnement 17.2.1 if : commande de programmation if exp { liste de commandes } 17.2.2 foreach : boucle sur des éléments (items) foreach name in list { liste de commandes } Exemple : foreach X in mpg weight-turn { liste de commandes } exécute la liste de commande pour les deux éléments "mpg" et "weight-turn" Ceci n'a un sens que s'il est possible d'appliquer les commandes de la liste à l'élément "weight-turn", sinon il en résulte un message d'erreur (voir ci-dessous). foreach name of listtype list { liste de commandes } © Benoît Rapoport 2013 Page 49 Exemple : foreach X of varlist mpg weight-turn { liste de commandes } exécute la liste de commande pour les éléments "mpg" et toutes les variables entre weight et turn dans l'ordre du fichier : on a précisé que les items étaient des variables, on peut donc utiliser toutes les façons synthétiques de définir une liste de variables. A l'intérieur des accolades, on fait référence à l'élément courant en l'appelant du nom figurant après foreach placé entre des cotes : `X' Exemple : On veut estimer le même modèle pour plusieurs mesures du revenu foreach y in revenu1 revenu2 revenu3 { reg `y' x1 x2 x3 } 17.2.3 while : boucle jusqu'à ce qu'une condition soit remplie local i = 1 while `i' < 10 { liste de commandes local i = `i' + 1 } 17.2.4 forvalues : boucle sur des valeurs "consécutives" forvalues name = range { liste de commandes } Exemples pour range : 1/10 : tous les entiers de 1 à 10 1(2)10 : les entiers de 1 à 10 par pas de 2 (1-3-5...) voir d'autres possibilités. © Benoît Rapoport 2013 Page 50 18 Manipulation des matrices Il faut définir la taille maximale des matrices (40*40 par défaut sous intercooled Stata et 400*400 sous StataSE). set matsize # 10 <= # <= 800 (Intercooled Stata) ; 10 <= # <= 11000 (StataSE) 18.1 Définition Une matrice est définie de la façon suivante : matrix A = expression Par exemple, 1 2 3 4 matrix A = (1,2 \ 3,4) crée la matrice : matrix A = B + C Voir la doc pour les opérations sur les matrices. La virgule (,) sépare les colonnes et l'antislash (\) les lignes. On extrait de la façon suivante : matrix B = A[1,2..4], prend les éléments de la première ligne et des colonnes 2, 3, 4 matrix B = A[2…,2..4], prend les éléments des lignes 2 et plus et des colonnes 2, 3, 4 Si on a nommé les lignes et les colonnes, on peut donner le nom de la ligne ou de la colonne au lieu de son numéro. Le nom des lignes et colonnes a trois niveaux : le nom de l'équation, le nom de l'opérateur de série temporel, le nom de la colonne. Par exemple, on a fait un logit multinomial sur une variable à 3 modalités. Il y a deux équations et les colonnes de la matrice de variances-covariances s'appelleront eq1:var1, eq1:var2,…, eq2:var1, eq2:var2,… 18.2 "Accumulation" : mat accum On ne peut manipuler que les matrices de taille 800*800 au plus (11 000 avec StataSE). Toutefois, une commande permet de calculer le produit croisé de matrices. matrix accum A = varlist X' X X'1 . 1' X 1'1 permet de calculer A = X'X ou plus précisément © Benoît Rapoport 2013 Page 51 Pour avoir X'X, on peut soit extraire de A, soit préciser l'option noconstant (matrix accum A = varlist, noconstant) On peut calculer X'BX (ou B est une matrice diagonale par bloc) avec la commande matrix glsaccum On peut accumuler la première variable avec les autres de la liste (ie calculer x1'X où X = (x2, x3,…)) avec la commande matrix vecaccum A = varlist. Dans tous les cas, on peut préciser une variable de poids. Application : matrix accum A = y x1 x2 x3 A produit l'accumulation de y et de X = (x1, x2, x3, _cons) y' y y' X X' y X' X A peut s'écrire : ( y, X )' ( y, X ) = On obtient alors X'X et X'y matrix XX = A[2…,2…] matrix Xy = A[2…,1] On peut alors calculer l'estimateur des MCO : matrix b = syminv(XX)*Xy 18.3 Transformer une matrice en base et réciproquement : mkmat, svmat Permettent de transformer une matrice en base de données et réciproquement. 18.4 Récupération des matrices de coefficients et de variances-covariances après une estimation Dans la plupart des cas, la matrice de coefficients se récupère en écrivant matrix A = get(_b) Et la matrice de variances-covariances avec matrix A = get(VCE) Dans les programmes de classe e (par exemple regress), ces matrices sont stockées sous e(b) et e(V). Rq : après une commande, on peut lister avec la commande eret list (ereturn list) pour les commandes de classe e (comme les commande d'estimation, regress, probit…) ou return list pour les commandes de classe r (comme summarize) toutes les grandeurs sauvegardées et que l'on peut récupérer. Par exemple le R² est stocké sous la macro e(r2). Attention la syntaxe a changé : avant Stata 8, il fallait taper estimates list ou est list au lieu de eret list. © Benoît Rapoport 2013 Page 52 19 Ecriture d'une commande (fichier "ado") 19.1 Structure générale capture prog drop myreg drop le programme myreg capture permet l'exécution de la commande drop même si ce programme n'existe pas (en fait évite l'affichage d'un message d'erreur). De la même façon que Stata charge les bases en mémoire vive, Stata charge les commandes exécutées en mémoire vive : c'est alors le premier emplacement dans lequel Stata cherchera une commande. Donc si on modifie la commande, mais que l'on ne droppe pas la version précédente, c'est celle-ci qui sera appelée, même si on a écrasé le fichier .ado précédent. Quand la commande est stabilisée, on peut supprimer cette première ligne. program define myreg, eclass définition du programme et de sa classe, eclass indique que les résultats des estimations seront placées dans des macros de type e(). Aussi nclass, rclass et sclass existent. version 10.0 version de Stata (important : indique à Stata comment interpréter la syntaxe ce qui n'oblige pas à réécrire les programmes pour chaque version…). syntax varlist [if] (+ options) syntaxe (corps du programme) end (fin du programme) Ajouter byable(recall) : par nature, les programmes ne permettent pas d'utiliser l'instruction by. Pour que ce soit possible, il suffit d'ajouter dans la ligne de définition du programme l'option byable(recall). program define myreg, eclass byable(recall) Les programmes personnels (.ado) se placent généralement dans c:\ado\personal\. On peut aussi changer le répertoire par défaut : sysdir set PERSONAL "d:\ado\personal\" (pour que cette commande s'exécute à chaque session, l'enregistrer dans un profile.do que vous placerez en c:\ado\ ou dans le répertoire où se trouve wstata.exe ; vous pouvez y placer d'autres commandes comme set matsize 800 par exemple). 19.2 Macros locales et globales sous Stata Les macros globales sous Stata (c'est-à-dire les variables ou, plus généralement, des objets qui n'existent que durant la session) se notent $nom_de_macro. © Benoît Rapoport 2013 Page 53 Les macros locales sous Stata (c'est-à-dire les variables/objets qui n'existent que durant le déroulement du programme) se notent `nom_de_macro'. Ces macros doivent être déclarées avant utilisation ; par exemple global mname "string" local lclname "string" Pour les variables locales on utilise généralement plutôt tempvar varlist Les deux syntaxes global et local permettent toutefois l'utilisation de fonctions étendues (voir la doc). Les matrices, scalaires et fichiers locaux sont déclarés respectivement avec tempname (matrices et scalaires) et tempfile (fichiers). 19.3 Analyse de la syntaxe (parsing) gettoken Permet d'analyser la syntaxe ("parse") gettoken emname1 [emname2] : emname3, parse(pchars) prend le premier élément de la macro emname3, le met dans emname1, et si emname2 est précisé, met le reste dans emname2. Dans pchars figure le caractère séparant les éléments (par défaut " "). Exemple simple : programmation des MCO. Remarque : il y a d'autres façons d'analyser la syntaxe (voir doc) : ainsi tokenize met les éléments dans des macros locales 1, 2, …qui sont ensuite appelées en écrivant `1', `2',…. © Benoît Rapoport 2013 Page 54 20 Introduction au maximum de vraisemblance 20.1 Les méthodes Il y a 4 méthodes permettant la maximisation de la vraisemblance : lf, d0, d1, d2. lf (pour linear form, parce que ce qui passe du programme principal au programme annexe est directement les Xiβ, la vraisemblance doit donc s'écrire comme une fonction des Xiβ) se distingue des 3 autres méthodes en ce que les calculs se basent sur les vraisemblances individuelles (lnLi), et le résultat donné par le programme annexe est supposé être la somme des vraisemblances individuelles. Pour les 3 autres méthodes, Stata travaille directement sur la vraisemblance totale lnL. Donc, avec les méthodes d0, d1 et d2, la fonction de vraisemblance peut avoir des éléments qui ne sont indépendants que pour des groupes d'observations (exemple : données de panel) ; dans ce cas, il faut généralement calculer les contributions pour chacun des groupes (par exemple pour chacun des individus si on a des données de panel) en s'arrangeant pour enregistrer la contribution de l'individu dans la dernière ligne correspondant à cet individu, créer une indicatrice signalant quelle est la dernière ligne pour chaque individu et calculer la vraisemblance seulement pour ces lignes (avec une condition if dans la ligne où l'on écrit la commande mlsum, voir la doc de Stata et les exemples). La méthode lf passe directement les index (les Xiβ) alors que les méthodes d0, d1 et d2 passent les paramètres. On utilise alors la commande mleval pour générer les index (si nécessaire). Avec d0, on ne spécifie que la vraisemblance ; avec d1, on ajoute le gradient (d1debug est une méthode alternative qui permet d'afficher à chaque étape le gradient numérique et le gradient analytique afin de vérifier que ce dernier est correct) ; avec d2 (et d2debug), on spécifie en plus le hessien. Généralement lf fonctionne bien, mais dès qu'on a du panel, ou encore pour les modèles de durée, il faut utiliser généralement d0, d1 ou d2. d0 est la méthode la plus lente et la moins précise, mais la plus facile à implémenter. 20.2 La structure générale On écrit généralement 2 programmes : - la commande principale qui fixe la syntaxe et les options d'optimisation - le programme dans lequel on écrit la vraisemblance et le cas échéant, le gradient et le hessien. Voir les exemples : probit, tobit et tobit généralisé. Structure générale du programme principal La commande principale s'écrit comme un ado (voir section X). On y fait figurer en outre les commandes spécifiques à la maximisation de la vraisemblance, en particulier (voir les autres instructions dans la doc) : ml model method progname eq [weight] [if exp] [in range] [, options] method est lf, d0, d1 ou d2 © Benoît Rapoport 2013 Page 55 progname donne le nom du programme dans lequel la vraisemblance est définie (en général on lui donne le même nom que le programme principal et on ajoute _LL ou _ll). eq déclare les équations sous la forme ([eqname:] [varnames] = [varnames]) soit (nom l'équation: endogènes = exogènes) de /equame quand le paramètre n'est attaché à aucune variable (un sigma par exemple). Ceci est équivalent à (eqname:) Parmi les options, on peut préciser la technique d'estimation (depuis Stata 8 ou 9) : nr (le défaut), bhhh, dfp, bfgs) : technique(bhhh) ml search cherche les valeurs initiales ml init matname [, options] donne une matrice (ou des valeurs, cf doc) initiale(s) ml maximize [, options] parmi les options : * difficult si la vraisemblance est difficile à maximiser (plus lent car plus de sous itérations) * trace ; gradient ; hessien ; showstep : donnent les détails des itérations * iterate(#) (+ les options de tolérance, cf doc) : fixent le nombre d'itérations et les paramètres de sensibilité Structure générale du programme annexe Méthode lf program progname version 10.0 arg lnf theta1 [theta2 ...] * calculs intermédiaires, voir exemples * ... qui replace `lnf' = ... end Méthode d0 program progname version 10.0 arg todo b lnf tempvar theta1 theta2 ... mleval `theta1' = `b', eq(1) mleval `theta2' = `b', eq(2) ... © Benoît Rapoport 2013 s'il y a une équation 2 Page 56 * calculs intermédiaires, voir exemples * ... mlsum `lnf' = ... end Méthode d1 program progname version 10.0 arg todo b lnf g tempvar theta1 theta2 ... mleval `theta1' = `b', eq(1) mleval `theta2' = `b', eq(2) .. s'il y a une équation 2 * calculs intermédiaires, voir exemples * ... mlsum `lnf' = ... if (`todo' == 0 | `lnf' >= .) exit tempname d1 d2 ... mlvecsum `lnf' `d1' = ..., eq(1) * après le =, on met la formule pour le gradient par rapport au 1er vecteur de paramètres mlvecsum `lnf' `d2' = ..., eq(2) ... matrix `g' = (`d1',`d2',...) end Méthode d2 program progname version 10.0 arg todo b lnf g negH tempvar theta1 theta2 ... mleval `theta1' = `b', eq(1) mleval `theta2' = `b', eq(2) ... s'il y a une équation 2 * calculs intermédiaires, voir exemples * ... mlsum `lnf' = ... if (`todo' == 0 | `lnf' >= .) exit tempname d1 d2 ... mlvecsum `lnf' `d1' = ..., eq(1) * après le =, on met la formule pour le gradient par rapport au 1er vecteur de paramètres mlvecsum `lnf' `d2' = ..., eq(2) ... matrix `g' = (`d1',`d2',...) © Benoît Rapoport 2013 Page 57 tempname d11 d12 d22 ... mlmatsum `lnf' `d11' = ..., eq(1) * après le =, on met la formule pour l'opposé du hessien par rapport au 1er vecteur de paramètres mlmatsum `lnf' `d12' = ..., eq(1,2) mlmatsum `lnf' `d22' = ..., eq(2) ... matrix `negH' = (`d11',`d12',... \ `d12',`d22',...) end todo prend la valeur 0 si lnf (le premier argument) doit être calculé, 1 s'il faut aussi calculer g et 2 s'il faut aussi calculer negH (on peut donc appeler le programme avec todo = 0, même pour les méthodes d1 et d2). Remarque : la contrainte imposant que la vraisemblance respecte la forme linéaire n'empêche pas que l'on puisse estimer des modèles non-linéaires. Par exemple : supposons que l'on cherche à estimer le modèle (on omet l'indice individuel) : y = β 0 + β1 X 1 + β 2 X 2 + β 3 X 3 On peut écrire la vraisemblance {( θ3 ln l = ln φ y − θ1 − θ 2 X 3 β4 ) θ }− lnθ 4 ( + ε avec ε ~ N 0, σ 2 ) 4 θ1 = β 0 + β1 X 1 + β 2 X 2 , θ 2 = β 3 , θ 3 = X 3 , θ 4 = σ Dans ce cas, on écrit le programme annexe program my_modele_nl_ll version 10.0 arg lnf theta1 theta2 theta3 sigma quietly replace `lnf' = ln(normalden($ML_y1,`theta1' `theta2'*$X3^`theta3',`sigma')) end + Et on définit X3 comme une variable globale dans le programme principal global X3 variable3 ml model lf my_modele_nl_ll (variable_dep = variable1 variable2) /beta3 /beta4 /sigma ml maximize 20.3 _diparm Dans un certain nombre de cas, il faut transformer certains paramètres auxiliaires dans la vraisemblance, par exemple contraindre une corrélation entre -1 et 1. Pour calculer ensuite les écartstypes du paramètre non-transformé on peut appliquer après l'estimation la méthode Delta. La commande _diparm permet de le faire simplement en précisant analytiquement les dérivées partielles (sauf pour les cas les plus fréquents). © Benoît Rapoport 2013 Page 58 21 Recherche de ressources sur internet Mise à jour de Stata : update query permet de recherche s'il existe des mises à jour sur le site On trouve un grand nombre de commandes faites main sur le site du Boston College: http://ideas.repec.org/s/boc/bocode.html Accessible aussi par le site de Stata (ressources & support puis statalist). Si on connaît le nom du module, on peut taper directement : ssc install nom-module, all Commandes Stata : search et findit Permettent de chercher des ressources à partir de Stata. On peut aussi utiliser net search mot-clé, puis net install nom-module, all Attention : peut ne pas fonctionner avec les licences réseau selon les droits de l'utilisateur. Statalist est la liste d'utilisateurs de Stata. On peut s'inscrire ou consulter les archives sur yahoo. http://www.stata.com/statalist/ © Benoît Rapoport 2013 Page 59 Table des matières 1 Prise en main du logiciel : éléments épars ..................................................................................................... 3 1.1 Configuration des fenêtres ..................................................................................................................... 3 1.2 Définition de la taille du buffer de l'ascenseur de la fenêtre de résultats ............................................... 4 1.3 Choix du répertoire de travail ................................................................................................................ 4 1.4 Taille de la mémoire allouée : set mem .............................................................................................. 4 1.5 Format de stockage des variables .......................................................................................................... 5 1.6 Réduction du format de stockage des variables ..................................................................................... 5 1.7 Garder trace de ce qu'on a fait ............................................................................................................... 5 1.8 L'aide ..................................................................................................................................................... 5 1.9 La mise à jour ........................................................................................................................................ 6 2 Structure générale d’une commande.............................................................................................................. 7 2.1 Structure générale d'une commande ...................................................................................................... 7 2.2 Les expression by, if et in ................................................................................................................. 7 3 Manipulation élémentaire de fichiers ............................................................................................................ 8 3.1 Extension des bases Stata ...................................................................................................................... 8 3.2 use : ouvrir un fichier de format Stata (.dta) ........................................................................................ 8 3.3 Lecture de bases de données d'un autre format que Stata ...................................................................... 8 3.4 Sauvegarder une table ............................................................................................................................ 8 3.5 Ouvrir une table pour la regarder........................................................................................................... 9 3.6 Examiner une table et les variables (caractéristiques) ........................................................................... 9 3.7 Examiner les variables (statistiques)...................................................................................................... 9 4 Manipulation avancée de fichiers ................................................................................................................ 10 4.1 sort : trie le fichier ............................................................................................................................ 10 4.2 merge : assemble des fichiers ............................................................................................................ 10 4.3 append : met bout à bout des fichiers................................................................................................ 10 4.4 reshape : transforme des données en lignes en données en colonnes .............................................. 10 4.5 keep/drop : comme leur nom l'indique ............................................................................................ 11 4.6 collapse : produit des fichiers de moyennes, écarts-types etc. ....................................................... 11 4.7 preserve/restore ........................................................................................................................ 11 5 Création de variables ................................................................................................................................... 12 5.1 Introduction ......................................................................................................................................... 12 5.2 Une variable est modifiée par replace ............................................................................................ 13 5.3 Les formats de variable........................................................................................................................ 13 5.4 Abréviations et listes de variables ....................................................................................................... 13 5.5 Les étiquettes ("labels") ....................................................................................................................... 14 6 Statistiques descriptives ............................................................................................................................... 15 6.1 Statistiques élémentaires ...................................................................................................................... 15 6.2 Tableaux croisés de statistiques plus élaborés ..................................................................................... 15 6.3 Coefficients de corrélation ................................................................................................................... 15 6.4 Tests d'égalité de moyennes et de variances ........................................................................................ 16 7 Les poids sous Stata ..................................................................................................................................... 17 8 Les graphiques ............................................................................................................................................. 18 8.1 Introduction ......................................................................................................................................... 18 8.2 Les types de graphiques proposés par Stata ......................................................................................... 19 8.3 Personnalisation des graphiques .......................................................................................................... 23 8.4 Sauvegarde et édition........................................................................................................................... 24 8.5 Combiner des graphiques .................................................................................................................... 24 9 Modèles de régression simples .................................................................................................................... 26 9.1 Structure générale d'une commande d'estimation ................................................................................ 26 9.2 Modèle de régression linéaire .............................................................................................................. 26 9.3 Expansion de variables qualitatives ..................................................................................................... 26 9.4 Estimation d'une variable dichotomique (probit, logit) ....................................................................... 27 9.5 Réaffichage des résultats ..................................................................................................................... 28 10 Estimation sous contraintes : constraint....................................................................................................... 29 11 Commandes post-estimation ........................................................................................................................ 30 © Benoît Rapoport 2013 Page 60 11.1 Récupérer les grandeurs après l'estimation .......................................................................................... 30 11.2 predict : prédiction post-estimation ................................................................................................ 30 11.3 test : tests post-estimation ................................................................................................................ 30 12 Présentation des différents formats de données : coupe, panel, modèles de durée, séries temporelles........ 32 12.1 Données en coupe ................................................................................................................................ 32 12.2 Données de panel ................................................................................................................................. 32 12.3 Données de durée................................................................................................................................. 32 12.4 Séries temporelles ................................................................................................................................ 33 12.5 Survey data .......................................................................................................................................... 33 13 Analyse de survie ........................................................................................................................................ 34 13.1 Déclaration des données de type modèles de durée : stset .............................................................. 34 13.2 Description : stdescribe................................................................................................................ 36 13.3 stfill ............................................................................................................................................... 36 13.4 Estimateur de Kaplan-Meier : sts graph ....................................................................................... 37 13.5 Modèles de survie paramétriques : streg ......................................................................................... 37 13.6 Modèles de survie semi-paramétriques : stcox................................................................................. 38 13.7 Test d'égalité des fonctions de survie : sts test ............................................................................ 38 13.8 Taille d'échantillon nécessaire : stpower ......................................................................................... 39 14 Modèles de comptage : poisson, nbreg ........................................................................................................ 41 15 Séries temporelles : introduction ................................................................................................................. 42 15.1 Déclaration des données de type séries temporelles : tsset ............................................................. 42 15.2 Retardées, avances ............................................................................................................................... 42 15.3 Représentation graphique des séries, corrélogrammes : tsline, corrgram ............................... 42 15.4 Estimation : séries univariées .............................................................................................................. 43 15.5 Modèles multivariés (introduction) ..................................................................................................... 43 16 Tables pour épidémiologistes ...................................................................................................................... 45 16.1 Les proportions : proportion ......................................................................................................... 45 16.2 Les tables d'épidémiologie : ir, cs, cc, mcc, tabodds, mhodds ................................... 45 17 Écriture d'un programme (fichier "do") ....................................................................................................... 49 17.1 Macros locales et globales ................................................................................................................... 49 17.2 Boucles et conditionnement ................................................................................................................. 49 17.2.1 if : commande de programmation ............................................................................................. 49 17.2.2 foreach : boucle sur des éléments (items) .............................................................................. 49 17.2.3 while : boucle jusqu'à ce qu'une condition soit remplie ........................................................... 50 17.2.4 forvalues : boucle sur des valeurs "consécutives" ................................................................ 50 18 Manipulation des matrices ........................................................................................................................... 51 18.1 Définition ............................................................................................................................................. 51 18.2 "Accumulation" : mat accum ........................................................................................................... 51 18.3 Transformer une matrice en base et réciproquement : mkmat, svmat ........................................... 52 18.4 Récupération des matrices de coefficients et de variances-covariances après une estimation............. 52 19 Ecriture d'une commande (fichier "ado") .................................................................................................... 53 19.1 Structure générale ................................................................................................................................ 53 19.2 Macros locales et globales sous Stata .................................................................................................. 53 19.3 Analyse de la syntaxe (parsing) .......................................................................................................... 54 20 Introduction au maximum de vraisemblance ............................................................................................... 55 20.1 Les méthodes ....................................................................................................................................... 55 20.2 La structure générale ........................................................................................................................... 55 20.3 _diparm ............................................................................................................................................ 58 21 Recherche de ressources sur internet ........................................................................................................... 59 © Benoît Rapoport 2013 Page 61
Documents pareils
Module 2
log close (ferme le fichier log courant)
Vous pouvez ajouter des commentaires à votre log lorsque vous travaillez en écrivant des
commentaires dans la fenêtre de commandes ou dans votre do-file pr...