STATA TUTORIAL

Transcript

STATA TUTORIAL
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
STATA TUTORIAL
Daniela Vuri
(Università di Firenze)
[email protected]
Febbraio-Maggio 2004
Argomenti delle lezioni
1. Primi passi con STATA
2. La documentazione di STATA
3. Variabili e osservazioni
4. Inserire i dati in STATA
5. Alcuni comandi di STATA
6. Statistiche descrittive
7. Lavorare interattivamente in STATA
8. Iniziare a costruire un do-file
9. Manipolazione dei dati
10. Modello di regressione lineare ed alcune estensioni
1
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
1 PRIMI PASSI CON STATA
1.1
Dove trovare STATA e i dati da utilizzare
Dopo aver acceso il computer e aperto Esplora Risorse, cercate con il comando find “wstata.exe” e
cliccate due volte. In questo modo, si aprirà STATA. Consiglio poi di creare un’icona sul desktop in
modo da poter cliccare direttamente sull’icona di STATA.
I dati sono stati inseriti invece nella directory: c:/corso_lavoro/dati. Per il momento a noi
interessa guardare semplicemente il file eserc.xls che è in c:/corso_lavoro/dati (e in formato excel).
1.2
Uscire da STATA
Per uscire da STATA, si puo’ scrivere exit nella finestra STATA COMMAND. Altrimenti si puo’
cliccare su Exit dal menu FILE. Se vuoi uscire da STATA ma ci sono dati in memoria che non sono
stati salvati (hai fatto alcune operazioni prima), devi digitare exit,clear
1.3 Le finestre di STATA e la barra degli strumenti
Le finestre di STATA sono 4:
la finestra STATA COMMAND, dove i comandi vengono digitati e mandati in esecuzione
semplicemente premendo invio dopo averli scritti;
la finestra STATA RESULTS, dove appaiono i risultati;
la finestra REVIEW dove sono scritti tutti i comandi digitati fino a quel momento;
e la finestra VARIABLES dove c’è una lista di variabili contenute nel dataset che state
utilizzando.
La barra degli strumenti contiene 12 icone:
•
•
•
•
•
•
•
•
•
•
•
•
open, per aprire un dataset di STATA
save, per salvare su disco il dataset che stai utilizzando
print, per stampare un grafico o i risultati ottenuti
open log, per iniziare un nuovo log, aggiungerlo ad uno già esistente o fermare quello corrente
start viewer
bring results Window to front (portare la finestra Results di fronte alle altre finestre di STATA)
bring graph Window to front (portare la finestra Graph di fronte alle altre finestre di STATA)
Do-File Editor (apre il Do-file editor dove si scrivono i comandi per poterli poi eseguire tutti insieme)
Data Editor (apre il data editor, dove puoi inserire manualmente i tuoi dati )
Data Browser (dove i dati appaiono)
Clear-more-Condition (dice a Stata di proseguire anche quando si è fermato a causa di un lungo output)
Break (ferma cio’ che sta facendo STATA; per es. hai chiesto a stata di mostrare una lista di tutte le osservazioni,
ma ti accorgi che sono milioni e vuoi interrompere il lavoro di STATA!
1.4 Allocare memoria a STATA
Generalmente STATA da 10.10 Mb di memoria. Per espanderla, basta scrivere nella finestra
COMMAND “set memory 50m”, m sta per MegaByte. Qualora non sia sufficiente per i tuoi
dati, sarà lo stesso STATA a dire “no room to add more observations”. E allora
basterà aggiungere più memoria compatibilmente con il PC usato.
2
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
2. LA DOCUMENTAZIONE DI STATA
La maggior parte della documentazione in STATA viene dall’ Help Menu, dai Reference Manuals,
dalla User’s Guide e dalle FAQ (frequently asked questions in http://www.stata.com)
2.1 Il sistema di HELP
L’help on line può essere usato cliccando su HELP dal FILE menu. Selezionando CONTENTS si
apre la lista di argomenti dell’Help-on-line. Se invece si seleziona SEARCH… e si inserisce una
keyword (parola chiave), STATA fa una ricerca in tale lista tramite la keyword. L’HELP può essere
usato anche dalla finestra COMMAND, scrivendo help keyword oppure lookup keyword.
2.2 Tutorials (non più disponibile in Stata 8)
Stata fornisce dei tutorials sui seguenti argomenti: introduzione a STATA, inserimento di dati,
grafici, tabelle, regressioni, ANOVA, logit, analisi survival, modelli a componenti principali.
I tutorials sono disponibili digitando: tutorial intro (per una introduzione a STATA),
tutorial graphics (per fare i grafici), tutorial tables (per fare tabelle),
tutorial regress (per stimare modelli di regressione), tutorial anova, tutorial
logit, tutorial survival, tutorial factor, tutorial ourdata (per
descrivere i dati che STATA fornisce), tutorial yourdata (per insegnare come inserire i
propri dati) nella finestra COMMAND
3 VARIABILI E OSSERVAZIONI
In Stata, le variabili sono associate con le colonne di una matrice di dati, e le osservazioni con le
righe
3.1 Variabili
Le variabili possono essere alfanumeriche (stringhe) o numeriche (numeri reali). Le variabili sono
chiamate con il loro nome, che puo’ contenere anche numeri, ma non spazi.
Si puo’ cambiare il nome delle variabili usando il comando rename: rename x y significa
cambiare il nome della variabile da x a y. Automaticamente STATA assegna un certo spazio alle
variabili. Scrivendo compress si ordina a STATA di utilizzare lo spazio in maniera efficiente
(molto utile prima di salvare un dataset su cui si è lavorato creando molte variabili)
3.2 Osservazioni
Le osservazioni corrispondono alle righe della matrice di dati.
3
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
4 INSERIRE I DATI IN STATA
I dati possono essere inseriti usando il data editor, oppure da un file ASCII (word, notepad, ecc.)
4.1 Inserire i dati dall’EDITOR (tramite tastiera)
Iniziamo con il cliccare su DATA EDITOR sulla barra degli strumenti di STATA. Non è altro che
un foglio di excel (molto simile) dove per riga ci sono le osservazioni e per colonna ci sono le
variabili. I dati inseriti possono essere modificati semplicemente scegliendo la cella. Il DATA
Editor chiama le variabili inizialmente con var1, var2 etc, ma possono essere cambiate cliccando
due volte sull’intestazione della colonna (per es. su var1) in modo tale che appaia lo STATA
VARIABLE INFORMATION dove poter inserire il nome desiderato.
ALLA PROVA allora!!!
1. Clicca sull’icona DATA EDITOR (4 pulsante da destra in alto)
2. Da sinistra a destra inserire i seguenti numeri (aiutati con
l’invio e le freccette sulla tastiera per spostarti):
1
2
3
4
5
6
7
8
9
3. Doppio click su var1 e sostituisci var1 con a; fai lo stesso con
var2 e metti al suo posto b, lo stesso con var3 e chiamala c
4. Chiudi il data editor (x in alto a destra) in modo da tornare alla
finestra Stata Command
5. Scrivi save c:/corso_lavoro/mydata/one.dta, replace (fra poco
capirai anche questo comando)
*ricordati che hai messo i dati in questa directory chiamata mydata
4.2
Usare dati già esistenti in formato ASCII (o text)
4.2.1 Infile (estensione con .txt oppure .asc)
Il comando infile è uno dei più usati per dati che siano in formato libero o comma-separated
La sintassi base è la seguente:
infile varlist
using filename [, clear]
dove varlist è una lista di nomi di variabili (varname1 varname2…), filename è il
nome del file che si vuole trasformare (incluso il percorso per trovarlo), e clear è
un’opzione che pulisce dati eventualmente in memoria che non sono stati salvati. Se non
viene messa un’estenzione si assume che essa sia .raw. Infile è molto utile se hai
“scaricato” dei dati dal web e sono conformi a queste specifiche:
• il file non ha nomi di variabili sulla prima linea
• le variabili che hanno spazi al loro interno, come per esempio nome e cognome di una
persona, devono essere racchiusi tra virgolette
• i numeri possono avere virgole e segni negativi, ma non dollari o segni di percentuale
• infile assume che le variabili abbiano spazi tra di loro e che non ci siano spazi bianchi
quando si aspetta dei dati (percio’ i valori di missing devono essere rappresentati in qualche
modo).
4
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
Molto spesso pero’ la cosa più conveniente da fare e portare un file in Excel, salvarlo con
l’estensione csv e poi usare insheet
Inoltre puoi usare il comando infile per leggere dati che contengono molte variabili o
record multipli per osservazione, oppure in generale quando vuoi leggere dati salvati in un
formato particolare.
Nel nostro caso abbiamo dati in excel che sono comma-separated.
4.2.2 Insheet (estensione con .csv)
Questo comando legge dati che sono organizzati nel modo seguente: i) le osservazioni sono
per riga; ii) le variabili nelle colonne; iii) i valori delle variabili sono separati da una
tabulazione o da virgole ma non da spazi. In questo caso, è necessario rinominare il file
ASCII in modo che abbia l’estensione .raw e poi usare il comando insheet.
In molti casi il modo più conveniente in cui leggere i dati è aprire il file in Excel e salvarlo
con l’estensione .cvs e poi usare il comando insheet.
La sintassi di base è:
insheet
using filename [, clear]
Andiamo in excel e creiamo il file exerc.cvs e salviamolo (cambiare semplicemente
l’estensione non è sufficiente). Poi torniamo in STATA e nella finestra COMMAND
scriviamo:
insheet using c:/corso_lavoro/dati/eserc.csv,clear
save c:/corso_lavoro/dati/eserc.dta,replace
A questo punto abbiamo i dati pronti in formato DTA, che non è altro che il formato dei dati
in STATA.
Il comando insheet è molto utile per leggere dati da un foglio di lavoro (come quello di
Excel). Anche in questo caso ci sono alcuni requisiti da soddisfare:
• La prima linea dovrebbe avere i nomi delle variabili e dalla seconda linea dovrebbero
iniziare i dati
• I dati numerici mancanti dovrebbero essere codificati come celle vuote, e non con spazi,
punti, o altri dati numerici. Spesso vengono usati i valori 9, 99, 999. Questo è lecito purchè
questi non siano valori validi per quella variabile.
• Le virgole sono problematiche perchè Stata pensa che siano dei delimitatori e non li legge in
modo corretto. Percio’ è necessario rimuovere le virgole dai valori numerici prima di salvare
il file.
• Il file deve essere salvato in formato “comma separated values” in Excel. Non basta dare
un’estensione .cvs. Devi cliccare su “File” poi “Save as…” e poi scegliere “comma separated
values”. Quando chiudi il foglio di lavoro ed Excel ti chiede di salvare i cambiamenti bisogna
rispondere “No”, perchè Excel sta chiedendo di fare i cambiamenti per rendere il foglio di
lavoro nuovamente un foglio regolare di Excel
5
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
4.2.3 Dictionary
Se invece i dati sono in formato fisso, è necessario usare un dictionary (dct). Un dictionary
non è altro che un file ASCII (testo) che descrive il contenuto di un file di dati e permette di
leggere i file in formato fisso o formato libero. I dati possono essere nello stesso file del
dictionary o in un altro file. La sintassi di base è:
infile filename [, using (filename2) clear]
dove filename è il nome del file dictionary e filename2 è il nome del file che contiene i
dati. Se l’opzione using () non è specificata, si assume che i dati seguano il dictionary in
filename, o se il dictionary specifica il nome di un altro file, questo file si assume contenga i
dati.
La sintassi di base di un dictionary file è la seguente:
------ top of the dictionary file------------------[infile] dictionary [using filename] {
[type] varname
}
(dai vengono inseriti qui)
------------------ fine del dictionary file---------Qui di seguito riporto un esempio possibile di file dictionary. Si scrivono le righe successive
in un qualsiasi programma di testo (word).
___________________________________________________________________________
dictionary using e:\fss98~10.fil {
_column(1)
_column(3)
_column(7)
_column(13)
_column(15)
_column(17)
_column(20)
_column(23)
ril
anno
ProgFam
nordcomp
ncomp
age
relpar
sex
%2f
%4f
%6f
%2f
%2f
%3f
%2f
%1f
"rilevazione"
"anno"
"progressivo family"
"Num ordine componente"
"numero comp family"
"eta"
"relazione parent"
"sesso"
}
il file dictionary puo’ essere scritto in un qualsiasi text editor ma deve essere salvato con
l’estensione .dct. Per esempio potremmo salvarlo come prova.dct
e poi
infile using prova.dct
In particolare, il dizionario inizia con le parole dictionary using, che definisce il file
come un dizionario di STATA. Il nome del file che contiene i dati appare dopo la parola using
(nel nostro caso fss98~10.fil).
6
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
4.2.4 Infix
Se i dati sono in formato fisso per colonna, il comando infix puo’ essere usato. La sintassi
di base è:
infix using filename[, using (filename2) clear]
dove filename è il nome di un file dictionary e filename2 è il nome del file contenente i dati
4.3 Usare un dataset in formato STATA e salvare i dati
Tutti i file di dati in formato Stata hanno un’estenzione .dta. I dati possono essere aperti usando il
comando use
•
use: è il comando per aprire dati che sono stati precedentementi salvati in formato STATA. La
sua sintassi è
•
•
use filename
use filename, clear
dove al posto di filename si mette il nome desiderato. Nella prima forma, use filename dice di
scaricare i dati, ma STATA rifiuterà se:
1. c’è già qualcosa in memoria
2. qualcosa non è stata salvata su disco
La seconda forma (use filename, clear) invece dice a Stata di scaricare i dati
COMUNQUE, anche se qualcosa prima non è stato salvato.
Proviamo:
use c:/corso_lavoro/dati/eserc.dta,clear
Alternativamente, puoi cliccare su File e poi Open e qui clicca su eserc.dta nella directory:
c:/corso_lavoro/dati/
•
save: il comando save ha la seguente sintassi:
♦ save filename
♦ save filename, replace
senza l’opzione replace, il file non deve già esistere; nel caso in cui esista già Stata rifiuterà di
scrivere sopra di esso. Con l’opzione replace invece, il file può esistere o no. Se il file esiste,
esso verrà sovrascritto. Useremo di nuovo questo comando fra poco!!!
7
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
5. ALCUNI COMANDI
A questo punto apriamo il file eserc.dta. La prima cosa da fare quando si guarda per la prima
volta un dataset è studiare le variabili presenti. Perciò guardiamo il significato delle variabili nel
dataset (vedi fogli allegati oppure il file eserc.doc). Dopo una lettura attenta, passiamo a manipolare
ed analizzare questi dati. Di seguito introduciamo brevemente la sintassi generale valida per tutti i
comandi.
5.1 Sintassi generale
I comandi di Stata rientrano in due ampie categorie:
1. comandi che riportano informazioni sui dati, per esempio describe, list, summarize, tab…
2. comandi che cambiano i dati: keep, drop, generate…
Molti comandi hanno una sintassi comune che possiamo scrivere come:
[by varlist:] command
varlist
if exp
in range
Di seguito riportiamo il significato di ogni parola del comando.
[ ] indica le componenti che non sono essenziali per il comando (optional qualifiers)
By varlist: il prefisso by fa in modo che il commando sia ripetuto per ogni set unico di valori
della variabile (o variabili). I dati devono pero’ essere “sorted”, cioè ordinati secondo la
“varlist”.
Esempio
sort ireg
by ireg: sum studio
In questo modo stiamo chiedendo a Stata di mostrarci per ogni regione le statistiche descrittive della
variabile studio
command: è il comando che vogliamo che Stata esegua (summarize, list, save, etc.)
varlist: le variabili su cui vogliamo che il comando sia eseguito; spesso è opzionale in molti
comandi.
if exp: leggi questo come “if expression” e significa “se l’espressione indicate è vera…”.
L’opzione if specifica le osservazioni su cui noi vogliamo eseguire il comando. Se non è
specificato, allora il comando viene eseguito su tutte le osservazioni.
in range: specifica una restrizione in termini di osservazioni su cui si vuole eseguire il comando
(cioè un intervallo).
by ireg: sum studio if sex==1
Altri esempi:
sum
sum
sum
sum
sum
eta
eta
eta
eta
eta
if
if
if
if
if
ireg ==1
ireg ==1 & studio<=3
ireg!=1
studio>=3
(studio==3 | studio==4)
8
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
(nota il doppio uguale (==) è il modo in cui Stata riconosce il simbolo di
uguaglianza.
Altri operatori da conoscere sono:
& (and), | (or), != (diverso da, non uguale)
5.2 Describe
Describe mostra un sommario del contenuto dei dati in memoria o presenti nel dataset. La sua
sintassi è :
describe [varlist | using filename] , [short detail]
dove short taglia le informazioni su ciascuna variabile e detail include informazioni
sull’ampiezza di una singola osservazione, e la massima dimensione del dataset.
Esempio:
des
des,short
des, detail
5.3 Display
Display mostra stringhe e valori di espressioni scalari. Se si lavora direttamente nella finestra
COMMAND puo’ essere usato come calcolatrice. La sua sintassi è:
display [subcommand [subcommand]…]
dove subcommand è una stringa fra virgolette
Esempi
display “questa è una stringa”
display 5+ln(70)
5.4
List
List mostra il valore delle variabili. La sintassi è:
[by varlist:] list [varlist] [if exp] [in
noobs]
range][,
[no]display
nolabel
dove [no]display forza il format in formato display o di tabella (nodisplay), nolabel mostra i
codici numerici piuttosto che le labels, e noobs sopprime l’apparizione del numero di osservazioni
Esempi:
list in 1/5
list eta studio
list if eta>18
list studio if eta<3
Se la varlist non è specificata, vengono mostrati i valori di tutte le variabili nel dataset
9
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
5.5 Format
Il commando format descrive come un numero o una stringa sono mostrati in Stata. Per esempio
il numero 1234 può essere mostrato come 1234, oppure come 1234,0 o come 1,234.0, etc.
Digitando describe varlist vengono mostrati anche i formati delle variabili in una colonna
sotto il titolo display format. Per comprendere il significato dei vari formati, consultare
laUser Guide p.92-ss (nel Manuale di Stata 7).
5.6 Dummy variables
In questa sezione vediamo come generare delle variabili dummy. In Stata è molto semplice:
tab studio, gen(dummy)
Stata crea una variabile dummy per ogni valore trovato in studio. Così, dummy1=1 se l’individuo
ha una licenza elementare e 0 negli altri casi, dummy2=1 se l’individuo ha la licenza media e 0
negli altri casi e così via per tutte le variabili presenti in studio.
Se invece si vuole una dummy solo per una certa categoria della variabile studio, per es lic.
elementare:
gen d_elem=(studio==1)
Cioè STATA crea una variabile dummy con valore 1 se studio=1 e 0 altrimenti. Più in generale
STATA crea una variabile dummy uguale a 1 se l’espressione dentro parentesi è vera, e zero negli
altri casi.
5.7 Drop and keep
drop elimina variabili o osservazioni dai dati in memoria. La sua sintassi per il drop è:
drop varlist
[by varlist:] drop if exp
drop in range [if exp]
Keep funziona esattamente nello stesso modo del drop eccetto per il fatto che si specificano le
variabili o osservazioni da tenere piuttosto che quelle da eliminare.
5.8 Generate and replace
Generate crea una nuova variabile. La sua sintassi è:
[by varlist:] gen
newvar=exp [if exp] [in range]
Se vengono generati dei valori missing, il numero di valori missing vengono riportati in newvar e
anche nella Finestra degli STATA RESULTS.
Replace cambia il contenuto di una variabile esistente. La sua sintassi è:
[by varlist:] replace
oldvar=exp [if exp] [in range]
10
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
5.9 Operatori di STATA
Le espressioni algebriche e logiche usano differenti classi di operatori. STATA differenzia tra :
1. operatori aritmetici: + (addizione), - (sottrazione), * (moltiplicazione), / (divisione), ^
(elevamento a potenza). Ogni operazione aritmetica su un valore missing o un’operazioe
impossibile (per es. la divisione per zero) da luogo ad un valore missing.
2. operatori di stringa: + (concatenazione di stringa), per esempio l’espressione “uffa”+”-che
noia” produce la stringa “uffa-che noia”
3. operatori di relazione: <(meno di), > (più grande di), <= (meno o uguale di ), >= (più
grande o uguale di), == (uguale a ), != (non uguale a), ∼= (non uguale a)
4. operatori logici: & (e), | (oppure), ∼ (not). Gli operatori logici danno come risultato un
valore pari ad se l’espressione è vera, 0 se è falsa.
L’ordine di valutazione segue le regole standard, l’espressione sulla sinistra è quella valutata pre
prima, l’ultima sulla destra è quella valutata per ultima. Le parentesi possono essere usate per
forzare un ordine differente di valutazione
5.10 Funzioni
Le funzioni sono usate nell’espressione exp nella sintassi vista. Al posto di exp molte funzioni
possono essere utilizzate. L’argomento di una funzione può essere una qualsiasi espressione,
anche un'altra funzione.
Per esempio una versione semplificata della sintassi per generate è:
generate newvar=exp
e percio’ si potrebbe scrivere per esempio: generate loginc=ln(income), dove ln() è una
funzione.
Alcuni esempi di funzioni sono:
• funzioni matematiche: exp(x), log(x) o ln(x), sqrt(x), abs(x) e le principali funzioni
trigonometriche
• funzioni statistiche: chiprob(df,x) (coda superiore della distribuzione cumulativa chiquadro con df gradi di libertà), fprob(df1, df2, f) (coda superiore della distribuzione
cumulativa F con df1 e df2 gradi di libertà, invnorm(p) (funzione quantile della normale
standardizzata), normd(z) (densità normale standardizzata), normprob(z) (funzione di
distribuzione normale standardizzata), tprob(f,t) (distribuzione t a due code con df gradi di
libertà
• generatore di numeri pseudo-random: uniform(), che genera numeri pseudo-random
uniformemente distribuiti sull’intervallo [0,1) (non c’è argomento dentro () ). I numeri
pseudo-random secondo una distribuzione normale standardizzata possono essere anche
generati usando il comando invnorm(uniform())
• funzioni speciali, per esempio float(x) (che riporta il valore di x nella tipologia float), int(x)
(che riporta il valore intero di x), max(x1, x2, x3,… xn) e min(x1, x2, x3,… xn) (che riporta
rispettivamente il valore massimo e minimo degli argomenti tra parentesi ignorando i valori
missing, sign(x) (che riporta –1 se x<0 , 0 se x=0, e 1 se x>0 e . se x=.), e sum(x) (che
riporta la somma di x, trattando i valori missing come zeri)
Ci sono anche funzioni che trattano le date e funzioni di serie temporali, così come funzioni
matrici che danno luogo a scalari come det(B) e trace(B) (rispettivamente il determinante
e la traccia della matrice B).
11
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
Esempi:
generate eta2=eta*eta
gen altoy=(y>20000 & y!=.)
replace altoy=. if y<0
Un altro modo per generare la variabil altoy è la seguente:
gen altoy=0
replace altoy=1 if y>20000 & y!=.
gen sommay=yl+yta+ym
gen ylag=y[_n-1]
gen r=uniform()
gen normals=invnorm(uniform))
sort sex
by sex: gen avgy=sum(y)/sum(y!=.)
by sex: replace avgy=avgy[_N]
5.11 Extended generate (EGEN)
Esiste poi il comando egen che rappresenta un’estensione di generate. La sua sintassi è:
egen newvar=fcn(stuff) [if exp] [in range] [,options]
esempi
egen avg=mean(eta)
egen stdeta=std(eta)
egen etareg=sum(eta), by(ireg)
Le principali funzioni di egen sono:
• count (exp) [,by(varlist)] che crea una costante (all’interno di varlist) che
contiene il numero di osservazioni non missing di exp;
• diff(varlist) che crea una dummy uguale ad 1 dove le variabili in varlist sono non
uguali e zero altrimenti
• iqr (exp) [,by(varlist)] crea una costante (all’interno di varlist) che contiene il
range interquartile di exp. La stessa sintassi vale per max(exp), mean(exp),
median(exp), min(exp), sd(exp) e sum(exp) che creano (all’interno di
varlist) rispettivamente il valore massimo, medio, la mediana, il minimo, la deviazione
standard e la somma di exp.
• Pctile(exp) [, p(#) by (varlist)] che crea una costante entro varlist
contenente il #-esimo percentile di exp, con # che puo’ andare da 1 a 99. Se p() non è
specificato, 50 viene assunto per default
12
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
5.12 Variable and Value labels
Una volta che abbiamo creato delle nuove variabili vogliamo poter tener traccia di esse e ricordare
cosa significano. Possiamo fare cio’ creando labels e value labels.
Queste labels non sono necessarie, ma rendono l’output più leggibile. Le variable labels
corrispondono ai nomi delle variabili, le value labels corrispondono ai differenti valori che una
variabile puo’ avere.
La sintassi è:
label variable varname “the name of this variable is…”
es:
label var eta2 “età al quadrato”
In STATA i nomi delle variabili appaiono nel riquadro in basso a sinistra (VARIABLES Window).
Ogni qualvolta la variabile eta2 appare sullo schermo apparirà anche la sua label.
A questo punto puo’ essere utile anche assegnare delle label. Guardiamo alla variabile sex. Essa
non ha labels ed assume solo sue valori 1 e 2. Ma cosa significano? Per evitare di memorizzarlo o di
consultare sempre un codebook, possiamo usare i seguenti comandi:
label define grp 1 “male” 2 “female”
label values sex grp
A questo punto se digiti
ta sex
vedrai la differenza. Ricorda che bisogna prima bisogna definire (define) la label, poi associare
quella label con una variabile. Ogni label puo’ essere associata a più di una variabile, così che se ci
sono molte domande a risposta “si/no/non so”, basta definire una value label e usarla per tutte le
domande. Tuttavia si puo’ associare una sola value label con una stessa variabile.
5.13 By group
Talvolta è necessario eseguire un comando o un’analisi su gruppi differenti di osservazioni. Il
comando “by variable” permette di ottenere lo stesso risultato che si sarebbe ottenuto usando il
comando “if” su ogni sottogruppo. Prima di usare il comando “by” bisogna fare un sort (spiegato
successivamente) cioè un ordinamento dei dati:
Esempi.
sort sex
by sex: sum eta
by sex: gen lag2=eta[_n-1]
Spiegare questa scrittura [_n-1]
Inoltre c’è un modo per far eseguire a STATA il comando senza far vedere tutto l’output. Per
eliminare l’output dallo schermo ma non dal log file usare il comando “quietly”:
quietly by sex: gen
lag2=eta[_n-1]
13
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
5.14 Sort e gsort
Come già visto il comando sort sistema i dati in ordine crescente rispetto ai valori delle variabili
in varlist. Non c’è limite al numero di variabili in varlist. I valori missing vengono interpretati
come i valori più grandi e percio’ sono messi in fondo. Come visto nel comando precedente è
necessario usare il sort quando si vuole usare il comando by.
La sintassi è:
sort varlist [in range]
Esempi
sort age
sort y
gsort invece aggiusta le osservazioni in ordine crescente o decrescente delle variabili in
varlist. Le osservazioni sono messe in ordine crescente di varname se + o niente è specificato
di fronte al nome e in ordine discendente se è specificato –
La sintassi è:
gsort [+|-] varname [+|-] carname […] [, generate (newvar) mfirst]
dove generate (newvar) crea delle variabili newvar contenenti 1, 2, 3… per ognuno dei
gruppi indicati dalle varnames ordinate. mfirst indica che i valori missing devono essere messi
per primi nell’ordine discendente piuttosto che per ultimi
Esempi
gsort
gsort
gsort
gsort
y
+y
–y eta
–y, gen(revy)
5.15 Cambiare e rinominare le variabili
Il contenuto di una variabile esistente puo’ essere cambiato usando il commando replace, mentre
il nome di una variabile esistente puo’ essere cambiato (senza che il suo contenuto cambi) usando il
commando rename.
Il comando recode varname cambia i valori di varname secondo le regole specificate. Per
esempio,
recode ireg 20=19
cioè cambia il valore di 20 della variabile ireg in 19
Volendo cambiare il nome della variabile ireg e dargli il nome regioni, basta scrivere:
rename ireg regioni
(ricorda che STATA accetta i numeri e i caratteri ASCII nei nomi delle variabili ma non gli
spazi bianchi, per cui non avremmo potuto chiamare la variabili regioni Italia)
Vedere anche i due comandi encode e decode
14
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
6. STATISTICHE DESCRITTIVE
6.1 Count
Count conta le osservazioni anche dopo aver specificato delle restrizioni. La sintassi è:
[by varlist:] count[if exp] [in range]
Se nessuna condizione è specificata, allora count conta il numero di osservazioni nel dataset
Esempi
count
count if y>20000
by eta: count if y<0
6.2 Summarize
Summarize (o la sua abbreviazione sum) riporta un insieme di statistiche descrittive per una certa
variabile. La sua sintassi è:
[by varlist:] summarize [varlist] [weight][if exp] [in range][,
detail | meanonly format]
dove detail produce statistiche addizionali come kurtosis, skweness, i 4 valori più grandi e più
piccoli, vari percentili, meanonly elimina il display dei risultati e il calcolo della varianza (è
permesso solo quando detail non è specificato), format richiede che le summary statisitcs
siano mostrate usando il display format associato con le variabili piuttosto che il formato default g.
Esempi
summarize
sum eta
sum y, detail
6.3
Means
Means riporta le medie aritmetiche, geometriche, armoniche, con i rispettivi intervalli di
confidenza, per le variabili specificate. La sua sintassi è:
means [varlist] if exp [in range] [, add(#) only level]
dove add(#) aggiunge il valore # ad ogni variabile in varlist prima di calcolare la madia e
intervallo di confidenza (utile qando si analizzano variabili con valori non positivi), only modifica
l’azione dell’opzione add() (se specificato l’opzione add() aggiunge # solo alle variabili con
almeno un valore non positivo) e level(#) specifica il livello di confidenza percentuale per gli
intervalli di confidenza.
Il comando ci (invece di means)puo’ essere usato se si vogliono semplicemente medie
aritmetiche e corrispondenti intervalli di confidenza, e standard errors.
15
Stata Tutorial
Economia e Politica del Lavoro
6.4
Daniela Vuri
Centile
centile riporta i centili delle variabili specificate e i lori intervalli di confidenza. Per default, gli
intervalli di confidenza sono ottenuti usando un metodi binomiale che non fa assunzioni circa la
distribuzione della variabile in questione. La sintassi è:
centile [varlist] [if exp]
normal meansd level(#)]
[in
range]
[,
centile(numlist)
cci
dove centile (numlist) specifica i centili che devono essere riportati (se non è specificato si
riporta la mediana), cci (conservative confidence interval) previene che centile interpoli
quando calcola i limiti di confidenza ottenuti senza assunzioni sulla distribuzione, normal
specifica che gli intervalli di confidenza siano ottenuti assumendo che gli stessi centili stimati siano
normalmente distribuiti, meansd calcola gli intervalli di confidenza assumendo che i centili stessi
stimati sono distribuiti normalmente.
Il comando pctile newvar=exp crea una nuova variabile che contiene i percentili di exp.
6.5
Cumul
cumul crea una nuova variabile che contiene la funzione di distribuzione cumulativa di una
variabile. La sintassi è:
cumul varname
by(varlist)]
[weight][if
exp]
[in
range],
gen(newvar)
[freq
dove gen(newvar) specifica il nome di una nuova variabili che deve essere creata e non è
opzionale (sapreste dire da cosa si riconosce che non è opzionale?), freq richiede che la
cumulativa sia in unità di frequenza, altrimenti è normalizzata in modo tale che newvar sia 1 per
il valore più grande di varname, e by(varlist) specifica che la cumulativa deve essere
calcolata separatamente nei gruppi indicati da by.
6.6
Correlate
correlate riporta la matrice di varianza o correlazione delle variabili specificate. Alcune
osservazioni possono essere escluse dal calcolo a causa di missing values. La sintassi è:
[by varlist:] correlate [varlist] [weight] [if exp] [in range] [,
means noformat covariance wrap]
dove means riporta statistiche tipo medie, devianze, valori minimi e massimi, noformat riporta
le summary statistics richieste dall’opzion means nel formato g indipendentemente dal formato
associato alle variabili, covariance riporta la matrice di covarianza piuttosto che quella di
correlazione, and wrap richiede che nessuna azione sia presa su matrici ampie per renderle
leggibili. E’ molto improbabile che si abbia bisogno di specificare tutte queste opzioni.
16
Stata Tutorial
Economia e Politica del Lavoro
6.7
Daniela Vuri
TABLES
6.7.1
Table
table fornisce tabelle di summary statistics. La sua sintassi è:
table rowvar [colvar [supercolvar]] [weight] [if exp] [in
range] [,contents(clist) by(superrow_varlist) cw row col scol
format(%fmt) center left concise missing replace name(string)
cellwidth(#) csepwidth(#) scsepwidth(#) stubwidth(#)]
dove contents(clist) specifica il contenuto delle celle della tabella (fino a 5 statistiche
possono essere specificate, se content() non è specificato si assume che sia
content(freq)), clist ha lo stesso significato che in collapse (vedere), row
specifica che una riga deve essere aggiunta alla tabella riflettendo il totale per riga, col
specifica che una colonna deve essere aggiunta alla tabella riflettendo il totale per colonna,
format(%fmt) specifica il formato per presentare i numeri nella tabella, center specifica
che i risultati devono essere mostrati al centro della tabella (il default è a destra), left
specifica che i risultati devono essere mostrati a sinistra nella tabella (il default è a destra),
missing specifica le statistiche missing devono essere mostrate nella tabella come “periods”.
Vedere l’help on line o il manuale Table[R] per le altre opzioni.
6.7.2
Tabulate
Tabulate fornisce tabelle di frequenza a una o due entrate insieme ad altre misure di
associazione come il Pearson chi-squared, il likelihood ratio chi-squared, Fisher’s exact tets
etc.
La sintassi per la tabella ad una entrata è:
[by varlist:] tabulate varname [weight] [if exp] [in range]
[,generate (varname) matcell(matname) matrow(matname) missing
nofreq nolabel plot subpop(varname)]
La sintassi per la tabella a doppia entrata è:
[by varlist:] tabulate varname1 varname2 [weight] [if exp] [in
range]
[,all
cell
chi2
column
exact
gamma
lrchi2
matcell(matname)
matrow(matname)
matcol(matname)
missing
nofreq nolabel row taub V wrap]
dove all è equivalente a specificare le statistiche test: chi2 lrchi2 V gamma taub, cell
mostra le frequenze relative di ogni cella della tabella a doppia entrata, chi2 calcola il chi-2
di Pearson per l’ipotesi che righe e colonne della tabella siano indipendenti, column mostra
in ogni cella della tabella a doppia entrata le frequenze relative di quella cella all’interno della
colonna, exact mostra la significatività calcolata dal test di Fisher, gamma mostra la gamma
di Goodman e Kruskal con il suo errore standard asintotico, generate(varname) crea un
insieme di variabili indicatore che riflettono i valori osservati della variabile tabulata (vedi
esempio), lrchi2 mostra la statistica likelihood ratio chi_2, matcell(matname) salva le
frequenze nella matrice matname, matcol(matname) salva i valori della colonna nel
vettore matname, lo stesso per matrow, missing richiede che i valori missing siano
17
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
trattati come gli altri valori nel calcolo delle statistiche, nofreq sopprime la presentazione
delle frequenze, nolabel fa mostrare i codici numerici piuttosto che le labels, plot
produce un istogramma a barre delle frequenze relative di una tabella ad una entrata, row
mostra in ogni cella di una tabella a doppia entrata le frequenze relative di quella cella nella
sua riga, subpop(varname) esclude osservazioni per cui varname=0 nel tabulare le
frequenze, taub mostra il Kendall tau-b con il suo errore standard asintotico, e V mostra la V
di Cramer.
esempio
tabulate sex
tab sex studio
ta studio, ge(studiox)
Questo ultimo comando ci permette di creare una variabile per ogni categoria di cui la
variabile studio si compone. In altre parole dalla variabile studio che ha 7 categorie si passa
a 7 variabili dummy (0/1), una per ogni categoria di studio. Queste nuove variabile saranno
chiamate: studiox1, studiox2,…studiox7
6.7.3
Tabsum
tabulate, summarize() produce tabelle di summary statistics ad una e a due entrate.
Sebbene table sarebbe meglio, tabulate, summarize() è più veloce.
La sua sintassi è:
[by varlist:] tabulate varname1 [varname2] [weight] [if exp]
[in range], summarize (varname3) [ [no]means [no]standard
[no]freq [no]obs wrap nolabel missing]
dove summarize (varname3) identifica il nome della variabile per cui si vuole riportare
le summary statistics, [no]means include solo o sopprime solo le medie dalla tabella (in
generale la tabella con summarize include le medie, deviazioni standard, frequenze, e se I dati
sono pesati, il numero di osservazioni), [no]standard include solo o sopprime solo le
deviazioni standard, [no]freq include solo o sopprime solo le frequenze dalla tabella
dalla tabella, [no]obs include solo o sopprime solo il numero di osservazioni dalla tabella, e
missing richiede che i valori missing di varname1 e varname2 siano trattati come categorie
piuttosto che come osservazioni da essere omesse nell’analisi.
6.8 Un comando interessante: “FOREACH”
Un comando molto utile quando si vuole ripetere la stessa procedura su molte variabili è il
comando “FOREACH”.
Consideriamo direttamente un esempio. Questo esempio richiede una piccola conoscenza della
programmazione ma si puo’ tenere a mente per quando avrete più familiarità con STATA.
local redditi "y yl yta ym"
foreach x of local redditi {
sum `x'
}
18
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
In questo esempio abbiamo definito una macro locale chiamata redditi che si compone delle 4
variabili di reddito. Poi abbiamo detto a STATA di fare un summarize per ogni variabile (x)
presente in redditi. Le parentesi graffe sono necessarie per dire a STATA dove inizia e dove
finisce questo loop. Allo stesso modo è indispensabile inserire la x tra virgolette (nota che le
virgolette non sono esattamente uguali a quelle che si trovano sulla tastiera italiana ma la prima
delle due deve essere ricercata tra i SIMBOLI (clicca su INSERISCI in Word e poi su simboli).
19
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
7. LAVORANDO IN MODO INTERATTIVO
7.1. Keeping logs
Se decidi di lavorare in modo interattivo con Stata (usando la finestra “STATA COMMAND”),
devi trovare un modo per tenere traccia di cio’ che hai fatto e poter riprodurre i risultati. Quello che
occorre è il comando log: scrivi Help log nella finestra dei Comandi oppure si usa l’HELP dal
file menu. Un log non è altro che un ASCII file che contiene ogni cosa digitata e ogni cosa che
STATA scrive in risposta. La sintassi è:
•
log using filename, [append replace]
Successivamente si puo’ chiudere il log file scrivendo:
•
log close
o semplicemente uscendo da STATA. Se pero’ successivamente si torna in STATA e si cerca di
riaprire il log, STATA si rifiuterà. A questo punto ci sono tre alternative:
1. si inizia un nuovo log con un nome differente
2. lo si incolla (append) alla fine del log corrente (scrivendo log using
filename, append)
3. si dimentica il vecchio log e lo si sostituisci con uno nuovo (si scrive log using
filename, replace)
Questo commando è molto utile quando si costruisce un do-file (che è una lista di comandi da
inserire in un unico file).
Esempi
log using pinco
rename sex sesso
log close
log using pinco
A questo punto Stata dirà che pinco.log già esiste. Allora quello che bisogna scrivere all’inizio è:
log using pinco, replace
Ma cosa succede se ci si dimentica di iniziare un log file? Esiste un modo di salvare cio’ che si è
fatto usando il log file e il comando #review. Questo comando permette di salvare gli ultimi #
comandi digitati. Dopo qualche altro comando e cambiando l’estensione in “.do” possiamo farlo
girare come un do file. Vediamo un piccolo esempio:
log using iforgot **inizia il log file
#review 20
** elenca gli ultimi 20 comandi
log close
**chiude il log file
Il file iforgot.log avrà gli ultimi 20 comandi digitati. Dopo aver inserito qualche altro
comando che tra poco vedremo, sarà possibile far girare questo file come un do file iniziando un
nuovo log.
20
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
8. COME COSTRUIRE UN DO FILE
Abbiamo già creato in formato .dta (il formato di STATA) i dati necessari (eserc.dta), e
siamo pronti ad iniziare.
Prima di tutto vediamo come inserire i commenti in STATA (molto utile se tornate sui do files dopo
molti mesi). Ci sono due modi:
1. iniziare una linea con un “*”: Stata ignora tale linea;
2. mettere i commenti con i delimitatori /* */ .
Iniziamo:
Nella finestra STATA COMMAND scriviamo:
set memory 20m
Adesso si inizia a scrivere il do-file nel DO-FILE EDITOR (5 pulsante da destra con la busta
sopra). Un do file puo’ essere scritto nel do-file editor ma anche con un qualsiasi altro editor
(Notepad, Word, WindWord,…). Adesso scriviamo:
----------------------------------------------------------------------------------------------------------------------------------
capture log close
clear
#delimit;
*this command resets the character that marks the end of a command,
so NEVER forgets at the end of a command;
set more off;
log using c:/corso_lavoro/eserc1.log,
conservato nel file eserc1.log*/
replace;
/*l’output
è
*Prima versione:dd/mm/yy;
* Contenuto del file: legge dati da Bank of Italy dataset ;
drop _all;
cd c:/corso_lavoro/dati; *gli sto indicando dove si trovano i
dati,alternativamente si poteva anche
scrivere direttamente
use c:/corso_lavoro/data/eserc.dta;
use eserc.dta,clear;
* definizione delle etichette di alcune variabili;
sort nnquest nord;
label variable yl "redd.netto lavoro dip.";
label variable ym "redd.netto lavoro aut.";
label variable yta "redd.netto pens.trasf.";
label variable y "redd.totale";
label variable ireg "regione di residenza";
21
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
label define reg
1 "PIEMONTE"
2 "VALLE D'AOSTA"
3 "LOMBARDIA"
4 "TRENTINO"
5 "VENETO"
6 "FRIULI"
7 "LIGURIA"
8 "EMILIA ROMAGNA"
9 "TOSCANA"
10 "UMBRIA"
11 "MARCHE"
12 "LAZIO"
13 "ABRUZZI"
14 "MOLISE"
15 "CAMPANIA"
16 "PUGLIA"
17 "BASILICATA"
18 "CALABRIA"
19 "SICILIA"
20 "SARDEGNA";
label value ireg ireg;
ta studio;
*a questo punto diamo delle labels alla variabile studio;
label variable studio "massimo titolo di studio";
label define studio
1 "nessuno"
2 "lic.elementare"
3 "lic.media inf."
4 "dipl.prof.(3 anni)"
5
"dipl.media sup."
6 "dipl.univ./lau.breve"
7 "laurea"
8 "post-laurea";
label value studio studio;
label variable tipodip "tipo diploma scuola superiore";
label define tipodip
1 "ist.professionale"
3 "ist.tecnico"
3 "liceo"
4 "lic.artistico"
5 "magistrali"
6 "altro";
label value tipodip tipodip;
label variable tipolau "tipo laurea";
label define tipolau
22
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
1 "matem.fis.chim.biol.farm"
2 "agraria/veterinaria"
3 "medicina/odontoiatria"
4 "ingegneria"
5 "architettura/urbanistica"
6 "economia/statistica"
7 "sc.politiche/sociologia"
8 "giurisprudenza"
9 "lett.filos.ling.pedag."
10 "Altro";
label value tipolau tipolau;
* descrizione del data-set;
des;
* tabella per regioni e generazione delle dummies regionali;
tab ireg, gen(regio);
* tabella per massimo titolo di studio;
tab studio;
* grafico distribuzione per età;
*i grafici non li abbiamo ancora visti ma questo è un modo
semplice di mostrare un istogramma con 50 colonne della variabile
età;
graph7 eta, bin(50);
* generazione della variabile "anni di studio";
gen
annist=0 if studio!=.;
replace annist=5 if studio==2;
replace annist=8 if studio==3;
replace annist=11 if studio==4;
replace annist=13 if studio==5;
replace annist=16 if studio==6;
replace annist=18 if studio==7;
replace annist=20 if studio==8;
label variable annist "anni studio completati";
* tabella a doppia entrata massimo titolo di studio - anni di
studio per verificare cio’ che abbiamo fatto;
tab studio annist;
* genera una nuova variabile - logaritmo del reddito;
gen lyl=log(yl);
23
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
*grafico reddito - logaritmo del reddito;
graph7 lyl;
* statistiche descrittive;
sum annist y yl ym yt;
* genera una nuova variabile - età al quadrato;
gen eta2=eta^2;
*guardiamo la media e la deviazione standard della variabile eta2;
su eta2,d;
*calcoliamo il salario medio yl di coloro che hanno un’età
compresa fra 20 e 29 anni, e confrontiamolo con il salario medio
di coloro che hanno un’età compresa fra 50 e 59 anni;
sum yl if eta>=20 & eta<=29;
sum yl if eta>=50 & eta<=59;
*riporta la media
educazione;
sort studio;
by studio: su yl,d;
e
la
mediana
di
yl
per
ogni
livello
di
*calcola la percentuale di uomini che sono percettori di reddito
(ricorda che sex=1 indica gli uomini) ;
ta perc sex, col;
*calcola la percentuale
percettori di reddito ;
ta perc sex, row;
di
donne
fra
coloro
che
non
sono
*confronta la media di studio degli uomini percettori di reddito
con la media di studio delle donne che non sono percettrici di
reddito;
su studio if sex==1 & perc==1;
su studio if sex==2 & perc==0;
*genera una nuova variabile che indica se il soggetto è dentro o
fuori dalle forze di lavoro;
gen fl=1 if apqual<=10;
replace fl=0 if fl==.;
*calcola la percentuale di uomini che partecipa alla forza lavoro;
ta fl sex, row;
*a questo punto salviamo tutto quanto abbiamo ottenuto;
save c:/corso_lavoro/mydata/earnings.dta, replace;
----------------------------------------------------------------24
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
Rimane da salvare anche il do-file con un nome. Un trucco che spesso si utilizza è quello di
chiamare il log file e il do file nello stesso modo così da associare i comandi all’output (senza dover
ricordare molti nomi).
Allora da dentro il do-editor si salva il file con la stessa procedura usata per salvare un qualsiasi
file di testo. Da FILE si clicca su SAVE FILE AS e si salva dandogli come nome eserc1.do. E’
necessario ricordare la directory in cui viene salvato, generamente è conveniente mettere il do file
nella stessa directory del log file , ma è questione di gusti!!!
A questo punto chiudiamo il DO-FILE EDITOR, torniamo in STATA, clicchiamo su File dalla
barra degli strumenti, e poi su DO, selezioniamo il file eserc1.do in c:/corso_lavoro e
guardiamo i risultati.
Si puo’ anche vedere il nuovo dataset creato con le nuove variabili cliccando sul DATA
BROWSER (terzo pulsante dalla destra).
Adesso si puo’ uscire da Stata, scrivendo nella finestra STATA COMMAND:
clear
exit
25
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
9 MANIPOLAZIONE DEI DATI
Adesso studiamo come è possibile combinare i dati in STATA e manipolarli. Vedremo alcuni
comandi principali. Studieremo due comandi principali che servono per “combinare” i dati:
append e merge.
Per modificare il formato dei dati studieremo altri comandi: reshape, collapse,
contract, expand e fillin.
9.1
Combinare differenti dataset insieme
9.1.1 Append
Combina i dataset verticalmente, aggiungendo osservazioni. Viene usato per combinare un dataset
in memoria, chiamato master data, a uno (o più) dataset memorizzato su disco in formato-STATA,
chiamato using data.
La sintassi di base è:
append using filename [, nolable]
dove nolable evita di copiare le definizioni dei valori delle label dal dataset su disco. Se
filename è specificato senza un estensione, si assume che dia un file di Stata, cioè .dta.
Vediamo come funziona praticamente. Creiamo 2 piccoli dataset digitando i seguenti comandi (/in
realtà uno era stato creato già nella lezione precedente, cioè one.dta:
1.pull down the DATA EDITOR button at the top of the screen (the fourth
button from the right)
2.10
11
12
13
14
15
16
17
18
3. double chick on var1 and substitute with a; do the same with var2 and
var3 and substitute with b and c
4. close the Data Editor and come back to the STATA COMMAND Window
5. save c:/corso_lavoro/mydata/two.dta, replace
6. use c:/corso_lavoro/mydata/one.dta
7. append using c:/corso_lavoro/mydata/two.dta
8. click on DATA BROWSER (the third button from the right)
9. inspect the result
append è creato per risolvere il problema di aggiungere più dati ad un dataset già esistente. Tale
comando combina datasets differenti aggiungendo verticalmente osservazioni. Il nostro esempio
riguardava 2 datasets con le stesse variabili (a,b,c), ma non è necessario avere tutte le variabili in
comune.
Per esempio potremmo avere una situazione in cui il dataset two.dta contiene a e b in comune
con il dataset one.dta, ma contiene anche d che invece one.dta non ha. append funziona
ugualmente e le osservazioni del dataset creato avranno un valore missing in corrispondenza della
variabile d.
Prova da solo con un esempio creato da te modificando leggermente il programma scritto sopra
1. crea un dataset con le variabili a,b e d.
2. salvato
3. append questo file a uno di quelli già esistenti
26
Stata Tutorial
Economia e Politica del Lavoro
4. guarda
I
risultati
e
salva
c:/corso_lavoro/mydata
Daniela Vuri
questo
nuovo
dataset
nella
directory
Il dataset in memoria viene chiamato “master” mentre il dataset “attaccato” è chiamato “using”
data.
Questa distinzione è molto importante nel prossimo comando
9.1.2
Merge
Questo comando combina i datasets orizzontalmente, aggiungendo variabili. La sua forma più
semplice è il one-to-one matching. Il comando merge combina osservazioni dal dataset
correntemente in memoria (chiamato master dataset) con il dataset immagazzinato come filename
(chiamato using dataset). La sintassi di base è:
merge [varlist] using filename [, nolabel update replace nokeep
_merge(varname)]
dove nokeep ordina a merge di ignorare osservazioni nello using dataset che non hanno
corrispondenti osservazioni nel master (per default invece queste osservazioni sarebbero aggiunte ai
risultati del merge e segnalati con merge==2); merge(varname) specifica il nome della
variabile che indicherà la sorgente della risultante osservazione (cioè se proviene dal master, dallo
using data o è comune ad entrambi i datasets). Il default è merge(_merge). Vediamo come
funziona con un esempio (i due datasets three.dta e four.dta, sono stati già creati e inseriti
nella directory mydata, perciò potete andare direttamente al punto 13)
1. pull down the DATA EDITOR button at the top of the screen (the
fourth button from the right)
2. from the left to the right write the following numbers:
1 10
11
2 12
13
3 14
15
5 16
17
3. double click on var1 and substitute with id; do the same with
var2 and var3 and substitute with a and b respectively
4. close the DATA EDITOR and come back to the STATA COMMAND window
5. sort id
6. save three.dta, replace
7. repeat point 1
8. from the left to the right write the following numbers:
1 18
2 19
4 20
9. double click on var1 and substitute with id; do the same with
var2 substitute with d
10. close the Data Editor and come back to the STATA COMMAND
window
11. sort id
12. save c:/corso_lavoro/mydata/four.dta, replace
13. use c:/corso_lavoro/mydata/three.dta, clear
14. merge id using c:/corso_lavoro/mydata/four.dta
27
Stata Tutorial
Economia e Politica del Lavoro
15.
16.
17.
18.
Daniela Vuri
list
tab _merge
keep if _merge==3
drop _merge
CI DEVE ESSERE UNA (O PIÙ) VARIABILE IN COMUNE A ENTRAMBI I DATASET
DA USARE PER IL MERGE
QUESTA VARIABILE è CHIAMATA IDENTIFIER(S)
L’IDENTIFIER (NEL NOSTRO CASO LA VARIABILE ID) DEVE IDENTIFICARA IN
MODO UNIVOCO OGNI OSSERVAZIONE
Qui riportiamo cosa significano i codici in _merge:
_merge==1. Osservazione solo dal master, no merge, no update
_merge==2. Osservazione solo dal file using, no merge, no update
_merge==3. Osservazione merged, ma senza update.1
_merge==4. Osservazione merged e updated, cioè almeno un valore missing nel master è stato
updated a un valore non missing preso dallo using data.
_merge==5. Osservazione merged ma non updated, cioè l’update è rifiutato. Il risultato è uguale
al _merge==3, ma c’erano degli updates nello using data inconsistenti con cio’ che già si aveva e
percio’ l’update è rifiutato.
N.B Quale dei _merge debba essere eliminato va deciso caso per caso.
Vedi anche i comandi – cross, e joinby.
9.1.3 Reshape
reshape converte i dati dal formato wide al formato long e viceversa. La sua sintassi di base è:
reshape wide varnames, i(varlist) [j(varname)]
reshape long varnames, i(varlist) [j(varname)]
dove i(varlist) specifica una variabile il cui unico valore denota un’osservazione,
j(varname) specifica la variabile in cui valore unico denota una sottosservazione.
Un caso tipico è quello descritto nel file c:/corso_lavoro/mydata/resh.dta
Aprite il file, guardate il DATA BROWSER e vedrete che i dati sono in formato long cioè la
stessa osservazione identificata da id è ripetuta tre volte perchè lo stesso individuo con lo stesso
valore id è osservato per tre anni (1990, 1991, 1992 come si vede dalla variabile anni). Se
vogliamo vedere solo una osservazione (riga) per ogni individuo e che i tre valori di var1
compaiono su tre colonne diverse e non nella stessa colonna, si deve scrivere:
reshape wide var1, i(id) j(anni)
Adesso guardate di nuovo i dati dal DATA BROWSER e vedete come si sono trasformati.
Si può fare l’operazione inversa andando dal formato long al formato wide scrivendo:
reshape long var1, i(id) j(anni)
1
Si usa la parola update per indicare cambiamenti fatti al master data.
28
Stata Tutorial
Economia e Politica del Lavoro
9.1.4
Daniela Vuri
Collapse
collapse sostituisce i dati in memoria con un nuovo dataset consistente di medie, mediane etxc,
delle variabili specificate. La sua sintassi è:
collapse clist [weight] [if exp ] [in range] [, by(varlist) cw
fast]
dove clist puo’ essere
[(stat)] varlist [(stat)…]
oppure
[(stat)] target_var=varname [target_var=varname…] [(stat)…]
o ogni combinazione di varlist o target_var, e stat è uno dei seguenti: mean (medie), sd
(standar deviation), sum (somme), rawsum (somme ignorando i pesi eventualmente specificati),
count (numero di osservazioni non missing), max (massimo), min (minimo), median (mediana),
p# (#-simo percentile), iqr (range interquantile). Se stat non è specificato si assume mean.
L’opzione by(varlist) specifica i gruppi su cui le medie, etc vogliono essere calcolate, cw
specifica casi da eliminare (se non specificato tutte le osservazioni vengono considerate), e fast
indica che si puo’ tornare ad dataset originale premendo Break mentre il collapse viene
eseguito
9.1.5 Contract
contract crea un dataset di frequenze. Esso sostituisce un dataset in memoria con uno nuovo
consistente in tutte le combinazioni di varlist che esistono nei dati insieme ad una nuova
variabile che contiene le frequenze di ogni combinazione. La sintassi è:
contract varlist [weight] [if exp ] [in range] [, freq(varname)
zero nomiss]
dove freq(varname) specifica il nome della variabile di frequenze (se non specificato, STATA
crea automaticamente la variabile _freq, ma tale nome non deve essere già presente), zero
specifica le combinazioni con frequenza zero desiderate, e nomiss specifica che le osservazioni
con valori missing in ognuna delle variabili in varlist devono essere eliminate (se non
specificato, tutte le osservazioni possibili vengono usate).
9.1.6
Expand
expand sostituisce ogni osservazione nel dataset corrente con n copie di ogni osservazione, dove
n è uguale alla parte intera dell’espressione richiesta (se l’espressione è meno di uno o missing
allora viene interpretata come uno e l’osservazione non viene duplicata). La sintassi è:
expand [=]exp
[if exp] [in range]
esempio
expand 2
29
Stata Tutorial
Economia e Politica del Lavoro
9.1.7
Daniela Vuri
Fillin
fillin rettangolarizza un dataset aggiungendo osservazioni con dati mancanti così che esistano
tutte le interazioni delle variabili in varlist. fillin aggiunge anche la variabile _fillin ai
dati ed è uguale ad 1 se un’osservazione è stata creata e zero altrimenti. La sintassi è:
fillin varlist
Per esempio, se abbiamo sex=1 e perc=1, sex=1 e perc=0 ma abbiamo solo sex=2 e perc=0, questo
comando aggiungerà un record per sex=2 e perc=1.
30
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
10. MODELLO DI REGRESSIONE LINEARE
In STATA si puo’ stimare il modello di regressione lineare usando il comando regress (o reg).
Supponiamo che siate già familiari con il modello di regressione lineare, oppure potete vedere
Wooldridge 2003, Introductory Econometrics.
Supponiamo che la variabile dipendente sia depvar e le variabili indipendenti siano elencate in
varlist. Allora il comando per eseguire una regressione lineare è:
reg depvar varlist
La prima variabile dopo il comando regress è sempre la variabile dipendente e la lista seguente
rappresenta le variabili indipendenti. Supponiamo di avere per esempio dei dati con osservazioni
individuali sui salari,e siamo interessati a regredire il logaritmo naturale del salario medio
settimanale (lyl) su una variabile dummy di sesso, su una variabile dummy di razza, sugli anni di
scuola, sull’età e su una costante.
reg lyl sex race school age
Nota che STATA aggiunge automaticamente la costante (_cons) alla lista delle variabili
indipendenti. Se vogliamo escluderla, si puo’ usare l’opzione nocons:
reg lyl sex race school age, nocons
Come per gli altri comandi di stata esistono una serie di opzioni che possono essere applicate. Per
esempio, si puo’ ordinare a STATA fare una regressione solo su un sottogruppo della popolazione
usando l’opzione if exp (o in range)
Per esempio una regressione solo sulla popolazione maschile:
reg lyl sex race school age if sex==0
Se vuoi avere maggiori informazion, scrivi help regress nella STATA COMMAND window.
Tra le opzioni più utili c’è l’opzione robust, che permette di stimare una regressione usando uno
stimatore “robusto” per la varianza (lo stimatore Huber/White/ sandwich). Questa opzione va usata
quando si pensa che i residui siano eteroschedastici:
reg lyl sex race school age
Un’altra opzione che puo’ essere utile è quella che permette di realizzare regressioni con variabili
strumentali (o 2SLS). Supponiamo di avere una variabile dipendente y1 e una lista di variabili
indipendenti x1 x2 e x3. Ora assumiamo che x3 sia endogena e di avere uno strumento z1 per
risolvere tale problema. Allora basta scrivere:
reg y1 x1 x2 x3 (z1 x1 x2)
che è equivalente a
ivreg y1 x1 x2 (x3=z1 x1 x2)
31
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
e otterrai i risultati del secondo stadio nella procedura 2SLS.
10.1 Modello logit e probit
Quando la variabile dipendente è dicotomica (0/1) si puo’ usare il modello di regressione lineare ma
è concettualmente più corretto utilizzare una regressione probit o logit. Di nuovo assumiamo che
siate familiari con i modelli logit e probit e la teoria sottostante. La sola differenza tra il modello di
probabilità lineare (LPM), il modello logit e il modello probit è l’assunzione che si fa sulla
distribuzione
di
probabilità
della
variabile
dipendente.
Supponiamo che y sia la variabile dipendente, e x
specificazione generale dei tre modelli è:
e
z quelle indipendenti. Allora la
Prob(y=1)=F(bx+cz)
Prob(y=0)=1-F(bx+cz)
dove b e c sono i coefficienti di x e z, e F( .) è una certa funzione di densità cumulativa.
• Il LPM assume che F(a)=a.
• Il modello logit assume che F(.) sia una funzione di distribuzione logistica standard
• il modello probit assume che F sia una funzione di distribuzione normale standard.
Per una regressione logit , basta digitare
logit depvar varlist
Per una regressione probit , basta digitare
probit depvar varlist
STATA riporta le stime di massima verosimiglianza per i coefficienti originali sia nel comando
probit e logit. Se si è interessati ad altri coefficienti si puo’ usare dprobit che stima un probit
model ma riporta il cambiamento nella probabilità per cambiamenti infinitesimali in ogni variabile
indipendente.
Il comando logistic stima un modello logit ma riporta gli odds-ratio per ogni variabile
indipendente piuttosto che i coefficienti.
Il comando logistic offre anche molti comandi post-stime che possono essere usati per valutare
la bontà del modello. Questi comandi vengono eseguiti dopo che la stima viene realizzata. Vedere
help logistic per una lista di questi comandi.
In ultimo, tutti questi comandi (come regress) possono essere applicati su un sottocampione delle
osservazioni, essere eseguiti senza una costante, e possono generare stime usando errori standar
robusti tramite l’opzione robust.
32
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
10.2 Predizioni
Dopo i comandi visti prima, alcuni valori predetti possono essere imputati. I più importanti sono i
valori predetti della variabile dipendente e i residui predetti. Per poter generare i valori predetti della
variabile dipendente di ogni modello bisogna generare una nuova variabile (per es. yhat) che
associa ad ogni osservazione il suo valore predetto basato sui coefficienti ottenuti dalle stime e
basati su particolari valori delle variabili indipendenti per ogni osservazione. Supponiamo di
eseguire un modello di regressione lineare sui nostri dati e di voler stimare il salario settimanale
medio (in log) predetto:
reg lyl sex studio eta
predict yhat
allora una nuova variabile chiamata yhat verrà generate da STATA (se tale variabile già esiste
STATA vi darà un messaggio di errore e dovrete scegliere un altro nome). Nello stesso modo si
puo’ ottenere una nuova variabile “res” con i residui predetti per ogni osservazione:
reg lyl sex studio eta
predict res, residual
Una delle assunzioni di base del modello di regressione lineare è che i residui siano distribuiti
secondo una normale. Per verificarne la distribuzione possiamo fare un controllo grafico:
graph7 res, bin(20)
graph7 res, bin(20) normal
Un altro modo per verificare la normalità dei residui è rappresentato dal comando kdensity
kdensity res, normal
L’opzione normal aggiunge al grafico la distribuzione normale di riferimento.
Inoltre è possibile verificare l’ipotesi di Omoschedasticità (omogeneità della varianza dei residui).
Se il modello si adatta bene, allora non dovremmo osservare nessun pattern nei residui: Esistono
due tipi di test:
1. test grafico: rvfplot, yline(0)
2. test formale: hettest (test di Breusch-Pagan)
Nota che dopo il comando logistic alcuni comandi di predizione possono essere eseguiti usando
il comando lpredict.
33
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
10.3 Modello di accumulazione di capitale umano
Vediamo di analizzare uno dei modelli più utilizzati nell’economia del lavoro e con cui forse siete
più familiari cioè quello dell”accumulazione di capitale umano”.
Vogliamo analizzare la relazione fra reddito da lavoro dipendente e anni di studio.
Due domande vengono immediatamente alla mente:
1. qual è la misura corretta della nostra variabile dipendente?
2. Quali variabili dovrebbero entrare nell’equazione?
Non c’è UNA risposta esatta!!!
Sappiamo che il salario è il risultato della produttività del lavoratore. Tuttavia, noi non osserviamo
la produttività; dobbiamo perciò usare un’altra misura, una così-detta proxi. Possiamo utilizzare
come proxi della produttività le informazioni sul più alto livello di istruzione raggiunto da un
individuo (o gli anni di scuola). L’ipotesi sottostante è che i lavoratori con più alto livello di
istruzione siano più produttivi di quelli con un livello più basso di istruzione e perciò
guadagneranno un più alto salario.
Per misurare il salario generalmente si usa il logaritmo dell’salario (log(yl)) . Il logaritmo ha lo
scopo di depurare da effetti di scala e anche perché facilmente interpretabile come tasso di
variazione. Infatti il log del reddito ha una distribuzione approssimativamente normale e percio’ è
possibile interpretare i coefficienti delle variabili di istruzione e qualifica occupazionale in termini
di variazione percentuale.
Iniziamo a scrivere il nostro do file:
-------------------------------------------------------------capture log close
clear
#delimit;
*this command resets the character that marks the end of a command,
so NEVER forgets at the end of a command;
set more off;
log using c:/corso_lavoro/earnings.log, replace;
*Prima versione:dd/mm/yy;
*Contenuto del file: analisi della teoria dell’accumulazione di
capitale umano , regressione del salario;
drop _all;
*questi sono i dati creati alla fine della scorsa lezione;
use c:/corso_lavoro/dati/mydata/earnings.dta,clear;
*iniziamo a selezionare solo coloro che sono in età da lavoro;
keep if eta>16 & eta<65;
**verifichiamo le seguenti ipotesi:
34
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
H0: reddito non cambia con l’istruzione
H1: reddito cambia con l’istruzione;
*creiamo il logaritmo del reddito (se non esiste già);
gen lyl=log(yl);
sum lyl;
*guardiamo la variabile relativa al titolo di studio;
ta studio;
*verifichiamo questa variabile;
ta studio, mis; *per verificare quanti valori mancanti abbiamo;
reg lyl studio;
*ora salva i dati;
save c:\corso_lavoro\mydata\earnings2.dta, replace;
Ora salviamo il do file con il nome earnings.do in c:/corso_lavoro e mandiamolo in
esecuzione. Per poter fare cio’, è necessario chiudere il DO FILE EDITOR (questo passo non è
necessario tuttavia), tornare in STATA, click su FILE, e poi su DO, selezionare il file earnings.do
in c:/corso_lavoro e vedere i risultati.
10.3.1 Commentiamo l’output
*il comando regress stima un modello di regressione lineare del
seguente tipo:
log( yl ) = β 0 + β1 * school + ε i
(1)
dove
ε i ≈ N (0,σ i )
e Cov(epsilon, school)=0
Questo è cio’ che dovrebbe apparire sull finestra STATA RESULT.
reg lyl studio;
Source |
SS
df
MS
-------------+-----------------------------Model | 1.50776409
1 1.50776409
Residual | 36.8372049
96 .383720885
-------------+-----------------------------Total |
38.344969
97 .395308959
Number of obs
F( 1,
96)
Prob > F
R-squared
Adj R-squared
Root MSE
=
=
=
=
=
=
98
3.93
0.0503
0.0393
0.0293
.61945
-----------------------------------------------------------------------------lyl |
Coef.
Std. Err.
t
P>|t|
[95% Conf. Interval]
-------------+---------------------------------------------------------------studio |
.0914169
.0461177
1.98
0.050
-.000126
.1829597
_cons |
9.618852
.2077647
46.30
0.000
9.206442
10.03126
-----------------------------------------------------------------------------35
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
β 0 e β1 dell’equazione 1. E’
chiaro dal nostro esempio che studio corrisponde a β1 e _cons corrisponde a β 0
L’operazione di regressione ci permette di stimare i coefficienti
Iniziamo a considerate le statistiche riportate in alto a sinistra
ANOVA (analysis of variation):
SS sta per “sum of squares” (somm dei quadrati)
Df sta per “degree of freedom”(gradi di libertà)
Ms sta per “mean square”(media dei quadrati)
La somma totale delle deviazioni al quadrato è 38.34 Di queste 1.50 sono spiegate dal modello (coè
la scuola sembra non spiegare molto), mentre 36.83 sono lasciate non spiegate. I gradi di libertà
sono il numero di osservazioni (97) meno il numero della variabili esplicative (1).
Nel lato destro abbiamo invece delle statistiche del campione. Sotto il numero delle osservazioni c’è
un F-test. Testa l’ipotesi che tutti i coefficienti a parte β 0 siano zero. Ha 1 numeratore e 96
denominatori gradi di libertà e una statistica di 3.93. Sotto c’è la probabilità di osservare una
statistica F tanto grande o più grande per caso, ed è 0.0503. Più è basso tale P, minore è la
probabilità che l’associazione fra il salario e l’età sia casuale (random). L’R^2 è 0.039 dice quanto
viene spiegato dal modello (maggiore è tale valore meglio è).
Infine STATA tabula i coefficienti stimati. Abbiamo riportato i coefficienti β 0 e β1 dell’equazione
1.
Da tali coefficienti ricaviamo che la relazione empirica fra salario e scuola è:
log( yl ) = 9.6 + 0.089 * school
Il coefficiente su β1 è significativamente diverso da zero al 5% (la t-student è 1.98). Cio’ implica
che possiamo rigettare la nostra ipotesi H0 di nessuna correlazione fra salario e istruzione (al 5%).
Questo risultato ci dice che avere un titolo di studio in più (per esempio la licenza media invece che
quella elementare) fa crescere il log del salario del 9,1% e tale coefficiente è statisticamente
significativo.
E’ economicamente significativo?
Dipende dal contesto. Una prima valutazione puo’ essere vedere quanto è 0.091
percentualmente sul salario medio. Scriviamo allora
sum lyl
return list
di 0.091/r(mean)
produce un risultato di 0.00908948, che è 0.91%. Cio’ significa il (logaritmo del) salario cresce
dello 0.91% per ogni livello in più di istruzione che si ottiene.
Sarebbe stato probabilmente meglio usare gli anni di studio (annist) invece la variabile studio,
per avere un’interpretazione del tipo: ogni anno in più di istruzione genera un aumento del ??% del
salario (in logaritmo). Provate da soli!!!
36
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
10.3.2 Estensione del modello
A questo punto potremmo complicare il modello aggiungendo variabili che ci sembrano rilevanti pr
l’argomento
Per esempio una variabile da introdurre potrebbe essere l’età. Secondo la teoria del “life-cycle
hypothesis”, il salario cresce con l’età
reg lyl annist eta
-----------------------------------------------------------------reg lyl annist eta
Source |
SS
df
MS
-------------+-----------------------------Model | 6.89557136
2 3.44778568
Residual | 31.4493977
95 .331046291
-------------+-----------------------------Total |
38.344969
97 .395308959
Number of obs
F( 2,
95)
Prob > F
R-squared
Adj R-squared
Root MSE
=
=
=
=
=
=
98
10.41
0.0001
0.1798
0.1626
.57537
-----------------------------------------------------------------------------lyl |
Coef.
Std. Err.
t
P>|t|
[95% Conf. Interval]
-------------+---------------------------------------------------------------annist |
.0349308
.0168608
2.07
0.041
.001458
.0684036
eta |
.0224008
.0056151
3.99
0.000
.0112533
.0335482
_cons |
8.736637
.2920569
29.91
0.000
8.15683
9.316443
-------------------------------------------------------------------------------
Come potete vedere l’età è molto significativa e il coefficiente indica che per ogni anno di età in più
il (log del) salario aumenta del 2.2%. Inoltre aumenta l’R^2 e quindi si riesce a spiegare meglio il
modello.
Alternativamente si puo’ vedere se il genere (maschile /femminile) ha un effetto sul salario. Prima
di fare cio’, creiamo una semplice dummy:
replace sex=0 if sex==1
replace sex=1 if sex==2
------------------------------------------------------------------------------reg lyl annist eta sex
Source |
SS
df
MS
-------------+-----------------------------Model | 8.99948783
3 2.99982928
Residual | 29.3454812
94
.31218597
-------------+-----------------------------Total |
38.344969
97 .395308959
Number of obs
F( 3,
94)
Prob > F
R-squared
Adj R-squared
Root MSE
=
=
=
=
=
=
98
9.61
0.0000
0.2347
0.2103
.55874
-----------------------------------------------------------------------------lyl |
Coef.
Std. Err.
t
P>|t|
[95% Conf. Interval]
-------------+---------------------------------------------------------------annist |
.0417237
.0165812
2.52
0.014
.0088013
.074646
eta |
.0222915
.005453
4.09
0.000
.0114645
.0331185
sex |
-.300798
.115869
-2.60
0.011
-.5308586
-.0707373
_cons |
8.790113
.2843625
30.91
0.000
8.225505
9.354722
------------------------------------------------------------------------------
Che interpretazione potete dare al coefficiente su sex?
Essere donna (sex=1) fa ridurre il (log del) salario di 0.30. L’R^2 è aumentato e quindi questa
regressione spiega maggiormente il modello
37
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
In questo tipi di modelli generalmente andrebbe inserita la variabile “tenure” cioè numero di anni
lavorati. Tuttavia non è presente nei nostri dati, ma può essere approssimata dall’esperienza
potenziale, cioè età-annistudio-6 (assumendo che l’individuo abbia iniziato a lavorare subito dopo
aver smesso di studiare).
Quindi bisogna prima creare una nuova variabile con l’esperienza potenziale e poi fare una nuova
regressione:
gen exper=eta-annist-6
reg lyl annist sex exper
Source |
SS
df
MS
-------------+-----------------------------Model | 8.99948783
3 2.99982928
Residual | 29.3454812
94
.31218597
-------------+-----------------------------Total |
38.344969
97 .395308959
Number of obs
F( 3,
94)
Prob > F
R-squared
Adj R-squared
Root MSE
=
=
=
=
=
=
98
9.61
0.0000
0.2347
0.2103
.55874
-----------------------------------------------------------------------------lyl |
Coef.
Std. Err.
t
P>|t|
[95% Conf. Interval]
-------------+---------------------------------------------------------------annist |
.0640152
.0172632
3.71
0.000
.0297387
.0982916
sex |
-.300798
.115869
-2.60
0.011
-.5308586
-.0707373
exper |
.0222915
.005453
4.09
0.000
.0114645
.0331185
_cons |
8.923862
.2613995
34.14
0.000
8.404848
9.442877
------------------------------------------------------------------------------
Cosa succeed se scriviamo reg lyl annist eta sex exper? Cosa dice STATA? Cosa
succede?
Oppure possiamo provare una funzione concave dell’esperienza. Prima creiamo una nuova
variabile:
ge exper2=exper^2
Poi scriviamo:
reg lyl annist sex exper exper2
Source |
SS
df
MS
-------------+-----------------------------Model | 10.1139944
4 2.52849861
Residual | 28.2309746
93 .303558866
-------------+-----------------------------Total |
38.344969
97 .395308959
Number of obs
F( 4,
93)
Prob > F
R-squared
Adj R-squared
Root MSE
=
=
=
=
=
=
98
8.33
0.0000
0.2638
0.2321
.55096
-----------------------------------------------------------------------------lyl |
Coef.
Std. Err.
t
P>|t|
[95% Conf. Interval]
-------------+---------------------------------------------------------------annist |
.0586134
.0172548
3.40
0.001
.0243487
.0928781
sex |
-.307635
.1143125
-2.69
0.008
-.534637
-.080633
exper |
.0624323
.0216282
2.89
0.005
.019483
.1053816
exper2 | -.0009229
.0004817
-1.92
0.058
-.0018794
.0000336
_cons |
8.658915
.2925082
29.60
0.000
8.078052
9.239779
-------------+---------------------------------------------------------------38
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
Continuate voi a esplorare questo data set. Per esempio provate ad inserire altre variabili relative per
esempio al settore di occupazione. Suggerimento: create delle variabile categoriche a partire dalla
variabile apqual, cieè una dummy per ognuno delle categorie che compongono apqual.
Nel caso in cui la variabile dipendente sia una dummy (cioè assume valori 0 oppure 1) il modello di
regressione lineare (OLS) non può essere usato e altri comandi saranno necessari.
Generalmente vengono usati i seguenti due comandi:
probit
logit
I modelli logit e probit sono basati su assunzioni sulla distribuzione degli errori diverse da quelle
dei modelli OLS
Se avremo tempo ne vederemo qualche esempio
39
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
10.3.3 Un approfondimento del modello di accumulazione di capitale umano
Il reddito generalmente aumenta nel corso della vita di un individuo ed è ciò che abbiamo verificato
introducendo l’età nel modello di regressione lineare originariamente usato. Tuttavia il salario non
cresce in maniera lineare con l’età ma tende a diminuire superata una certa soglia (generalemte il
picco del reddito si ha nella fase centrale della vita di un individuo). Per verificare questa ipotesi è
necessario introdurre nel modello un’altra variabile cioè il quadrato dell’età.
Il modello da stimare sarà:
log( yl ) = β 0 + β1 * school + δ * eta + γ * eta 2 + ε
• Se γ =0 allora d (log( yl )) d (eta ) = δ ⇒ relazione fra yl (in log) ed età è sempre crescente
• Se γ ≠0 allora d (log( yl )) d (eta ) = δ + 2γ * eta
Se γ <0 cio’ permette alla relazione fra età e yl di decrescere quando l’età aumenta
Provate a vedere cosa succede se introduciamo l’età al quadrato e guardate anche se l’R^2 è
migliorato o no
reg lyl studio eta eta2
10.4
Test lineare delle ipotesi
La sintassi è:
test expression=expression
Per esempio vogliamo verificare che il coefficiente dell’età è uguale a zero:
test eta=0
il risultato di questo test era già fornito dall’output di regressione. Sapete individuarlo?
Pero’ è possibile fare anche altri test:
ta ireg, ge(iregx)
reg lyl studio eta eta2 iregx*
e poi vogliamo verificare che iregx1=iregx10 e contemporaneamente iregx1=iregx11
test iregx1=iregx10
test iregx1=iregx11, accumulate
40
Stata Tutorial
Economia e Politica del Lavoro
Daniela Vuri
10.5 Alcune informazioni utili
1. Con il comando di regressione possono essere utilizzati anche i pesi (fweight, pweight,
aweight e iweight), qualora l’analisi lo richieda. I pesi possono essere utilizzati con
moltissimi comandi. Bisogna valutare caso per caso quale pesi utilizzare.
2. esiste un comando vif che serve per valutare la multicollinearità tra le variabili:per valori
superiori a 10 (o inferiori a 0.1) possiamo dire che la variabile con tale valore è
multicollineare con le altre e va eliminata dal modello
41