Commandes STATA pour microsimulations Anda David.

32
Commandes STATA pour microsimulations Anda David

Transcript of Commandes STATA pour microsimulations Anda David.

Page 1: Commandes STATA pour microsimulations Anda David.

Commandes STATA pour microsimulations

Anda David

Page 2: Commandes STATA pour microsimulations Anda David.

Les Macros locales

• Une macro est une sorte de « boîte » dans laquelle on stocke des informations que l’on pourra utiliser ultérieurement.

• Les macros peuvent être locales ou globales selon leur champ d’application, définissant ainsi où leur nom sera reconnu.

• Les macros locales sont créées dans un ficher « .do » ou « .ado » et cessent d’exister une fois qu’on arrête l’exécution

du fichier.

Page 3: Commandes STATA pour microsimulations Anda David.

Les Macros locales

• Il ne s’agit pas de variables : au moment où on les « invoque », STATA ne fait que remplacer leur nom par le texte qu’elles contiennent avant d’exécuter la commande.

• On peut ainsi écrire du code permettant d’exécuter différentes choses selon la valeur prise par les macros au moment où le code est exécuté.

• Syntaxe :local name targetname

local name = targetname (dans le cas de scalaires)

Page 4: Commandes STATA pour microsimulations Anda David.

Les Macros locales

• Exemples :

. local pays France Italie Allemagne Brésil

. local ctycode 111 112 136 134

. display “`pays’” France Italie Allemagne Brésil . display “`ctycode’” 111 112 136 134. local list=“age weight sex”. regress outcome `list’. regress outcome age weight sex

Page 5: Commandes STATA pour microsimulations Anda David.

L’utilité des macros

• Exécution de commandes sur des sous-échantillons dont la définition est complexe:

summarize … if (hours>0|hours>=.) & weeks>0 & earn>0 & earn/weeks>100tabulate … if (hours>0|hours>=.) & weeks>0 & earn>0 & earn/weeks>100regress … if (hours>0|hours>=.) & weeks>0 & earn>0 & earn/weeks>100

• Avec des macros:local if = “if (hours>0|hours>=.) & weeks>0 & earn>0 & earn/weeks>100”summarize … `if’tabulate … `if’regress … `if’

Page 6: Commandes STATA pour microsimulations Anda David.

Les erreurs à ne pas commettre

. local a = -4.57213

. local b = 2.12394

. local c = 0.72195

. di (-`b' + sqrt(`b')^2-4*`a'*`c')/(2*`a')-1.4439

• Pourquoi (`b’)^2 et pas `b’^2?

Page 7: Commandes STATA pour microsimulations Anda David.

Un petit exemple

• Calculer le 1er et le dernier quintile d’une distribution , puis calculer des statistiques descriptives pour chacun de ces quantiles et faire des régressions. (sysuse nlsw88)

• Solution qui ne marche pas:summarize wage, detailsummarize varlist if r(p5)<wage & wage>r(p95), detailregress … if r(p5)<wage & wage>r(p95)

• Solution qui marche:summarize wage, detaillocal lo = r(p5)local hi = r(p95)summarize varlist if `lo’<wage & wage<`hi’, detailregress … `lo’<wage & wage<`hi’

Page 8: Commandes STATA pour microsimulations Anda David.

Les macros locales

• Afficher le contenu d’une macro : quelques erreurs à ne pas commettre

local x=1display `x‘

• Remarques :o Noter la distinction entre les deux quoteso Il n’est pas toujours indispensable d’utiliser le signe « = »

pour définir des macros localeslocal x = 1 est identique à local x 1

Page 9: Commandes STATA pour microsimulations Anda David.

Quand utiliser le signe “=“

• Pour comprendre dans quelles situations le signe « = » est nécessaire, il suffit de voir la différence entre les deux programmes suivantes :

• A votre avis, que donnera :

local x 2+2di `x’di “`x’”

local x 2+2di `x’di “`x’”

local x = 2+2di `x’di “`x’”

local x = 2+2di `x’di “`x’”

local x -2di `x’^2local x -2di `x’^2

Page 10: Commandes STATA pour microsimulations Anda David.

Quand utiliser le signe “=“

.local i 10

.local j 10+`i’

.display “`j’”10+10

.local j = 10 + `i’

.display “`j’”20

Page 11: Commandes STATA pour microsimulations Anda David.

Exemple de macros locales

Page 12: Commandes STATA pour microsimulations Anda David.

Exemple de macros locales

Page 13: Commandes STATA pour microsimulations Anda David.

Exemple de macros locales

Page 14: Commandes STATA pour microsimulations Anda David.

Exemple de macros locales

Page 15: Commandes STATA pour microsimulations Anda David.

Exemple de macros globales

Page 16: Commandes STATA pour microsimulations Anda David.

Exemple de macros globales

Page 17: Commandes STATA pour microsimulations Anda David.

Les boucles• Il est possible d’intégrer des boucles à un .do. Les boucles possibles:

– while– foreach– forvalues.

• La commande while oblige le logiciel à répéter la commande entre accolades jusqu‘à ce que la condition précisée par while ne soit plus vraie. Il faut d'abord lancer un compteur par le biais d'une macro locale, puis préciser la condition de la boucle.

• Les commandes foreach permettent d’effectuer des tâches répétitives comme appliquer à plusieurs variables les mêmes commandes.

• Quelques conseils : N’oubliez jamais de sauvegarder le .do avant de tester une boucle. L’oubli de l’incrémentation du compteur ferait boucler à l’infini Stata...

Page 18: Commandes STATA pour microsimulations Anda David.

La boucle FOREACH : syntaxe

foreach nom_de_la_macro in/of [list type] list {code involving `macroname'...}

• Remarques: In ou of selon le type de liste Toutes les commandes situées entre les parenthèses seront exécutées pour

chacun des items de la liste.• Exemple :foreach color in red blue green {1. di "`color'"2. }

Permet d’obtenir à l’écran :redbluegreen

Remarque : l’écriture d’une boucle en mode itératif conduit

Stata à numéroter les lignes. Vous n’avez pas à le faire en

mode éditeur de texte.

Remarque : l’écriture d’une boucle en mode itératif conduit

Stata à numéroter les lignes. Vous n’avez pas à le faire en

mode éditeur de texte.

Page 19: Commandes STATA pour microsimulations Anda David.

La boucle FOREACH : exemple simple

• Il est plus simple de faire figurer au préalable la liste dans une macro :local colors red blue greenforeach color in `colors' {1. di "`color'"2. }

• C’est d’ailleurs tellement courant que Stata prévoit un code spécial pour ces situations :

local colors red blue greenforeach color of local colors {1. di "`color’”2. }

• Remarques : On a remplacé in par of parce que la macro locale décrit une liste type. Le nom de la macro locale n’a pas besoin d’être entre quotes.

Page 20: Commandes STATA pour microsimulations Anda David.

La boucle FOREACH : les types de liste• Il existe plusieurs types de liste : varlist, newlist, et numlist.

• Illustration à partir de la base auto installée avec Stata (sysuse auto)foreach var in price mpg rep78 {1. di "`var'«2. sum `var‘3. }foreach var of varlist price-rep78 {1. di "`var'«2. sum `var‘3. }foreach var in price-rep78 {1. di "`var'«2. sum `var‘3. }

• Dans l’ex1 la liste est une suite de 3 mots qui sont ensuite considérés comme des noms de variables dans les commandes qui suivent.

• Dans l’ex2 Stata interprète price-rep78 comme une liste de plusieurs noms.

• Dans l’ex3 Stata interprète price-rep78 comme un seul mot et la commande ne sera donc exécutée qu’une seule fois.

Page 21: Commandes STATA pour microsimulations Anda David.

La boucle FOREACH : les types de liste

• On utilise newlist pour une liste nouvelle de variables qui seront créées à l’intérieur de la boucle.foreach var of newlist x1 x2 x3 x4 x5 {1. gen `var'=02. }

• C’est bien sûr gen qui génère les nouvelles variables

• On utilise numlist pour une liste de nombres :foreach i of numlist 1/5 {1. gen y`i'=02. }

• Il faut noter que la macro `i‘ joue le rôle d’un indice accolé à la variable y

Page 22: Commandes STATA pour microsimulations Anda David.

Exemples de boucle FOREACH (1)

foreach v of varlist price mpg rep78{ 2. summarize `v', detail 3. } local ctycode 111 112 136 134local i 0foreach c of local ctycode { 2. local ++i 3. local rc "`rc' (`i'=`c')" 4. }display "`rc'« (1=111) (2=112) (3=136) (4=134)

Page 23: Commandes STATA pour microsimulations Anda David.

La boucle FORVALUES

• Avec la boucle forvalues on peut faire une boucle sur une liste de nombres.

• Au lieu d’utiliser foreach i of numlist on peut utiliser forvalues. forvalues i = 1/5 {1. gen z`i’=02. }

• Remarque : On peut compter autrement que de 1 en 1.forvalues i = 1 (3) 30 {

2. gen z_`i'=`i' 3. }

Page 24: Commandes STATA pour microsimulations Anda David.

FORVALUES: Exemple

• On suppose qu’on a 4 variables, gdp1, gdp2, gdp3 and gdp4 avec les valeurs du PIB pour 4 pays.

• On peut utiliser les similarités des noms des variables pour créer une boucle pour les commandes generate et summarize.

forvalues i=1/4{2.generate double lngdp`i’=log(gdp`i’)3. summarize lngdp`i’4.}

Page 25: Commandes STATA pour microsimulations Anda David.

FORVALUES: Exemple

• Si les variables sont plutôt indexées par le nom du pays alors on utilisera foreach (UKgdp, USgdp, DEgdp and FRgdp)

foreach c in US UK DE FR {2.generate double lngdp`c’=log(gdp`c’)3. summarize lngdp`c’4.}ou.local country US UK DE FR.foreach c of local country {…

Page 26: Commandes STATA pour microsimulations Anda David.

La boucle WHILE

local i = 1

while `i’<=10 {

display `i’

local i = `i’+1

}

Définition d’un compteurDéfinition d’un compteur

Critère d’arrêt ( ne pas oublier le « } »)Critère d’arrêt ( ne pas oublier le « } »)

Toutes les commandes entre { et } seront exécutées via la boucleToutes les commandes entre { et } seront exécutées via la boucle

Incrémentation du compteur (le pas de la variation dépend du cas étudié)Incrémentation du compteur (le pas de la variation dépend du cas étudié)

Page 27: Commandes STATA pour microsimulations Anda David.

WHILE: Exemple

• Si on veut répéter la même analyse sur deux bases de donnée set95.dta et set96.dta :

local i=95while `i’<=96 {

use set`i’reg prob genderlocal i = `i’+1}

Page 28: Commandes STATA pour microsimulations Anda David.

Manipuler des scalaires• scalar define : définit des variables scalaires;

scalar def nom_scalaire = expressionExemple:scalar def quatre = 4

• scalar dir / list : liste le contenu des scalaires;scalar dir scalar list _allscalar list nom_scalaire

• scalar drop : supprime les scalaires.scalar drop nom_scalaire

Page 29: Commandes STATA pour microsimulations Anda David.

Commandes matricielles• Créer des matrices :

mkmat: permet des convertir des variables en matrices;mkmat varlist [if] [in] [, options]

Exemple:sysuse automkmat price mpg turnmatrix dir matrix list price

matrix: crée des matrices à partir des vecteurs ou d’autres matrices;matrix nom_matrice = vecteur ou matriceExemple:matrix X = (2 , 3 \ 2 , 1 \ 1 , 1)matrix Y = (1 \ 0 \ -1)matrix beta = inv(X’*X)*X’*Y

Page 30: Commandes STATA pour microsimulations Anda David.

Commandes matricielles (2)

• Lister des matrices:– matrix dir : liste les noms des matrices existantes;– matrix list nom_matrice : liste le contenu d’une matrice;

Exemple:matrix list beta

• Renommer des matrices:– matrix rename nom_matrice1 nom_matrice2

• Supprimer une matrice:– matrix drop nom_matrice – Matrix drop _all

Page 31: Commandes STATA pour microsimulations Anda David.

Commandes matricielles (3)

• Nommer des colonnes et des lignes :

matrix coln / rown matrice=nom_col / nom_ligne

Exemple:matrix coln X = X1 X2

• Calcul des données à partir des vecteurs:matrix score nouvelle_var = nom_vecteur

Page 32: Commandes STATA pour microsimulations Anda David.

Indicateurs de pauvreté et inégalité

• Indices Foster, Greer and Thorbecke.povdeco nom_var [if] [poids], [bygroup] varpl(ligne de pauvrete)Exemple:povdeco depenset1 if sim==1 [w=weightpop], by(urbrur) varpl(z)

• Coefficient de Giniineqdeco nom_var [if] [poids], [bygroup]Exemple:ineqdeco depenset1 if sim==3 [fw=weightpop]