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