STATA TUTORIAL Analisi di mercato II Elisa Iezzi STATA TUTORIAL Primi passi con STATA -Gestione dati, grafici e semplici modelli- Dott.ssa ELISA IEZZI [email protected] 1 STATA TUTORIAL Analisi di mercato II Elisa Iezzi Sommario ISTRUZIONI GENERALI ..............................................................................................................4 INTRODUZIONE.................................................................................................................................................. 4 Dove trovare STATA e i dati da utilizzare ..................................................................................................4 Uscire da STATA..............................................................................................................................................4 Le finestre di STATA e la barra degli strumenti..............................................................................................4 Stata Help .......................................................................................................................................................6 Data Editor......................................................................................................................................................6 Do File Editor...................................................................................................................................................7 Log....................................................................................................................................................................8 Graph ..............................................................................................................................................................8 I files utilizzati in Stata.........................................................................................................................................8 Stata dataset – estensione : .dta ..............................................................................................................8 Log file – estensione : .log ............................................................................................................................9 Stata do-file – estensione: .do ....................................................................................................................9 Stata gaphs – Estensione: .gph.................................................................................................................11 Dataset ............................................................................................................................................................ 11 Allocare memoria a STATA ........................................................................................................................11 Variabili ..............................................................................................................................................................11 Generare e cambiare le variabili ............................................................................................................13 Cambiare la struttura dei dati.......................................................................................................................14 Inserire i dati ......................................................................................................................................................15 Inserire i dati dall’EDITOR (tramite tastiera) ............................................................................................15 Usare dati già esistenti in formato ASCII (o text)........................................................................................15 Infile (estensione con .txt oppure .asc)...................................................................................................15 Insheet (estensione con .csv) ...................................................................................................................16 Dictionary......................................................................................................................................................17 Infix .................................................................................................................................................................17 Sintassi generale ............................................................................................................................................ 17 Describe.............................................................................................................................................................18 Display................................................................................................................................................................18 List........................................................................................................................................................................18 Format ................................................................................................................................................................19 Generare dummy ............................................................................................................................................19 Drop and keep .................................................................................................................................................19 Operatori di STATA ...........................................................................................................................................19 Funzioni...............................................................................................................................................................20 By group ........................................................................................................................................................20 Sort e gsort ....................................................................................................................................................21 STATISTICHE DESCRITTIVE ............................................................................................................................... 21 Count .................................................................................................................................................................21 Summarize .........................................................................................................................................................21 Means.................................................................................................................................................................22 Centile................................................................................................................................................................22 Cumul .................................................................................................................................................................22 Correlate ...........................................................................................................................................................22 TABLES.................................................................................................................................................................23 Table ..............................................................................................................................................................23 2 STATA TUTORIAL Analisi di mercato II Elisa Iezzi Tabulate ........................................................................................................................................................23 Tabsum ..........................................................................................................................................................24 “FOREACH” .......................................................................................................................................................24 MANIPOLAZIONE DEI DATI............................................................................................................................. 24 Combinare differenti dataset insieme.........................................................................................................25 Append .........................................................................................................................................................25 Merge ............................................................................................................................................................25 Collapse ........................................................................................................................................................26 Contract........................................................................................................................................................27 Expand ..........................................................................................................................................................27 Fillin .................................................................................................................................................................27 APPLICAZIONE: DESCRIZIONE DATI E SEMPLICE INFERENZA ................................27 DESCRIZIONE DATI .......................................................................................................................................... 27 ANALISI USANDO STATA ................................................................................................................................ 28 1° obiettivo: Confronto tra due gruppi........................................................................................................29 2° obiettivo: Correlazioni ................................................................................................................................33 3° obiettivo: Esercizi .........................................................................................................................................35 APPLICAZIONE: IL MODELLO LOGIT ..................................................................................35 DESCRIZIONE DATI .......................................................................................................................................... 36 Analisi logistica .............................................................................................................................................. 38 3 STATA TUTORIAL Analisi di mercato II Elisa Iezzi ISTRUZIONI GENERALI INTRODUZIONE Dove trovare STATA e i dati da utilizzare All’interno dei programmi si può avviare direttamente l’icona STATA. I dati sono stati inseriti nella directory: R:\Freo\Analisi di mercato2\.. Uscire da STATA Per uscire da STATA, si può scrivere exit nella finestra STATA COMMAND. Altrimenti si può cliccare su Exit dal menu FILE oppure digitare i tasti Alt+F4. Le finestre di STATA e la barra degli strumenti Le finestre di STATA sono 4: 4 STATA TUTORIAL Analisi di mercato II Elisa Iezzi 1. STATA COMMAND, dove i comandi vengono digitati e mandati in esecuzione semplicemente premendo invio dopo averli scritti; • In alto a destra, contiene la sequenza dei comandi eseguiti nella Stata Command. Cliccando su una riga nella finestra review, il comando eseguito in precedenza ricompare nella finestra Stata Command. 2. STATA RESULTS, dove appaiono i risultati. • E’ la finestra centrale, caratterizzata dallo sfondo nero, dove vengono visualizzati, i comandi eseguiti, i messaggi di errore e in generale tutte le operazioni eseguite dal programma. E' una finestra di output il cui funzionamento può essere ricondotto a quello di un “registro” che, se fatto scorrere, mostra all’utente ciò che fino a quel punto è stato fatto. 3. REVIEW dove sono scritti tutti i comandi digitati fino a quel momento; • In alto a destra, contiene la sequenza dei comandi eseguiti nella Stata Command. Cliccando su una riga nella finestra review, il comando eseguito in precedenza ricompare nella finestra Stata Command. Funzione particolarmente utile per la correzione di errori o per procedure che richiedono ripetizioni frequenti di comandi articolati. 4. VARIABLES dove c’è una lista di variabili contenute nel dataset che si sta utilizzando. • Sotto la Review, mostra l’elenco delle variabili contenute nel data set indicandone il nome, l’etichetta ed eventuali informazioni sulle modificazioni rilevanti intervenute nelle variabili. Anche qui è possibile far comparire la variabile nella Stata Command cliccando sulla variabile interessata. Le istruzioni principali della barra degli strumenti sono: 1. open, per aprire un dataset di STATA 2. save, per salvare su disco il dataset che si sta utilizzando 3. print, per stampare un grafico o i risultati ottenuti 4. open log, per iniziare un nuovo log, aggiungerlo ad uno già esistente o fermare quello corrente 5. import/ export, per importare / esportare in formati diversi da quello di stata che è *.DTA 6. Data Editor apre il data editor, dove si possono inserire manualmente i dati 7. Data Browser mostra i dati 8. Do-File Editor apre il Do-file editor dove si scrivono i comandi per poterli poi eseguire tutti insieme 9. 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! 5 STATA TUTORIAL Analisi di mercato II Elisa Iezzi Stata Help E’ la finestra della guida all’uso del programma (in inglese). Si apre cliccando Help nel menù o premendo alt+h e scegliendo l’opzione desiderata. Il suo contenuto ha struttura ipertestuale. Data Editor Visualizza la matrice dei dati in memoria. Nelle colonne della matrice sono contenute variabili e nelle righe le singole osservazioni. Si apre con l’apposito pulsante sulla barra degli strumenti o digitando edit ↵ nella finestra Stata Command. Facendo doppio clic su un valore o una variabile ne vengono visualizzate nome, etichetta e formato. Il alto c’è una barra degli strumenti con la quale si possono eseguire alcune operazioni come mettere in ordine crescente i dati rispetto ad una variabile (sort) o cancellare dati o variabili. Una volta aperto l’editor, per accedere alle altre finestre è necessario chiuderlo. 6 STATA TUTORIAL Analisi di mercato II Elisa Iezzi Do File Editor Consiste in un sottoprogramma con il quale si può programmare Stata mediante la scrittura di una serie di comandi su un comune word editor (o sul word editor di stata con funzione apposita per la scrittura dei do-files).. Per eseguire un do file già elaborato, si clicca sul do-file editor al menu windows o sul pulsante dedicato nella barra degli strumenti Per le caratteristiche specifiche e la scrittura del do-file si rimanda alla apposita sezione. 7 STATA TUTORIAL Analisi di mercato II Elisa Iezzi Log La finestra Stata log file permette di visualizzare il log file, ossia il file che viene creato per la registrazione di tutti i comandi e le operazioni eseguite dal programma nella corrente sessione di utilizzo. Tale file può essere poi salvato o stampato per l’archiviazione dei risultati ottenuti. La finestra stata log si apre dal menu windows (se un log file è già in uso, altrimenti va prima creato) o utilizzando i comandi sulla barra degli strumenti. Graph E’ la finestra nella quale vengono visualizzati i grafici. I files utilizzati in Stata Stata può utilizzare tre tipologie di file. I files sono contraddistinti da una diversa estensione (le lettere dopo il punto) e da icone differenti. Stata dataset – estensione : .dta Esempio icona: Sono i files che contengono i dati da utilizzare. Possono provenire da fonte esterna o essere creati immettendo i valori nell’editor dati e poi salvandoli. Quando un dataset viene modificato, cosa ricorrente nell’utilizzo di Stata, occorre salvare le modifiche se si intende renderle definitive con l’avvertenza che una volta eseguita questa operazione la struttura precedente verrà persa. Un 8 STATA TUTORIAL Analisi di mercato II Elisa Iezzi consiglio utile può quindi consistere nel non sovrascrivere il dataset originale, salvando, per esempio, il nuovo dataset con un nome differente. Log file – estensione : .log Esempio icona: esercitazione.log I log files vengono creati dall’utente per visualizzare i risultati dell’analisi. La loro stampa, sia direttamente da Stata (menu file > print log) che tramite altri word processor (mediante, ad esempio, le classiche funzioni copia-incolla) rappresenta spesso l’ultima operazione compiuta al termine di una sessione di utilizzo di stata. mostra log open/close/suspend log do-file editor Come creare un log file Il log file può cominciare a registrare i risultati in qualsiasi momento del lavoro. Per iniziare si deve cliccare sull’icona che raffigura una pergamena affiancata ad un semaforo sulla barra degli strumenti. Appare una finestra nella quale dobbiamo indicare il nome del file e dove collocarlo. Fatto questo, il nostro log file registra tutte le operazioni effettuate, come accade nella finestra Stata Results. In qualsiasi momento è possibile interrompere la registrazione cliccando nuovamente sul semaforo e scegliendo l’opzione “suspend log file” per poi riprendere scegliendo “resume log file”. In questo modo è possibile inserire solo ciò che interessa venga visualizzato. E’ possibile anche utilizzare un file di log già esistente. In questo caso si deve scegliere o l’opzione “Append to existing file” che permette di continuare a registrare gli output in successione a quelli precedentemente salvati oppure l’opzione “Overwrite existing file” che consente di sovrascrivere le nuove informazioni sulle precedenti che vanno irrimediabilmente perse. La sintassi è: log using filename, [append replace] Successivamente si può chiudere il log file scrivendo: log close o semplicemente uscendo da STATA. Se però 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 usingfilename, append) 3. si dimentica il vecchio log e lo si sostituisci con uno nuovo (si scrive log using filename, replace) Stata do-file – estensione: .do Esempio icona: 9 STATA TUTORIAL Analisi di mercato II Elisa Iezzi Creando un do file è possibile programmare Stata, ossia creare un listato di istruzioni da fare eseguire al software. Rappresenta sicuramente il modo più ordinato, metodico e professionale per lavorare con Stata ed è una procedura il cui apprendimento è indispensabile se si desidera procedere in analisi di una qualche complessità. In pratica si tratta semplicemente di scrivere in sequenza i comandi da impartire: dall’apertura del dataset, passando per l’analisi vera e propria e concludendo con il salvataggio di dataset e log file. Se un do file è stato realizzato correttamente può essere possibile farlo eseguire dal programma con un semplice doppio clic sopra l’icona del file: Stata si aprirà automaticamente e tutte le procedure verranno effettuate senza inceppare in errori. Come creare un do-file Facendo clic sull’icona che raffigura foglio e matita sulla barra degli strumenti o nel menu Windows>do-file editor si apre la finestra dell’editor per do-file. Si può aprire un file già esistente o crearne uno nuovo. Al termine del lavoro si esegue il programma (icona “do current file”) e se ne verifica il corretto funzionamento. Una volta creato, un do-file può essere eseguito semplicemente con un doppio clic o scegliendo su Stata al menu file>do e indicando il file da eseguire. Oltre ai comandi si possono includere commenti iniziando la riga con * Essendo un semplice file di testo, il do-file può essere creato anche con un normale word processor ma tale operazione può comportare problemi di compatibilità la cui risolvibilità è sempre possibile ma spesso poco immediata. Semplice esempio di do-file: set mem 4m use " C:\temp\dati\dati.dta" log using "C C:\temp\dati\prova_log.log" , replace sum *eliminazione variabili non utili per l’analisi* drop id eta *regressione con reddito come var dipendente spiegata da istruzione e residenza* regress reddito istruz resid save "C:\temp\dati\prova.dta", replace 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 dofile.do. E’ necessario ricordare la directory in cui viene salvato, generalmente è conveniente mettere il do file nella stessa directory del log file. A questo punto si chiude il DO-FILE EDITOR, torniamo in STATA, clicchiamo su File dalla barra degli strumenti, e poi su DO, selezioniamo il file dofile.do in c:\temp\dati e guardiamo i risultati. Si può 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 10 STATA TUTORIAL Analisi di mercato II Elisa Iezzi Stata gaphs – Estensione: .gph Esempio icona: Con Stata è possibile realizzare grafici e poi salvarli su file. Per ulteriori precisazioni si rimanda alla parte specifica dedicata alla realizzazione dei grafici. Dataset Come detto in precedenza l'estensione utilizzata per salvare i dati è .dta. Per aprire ed utilizzare il file ad esempio dataset.dta i comandi sono: use C:/temp/dati/dataset Il modo più semplice è allocare la directory in cui sono salvati tutti i dati, in modo da non dover ripetere il path. cd C:/temp/dati use dataset save dataset !!! IMPORTANTE salvare sempre i file. Se si vuole salvare il file che è già presente: save dataset, replace 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 dati, sarà lo stesso STATA a dire “no room to add more observations”. Ed allora basterà aggiungere più memoria compatibilmente con il PC usato. Variabili In Stata, le variabili sono associate con le colonne di una matrice di dati, e le osservazioni con le righe Le variabili possono essere alfanumeriche (stringhe) o numeriche (numeri reali). Le variabili sono chiamate con il loro nome, che può contenere anche numeri, ma non spazi. Si può cambiare il nome delle variabili usando il comando rename x y significa cambiare il nome della variabile da x a y. Alle variabili possono essere assegnate etichette . Una volta che abbiamo creato delle nuove variabili vogliamo poter tener traccia di esse e ricordare cosa significano. Possiamo fare cio’ 11 STATA TUTORIAL Analisi di mercato II Elisa Iezzi 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 variable x “costi in euro” In STATA i nomi delle variabili appaiono nel riquadro in basso a sinistra (VARIABLES Window). Ogni qualvolta la variabile x appare sullo schermo apparirà anche la sua label. A questo punto può 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 Ricorda che bisogna prima bisogna definire (define) la label, poi associare quella label con una variabile. Ogni label può 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 può associare una sola value label con una stessa variabile. e formati : format x %7.2g questo è il generico formato per identificare un numero con 2 decimali 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) DATI MANCANTI I dati mancanti sono identificati da . (un punto). Si possono codificare i valori mancanti come codici (es 9999) o viceversa utilizzando il comando mvdecode mvencode x, mv(9999) codifica i valori mancanti con il codice 9999 mvdecode x, mv(9999) decodifica il codice 9999 con i valori mancanti VARIABILE TEMPO I dati sono definiti da un numero di giorni dal 1/1/1960 e possono essere definite attraverso il formato della data che è %d. Se ad esempio la variabile time è in formato %7.0g list time 1. 2. 3. 4. 5. +---------+ | time | |---------| | 14976 | | -2200 | | 544 | | 8454 | | 4566 | In questo modo non è di facile lettura, se invece gli impostiamo il formato allora: format time %d list time 12 STATA TUTORIAL Analisi di mercato II 1. 2. 3. 4. 5. Elisa Iezzi +-----------+ | time | |-----------| | 01jan2001 | | 23dec1953 | | 28jun1961 | | 23feb1983 | | 02jul1972 | Per altri formati si può cosultare help dfmt Generare e cambiare le variabili Si possono generare nuove variabili utilizzando il comando generate oppure egen. GENERATE 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. Il comando generate fa una semplice equazione: generate x = 1 crea una nuova variabile x e assegna alla colonna tutti valori 1 generate percentuale=100*(vecchio-nuovo)/vecchio if vecchio>0 genera la variabile percentuale per quei valori in cui vecchio>0 negli altri casi riempe con missing. In quel caso si potrebbe gestire la variabile con l'istruzione replace. Replace cambia il contenuto di una variabile esistente. La sua sintassi è: [by varlist:] replace oldvar=exp [if exp] [in range] replace percentuale = 0 if old<0 Queste due istruzioni potrebbero essere viste anche come un'unica attraverso cond() che fa un test, se è vero mette il secondo argomento, altrimenti il terzo: generate percentuale = cond(old>0, 100*(vecchio-nuovo)/vecchio ,0) EGEN Il comando egen è un estensione di generate . Il suo vantaggio è che accetta come argomento dell'equazioni formate da liste di variabili e non singole come per il precedente. La sua sintassi è: egen newvar=fcn(stuff) [if exp] [in range] [,options] esempi egen media=rmean(m1-m100) fa la media di 100 variabili, dove i valori mancanti vengono ignorati. egen famred=sum(reddito), by(famiglia) fa la somma del reddito per le diverse famiglie 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; 13 STATA TUTORIAL Analisi di mercato II Elisa Iezzi 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 Per eliminare la variabile: drop x Per ricodificare la variabile in categorie: recode categ 1/3 = 1 4=2 se il valore è compreso tra 1 e 3 allora assegna categoria=2 se =4 allora assegna categoria=2 Cambiare la struttura dei dati In molte occasioni il nostro dataset si presenta come un panel di dati. Se si hanno misure per le occasioni j per i soggetti i, questi possono essere visti come dataset multivariati in cui ogni occasione j è rappresentato da una variabile xj e il soggetto è identificato da subj.Le informazioni sono chiamate wide e long. Si possono convertire dal wide della matrice con le variabili xj subj list 1. 2. x1 x2 s ubj 2 4 3 5 1 2 alla long della matrice con le variabili x occ subj usando la sintassi reshape long x, i(subj) j(occ) (note: j = 1 2) Data Number of obs. Number of variables j variable (2 values) xij variables: wide 2 3 -> long -> -> 4 3 -> occ x1 x2 -> x I dati ora sono : 14 STATA TUTORIAL Analisi di mercato II Elisa Iezzi . list 1. 2. 3. 4. s ub j oc c x 1 1 2 2 1 2 1 2 2 3 4 5 A questo punto si possono raggruppare dati per ogni gruppo con misure statistiche standard. Calcola la media, la deviazione standard e conta la numerosità del gruppo che non sia mancante. collapse (mean) mean=x (sd) sdx=x (count) num=x, by(subj) list 1. 2. subj me an sdx num 1 2 2 .5 4 .5 .707 107 .707 107 2 2 Inserire i dati I dati possono essere inseriti usando il data editor, oppure da un file ASCII (word, notepad, ecc.) 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. 1.Clicca sull’icona DATA EDITOR 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:/temp/dati/one.dta, replace *ricordati che hai messo i dati in questa directory chiamata mydata Usare dati già esistenti in formato ASCII (o text) 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] 15 STATA TUTORIAL Analisi di mercato II Elisa Iezzi 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’estensione si assume che essa sia .raw. Infile è molto utile nei dati scaricati: • 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 (perciò i valori di missing devono essere rappresentati in qualche modo). Molto spesso però 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. 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] Se si salvano i dati in excel, con il formato csv ad esempio dati.cvs In STATA e nella finestra COMMAND scriviamo: insheet using c:/…/dati.csv,clear save c:/…/dati.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. Perciò è necessario rimuovere le virgole dai valori numerici prima di salvare il file. 16 STATA TUTORIAL Analisi di mercato II Elisa Iezzi • Il file deve essere salvato in formato “comma separated values” in Excel. Non basta dare un’estensione .cvs. Si deve selezionare sotto “File” poi “Save as…” e poi scegliere “comma separated values”. Quando si chiude 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 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) ril %2f "rilevazione" _column(3) anno %4f "anno" _column(7) ProgFam %6f "progressivo family" _column(13) nordcomp %2f "Num ordine componente" _column(15) ncomp %2f "numero comp family" _column(17) age %3f "eta" _column(20) relpar %2f "relazione parent" _column(23) sex %1f "sesso" } il file dictionary può essere scritto in un qualsiasi text editor ma deve essere salvato con l’estensione .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 Infix Se i dati sono in formato fisso per colonna, il comando infix può 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 Sintassi generale 17 STATA TUTORIAL Analisi di mercato II Elisa Iezzi 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”. 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). 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 Display Display mostra stringhe e valori di espressioni scalari. Se si lavora direttamente nella finestra COMMAND può 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) List List mostra il valore delle variabili. La sintassi è: [by varlist:] list [varlist] [if exp] [in range][, [no]display nolabel noobs] 18 STATA TUTORIAL Analisi di mercato II Elisa Iezzi 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 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. Generare dummy 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. 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. 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’operazione impossibile (per es. la divisione per zero) da luogo ad un valore missing. 2. operatori di stringa: + (concatenazione di stringa), per esempio l’espressione “Matrice di varianza”+”-covarianza” produce la stringa “Matrice di varianza-covarianza” 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. 19 STATA TUTORIAL Analisi di mercato II Elisa Iezzi L’ordine di valutazione segue le regole standard, l’espressione sulla sinistra è quella valutata prima, l’ultima sulla destra è quella valutata per ultima. Le parentesi possono essere usate per forzare un ordine differente di valutazione 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). 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] 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: 20 STATA TUTORIAL Analisi di mercato II Elisa Iezzi Esempi. sort sex by sex: sum eta by sex: gen lag2=eta[_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] 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 perciò 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 y gsort +y gsort –y eta gsort –y, gen(revy) STATISTICHE DESCRITTIVE 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 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] 21 STATA TUTORIAL Analisi di mercato II Elisa Iezzi 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 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 quando 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)può essere usato se si vogliono semplicemente medie aritmetiche e corrispondenti intervalli di confidenza, e standard errors. 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] [in range] [, centile(numlist) cci normal meansd level(#)] 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. Cumul cumul crea una nuova variabile che contiene la funzione di distribuzione cumulativa di una variabile. La sintassi è: cumul varname [weight][if exp] [in range], gen(newvar) [freq by(varlist)] dove gen(newvar) specifica il nome di una nuova variabili che deve essere creata e 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. 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] 22 STATA TUTORIAL Analisi di mercato II Elisa Iezzi 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. TABLES 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. 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 trattati come gli altri valori nel calcolo delle statistiche, nofreq sopprime la presentazione delle frequenze, nolabel fa mostrare i 23 STATA TUTORIAL Analisi di mercato II Elisa Iezzi 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 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. “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' } 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). MANIPOLAZIONE DEI DATI I comandi principali che servono per “combinare” i dati: append e merge. Per modificare il formato dei dati studieremo altri comandi: reshape, collapse, 24 STATA TUTORIAL Analisi di mercato II Elisa Iezzi contract, expand e fillin. Combinare differenti dataset insieme 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. Esempio creiamo piccoli dataset digitando i seguenti comandi, one.dta: 10 11 12 13 14 15 16 17 18 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:/temp/dati/two.dta, replace 6. use c:/temp/dati/one.dta 7. append using c:/temp/dati/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. Il dataset in memoria viene chiamato “master” mentre il dataset “attaccato” è chiamato “using” data. Questa distinzione è molto importante nel prossimo comando 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 25 STATA TUTORIAL Analisi di mercato II Elisa Iezzi 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:/temp/dati /four.dta, replace 13) use c:/temp/dati /three.dta, clear 14) merge id using c:/corso_lavoro/mydata/four.dta 15) list 16) tab _merge 17) keep if _merge==3 18) drop _merge Ci deve essere una o più variabile in comune ad entrambi i dataset da usare per il merge questa è chiamata IDENTIFIER(S). L’identifier(s) deve identificare ogni osservazione in modo univoco. 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. • _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 ciò che già si aveva e perciò l’update è rifiutato. N.B Quale dei _merge debba essere eliminato va deciso caso per caso. 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 26 STATA TUTORIAL Analisi di mercato II Elisa Iezzi 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. 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). 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 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. APPLICAZIONE: DESCRIZIONE DATI E SEMPLICE INFERENZA DESCRIZIONE DATI I dati utilizzati in questa applicazione riguardano 118 pazienti con problemi psichiatrici su 9 variabili (Hand et al 1994) c:\temp\dati\fem.dat: 1. id : identificativo univoco del paziente 2. age : età in anni 27 STATA TUTORIAL Analisi di mercato II Elisa Iezzi 3. IQ : punteggio di intelligenza 4. anxiety : grado di ansietà (1=nessuno, 2=leggero, 3=moderato, 4=grave) 5. depression : depressione (1=nessuna, 2=leggera, 3=moderata, 4=grave) 6. sleep : riesci a dormire normalmente? (1=si, 2=no) 7. sex: hai perso interesse nel sesso? (1=no, 2=si) 8. life : hai pensato recentemente di toglierti la vita? (1=si, 2=no) 9. weight : incremento del peso negli ultimi sei mesi (in libbre, lbs) I dati mancanti sono valutati e codificati con -99 come si vede qui di seguito (una parte) . list id a ge iq a nx ie ty d ep re ss s le ep s ex l if e w ei gh t 1. 2. 3. 4. 5. 1 2 3 4 5 39 41 42 30 35 94 89 83 99 94 2 2 3 2 2 2 2 3 2 1 2 2 3 2 1 2 2 2 2 2 2 2 2 2 1 4. 9 2. 2 4 - 2. 6 -. 3 6. 7. 8. 9. 10. 6 7 8 9 10 44 31 39 35 33 90 94 87 - 99 92 - 99 2 3 3 2 1 2 2 2 2 2 - 99 2 2 2 1 2 2 2 2 1 2 1 2 2 .9 - 1. 5 3. 5 - 1. 2 .8 11. 12. 13. 14. 15. 11 12 13 14 15 38 31 40 44 43 92 94 91 86 90 2 2 3 2 3 1 2 2 2 2 1 2 2 2 2 1 - 99 2 2 2 1 1 1 2 2 - 1. 9 5. 5 2. 7 4. 4 3. 2 16. 17. 18. 19. 20. 16 17 18 19 20 32 32 43 46 30 - 99 91 82 86 88 1 1 4 3 2 1 2 3 2 2 1 2 2 2 2 2 - 99 2 2 2 1 1 2 2 1 - 1. 5 - 1. 9 8. 3 3. 6 1. 4 21. more 21 34 97 3 3 - 99 2 2 -9 9 Le domande che ci si possono porre sono molteplici: Quali variabili sono correlate e che relazioni esistono? I pazienti che hanno recentemente pensato di togliersi la vita sono diversi da quelli che non l’hanno pensato? … ANALISI USANDO STATA Ipotizziamo di avere dei dati salvati da excel o SAS come file di testo “tab-delimited”. Possiamo importare: insheet using c:/temp/dati/fem.dat, clear Diciamo al sistema, che con il codice -99 abbiamo identificato i valori mancanti: mvdecode _all, mv(-99) iq: anxiety: depress: sleep: sex: life: weight: 8 missing values generated 5 missing values generated 8 missing values generated 5 missing values generated 4 missing values generated 1 missing value generated 11 missing values generated Controlliamo che non vi siano errori di digitazione attraverso Codebook E notiamo che la variabile sleep ha tre valori, anziché due. C’è un osservazione a cui è stato assegnato il valore 3. 28 STATA TUTORIAL Analisi di mercato II Elisa Iezzi sle ep S LEEP type: numeric ( range: [ unique values: b yte) 1,3 3] 3 tabulation: Freq. Value 14 98 1 5 units: missing .: 1 5/1 11 8 1 2 3 . In alternativa si possono trovare errori utilizzando: assert sleep==1|sleep==2|sleep==. 1 contradiction in 118 observations assertion is false Dato che non possiamo sapere quale sia il reale valore, al dato errato mettiamo valore mancante replace sleep=. if sleep==3 Siccome le due variabili si/no hanno codificazioni diverse, assegnamo a sleep la stessa codifica della variabile life e sex recode sleep 1=2 2=1 E per una lettura migliore (e per non fare confusione!) creiamo le etichette: label define sn 1 no 2 si label values sex sn label values life sn label values sleep sn La stessa cosa può essere fatta attraverso il ciclo foreach label define sn 1 no 2 si foreach x in sex life sleep { label values ‘x’ sn } Assegnate le variabili ed analizzati inizialmente i dati possiamo cominciare con le prime analisi: 1° obiettivo: Confronto tra due gruppi Il primo obiettivo che ci si pone è quello di confrontare i gruppi di chi ha pensato di togliersi la vita rispetto agli altri, attraverso un semplice confronto di statistiche sommarie delle variabili continue: Se iniziamo da IQ : table life, contents(mean iq sd iq) LIFE no si mean(iq) 9 1. 27 08 9 2. 09 84 sd(iq) 3. 75 72 04 5. 02 23 Un approccio maggiormente formale è quello di confrontare i due gruppi sulla variabile weight l’aumento di peso negli ultimi sei mesi, attraverso il test t del confronto tra campioni indipendenti. 29 STATA TUTORIAL Analisi di mercato II Elisa Iezzi Innanzitutto abbiamo bisogno di testare se le assunzioni del test t sono valide. Un modo semplice è quello “grafico”, confrontando i box-plot della variabile weight per ogni gruppo (ricordare di etichettare i grafici in modo da avere una lettura semplice e pulita!) label variable weight “Cambiamento di peso negli ultimi 6 mesi” graph box weight, by(life) box(1, bfcolor(none))/* */ box(2, bfcolor(none)) yline(0) medtype(line) si -5 0 WEIGHT 5 10 no Graphs by LIFE L’opzione yline(0) ha permesso di mettere la linea orizzontale in posizione 0. L’istruzione /* */ servono per mettere i commenti, infatti STATA ignora ciò che è scritto al suo interno. La variabile weight non sembra avere valori mediani diversi nei due gruppi e le assunzioni del test t sembrano essere ragionevoli perché le distribuzioni sono asimmetriche con ampiezza simileSi possono anche, testare le assunzioni di normalità,QQPLOT, dei residui. Se l’assunzione di normalità è soddisfatta, i quantili dei residui dovrebbero essere linearmente relazionati alla linea che identifica la distribuzione normale. I residui possono essere calcolati e disegnati usando: egen res=mean(weight), by(life) replace res=weight-res label variable res “residui del test-t per la var. weight” qnorm res, title(“Normal Q-Q plot”) I punti del Q-Q plot sono molto simili alla linea, ciò è sufficiente per per giustificare l’assunzione di normalità 30 STATA TUTORIAL Analisi di mercato II Elisa Iezzi -10 residui del test-t per la var. weight -5 0 5 10 Normal Q-Q plot -10 -5 0 Inverse Normal 5 10 Anche la differenza tra le varianze può essere testate utilizzando: sdtest weight,by(life) Variance ratio test Group Obs Mean Std. Err. Std. Dev. [95% Conf. Interval] no si 45 61 1 .4 08 88 9 1 .7 31 14 8 . 38 89 61 6 . 36 17 84 7 2 .6 09 23 4 2 .8 25 62 9 . 62 49 88 3 1. 00 74 7 2. 19 27 9 2 .4 54 82 5 combined 10 6 1. 59 43 4 . 26 49 47 8 2 .7 27 80 5 1 .0 68 99 7 2 .1 19 68 2 ratio = sd(n no) / sd(s s i) Ho: ratio = 1 Ha: ratio < 1 Pr(F < f) = 0.2919 f = degrees of freedom = Ha: ratio != 1 2*Pr(F < f) = 0.5837 0 .8 52 7 4 4, 6 0 Ha: ratio > 1 Pr(F > f) = 0.7081 La varianza non è significativamente diversa (p-value=0.58). Da notache che il test di uguaglianza delle varianze è utilizzabile solo se la variabile è normalmente distribuita. Non avendo trovato forti differenze visive, possiamo passare all’applicazione del t-test ttest weight, by(life) Two-sample t test with equal variances Group Obs Mean no si 45 61 combined 106 diff Std. Err. Std. Dev. [95% Conf. Interval] 1.408889 1.731148 .3889616 .3617847 2.609234 2.825629 .6249883 1.00747 2.19279 2.454825 1.59434 .2649478 2.727805 1.068997 2.119682 -.3222587 .5376805 -1.388499 .743982 diff = mean(n no) - mean(s si) Ho: diff = 0 Ha: diff < 0 Pr(T < t) = 0.2751 t = degrees of freedom = Ha: diff != 0 Pr(|T| > |t|) = 0.5502 -0.5993 104 Ha: diff > 0 Pr(T > t) = 0.7249 Il test mostra che la differenza in media stimata è -0.32 il cui intervallo di confidenza del 95% va da -1.39 a 0.74. Il p-value è di 0.55, attestando cosi che tra i due gruppi non c’è differenza in media sulla variabile weight 31 STATA TUTORIAL Analisi di mercato II Elisa Iezzi Ora supponiamo di voler confrontare la prevalenza di depressi tra coloro che hanno pensato di togliersi la vita e chi no. Le due variabili categoriche possono essere incrociate ed attraverso il test del chi-quadro utilizzando un solo comando: tabulate life depress, row chi2 Key frequency row percentage DEPRESS LIFE 1 2 3 Total no 26 50.98 24 47.06 1 1.96 51 100.00 si 0 0.00 42 72.41 16 27.59 58 100.00 Total 26 23.85 66 60.55 17 15.60 109 100.00 Pearson chi2(2 2) = 43.8758 Pr = 0.000 L’opzione row è usata per mostrare la percentuale di riga e per permette un facile confronto tra i gruppi. Per esempio, il 51% delle persone che non hanno pensato di togliersi la vita, non sono depresse a differenza del valore sotto 0%. Il valore della statistica chi-quadro afferma che vi sia una significativa associazione tra la depressione e il tentato suicidio (p<0.001). Questo test non tiene in considerazione la natura della variabile depressione che è ordinale e cosi sembra essere meno sensibile che la regressione ordinale (LOGIT che vedremo in seguito). Alcune celle in questa classificazione crociata ha solo pochi valori, per questo si potrebbe utilizzare il test esatto di Fisher piuttosto che il test chi-quadro. Il comando è: tabulate life depress, exact nofreq Enumerating sample-space combinations: stage 3: enumerations = 1 stage 2: enumerations = 12 stage 1: enumerations = 0 Fisher's exact = 0.000 Anche con questo test troviamo una forte associazione tra le due variabili Ora possiamo testare l’ipotesi nulla che la proporzione di donne che hanno perso interesse nel sesso non differiscano tra i due gruppi di potenziali suicidi. Possiamo ottenere la tabella ed entrambi i test con un’unica istruzione: tabulate life sex, row chi2 exact Key frequency row percentage SEX LIFE no si Total no 12 2 4. 00 38 76 .0 0 50 1 00 .0 0 si 5 7. 94 58 92 .0 6 63 1 00 .0 0 Total 17 1 5. 04 96 84 .9 6 11 3 1 00 .0 0 Pearson chi2(1 1) = Fisher's exact = 1-sided Fisher's exact = 5. 62 79 Pr = 0.018 0. 03 2 0. 01 7 Chi pensava di metter fine alla propria vita sono molto simili a chi ha perso interesse nel sesso (92% vs 76%). 32 STATA TUTORIAL Analisi di mercato II Elisa Iezzi 2° obiettivo: Correlazioni Le correlazione tra le tre variabili weight, IQ e age possono essere trovate con il comando: corr weight iq age (obs=100) weight iq age weight iq age 1. 0000 -0. 2920 0. 4131 1.0 000 -0.4 363 1.00 00 Le correlazione sono state valutate su 100 pazienti (obs=100) che sono quei record tutti completi sulle tre variabili. Un approccio alternativo è quello di usare pwcorr che include, per ogni correlazione, tutte le osservazioni che hanno dati completi per le rispettive coppie in analisi. Così risulteranno campioni diversi per le diverse correlazioni. Questa correlazione a coppie pairwise correlation-pwcorr può essere ottenuta con un’unica riga considerando sia la dimensione del campione che la significatività (p-value) pwcorr weight iq age, obs sig weight weight iq age 1 . 00 00 1 07 iq age -0 . 29 20 0 . 00 32 1 00 1. 0 00 0 0 . 41 56 0 . 00 00 1 07 - 0. 4 34 5 0. 0 00 0 11 0 11 0 1 . 00 00 1 18 La matrice scatterplot è ottenuta usando graph matrix come segue: graph matrix weight iq age, half jitter(1)/* */ msymbol(circle_hollow) msize(small) /* */ diagonal(“Cambiamento di peso” “Test intelligenza” “Età”) Dove jitter(1) muove leggermente i punti in modo da non avere completa sovrapposizione a causa della natura discreta dei dati tra Età e Test di intelligenza. 33 STATA TUTORIAL Analisi di mercato II Elisa Iezzi Cambiamento di peso 110 100 Test intelligenza 90 80 50 40 Età 30 -5 0 5 1080 90 100 110 Osservando il grafico si po’ notare che i pazienti anziani hanno avuto un incremento di peso maggiore rispetto ai giovani e rispetto alle con un QI maggiore. Gli anziani di questo campiono tendono ad essere meno intelligenti. Cosicchè età ed intelligenza sono due variabili che messe assieme portano confusione. -5 0 WEIGHT 5 10 Un’altra possibilità è quella di vedere se età e peso cambiano nei due gruppi di potenziali suicidi o meno. Per un iniziale analisi grafica potremmo vedere se con un singolo scatter-plot del cambiamento di peso rispetto all’età, in cui vengono rappresentati i due gruppi con simboli diversi. Questo può essere fatto attraverso uno scatterplot sovrapposto: twoway(scatter weight age if life==1, msymbol(circle) /* */ mcolor(black) jitter(1)) /* */ (scatter weight age if life==2, msymbol(x) /* */ mcolor(black) jitter(1)), legend(order (1 “no” 2 “si”)) 30 35 40 AGE no 45 si 34 STATA TUTORIAL Analisi di mercato II Elisa Iezzi Dal grafico risulta che dentro entrambi i gruppi, ad un età maggiore è associato un maggiore peso ed i gruppi non si distinguono facilmente. Infine possiamo calcolare una correlazione tra depressione ed ansietà attraverso l’indice di Kendall che può essere ottenuto con: ktau depress anxiety Number of obs Kendall's tau-a Kendall's tau-b Kendall's score SE of score = = = = = 107 0 .2 82 7 0 .4 95 1 1 603 288 .2 79 (corrected for ties) Test of Ho: depress and anxiety are independent Prob > |z| = 0.0000 (continuity corrected) La statistica tau-b ha un valore di 0.50 con un pvalue<0.001. Depressione ed ansietà sono chiaramente correlati in questi pazienti psichiatrici 3° obiettivo: Esercizi 1. Calcola la media del peso nei diversi livelli di depressione 2. Calcola la media e la deviazione standard delle variabili age, iq e weight utilizzando “foreach” per ogni variabile di life 3. Crea uno scatterplot di iq e age nei due gruppi di life APPLICAZIONE: IL MODELLO LOGIT Quando la variabile dipendente è dicotomica (0/1) Il modello logit appartiene ai modelli di scelta binaria ed è quello maggiormente utilizzato data la sua convenienza matematica. La distribuzione logistica è la seguente: sotto le assunzioni di indipendenza date le probabilità delle variabili dipendenti . La funzione trasforma i valori continui in un intervallo (0,1), necessario per definire la probabilità. In modo equivalente il modello precedente può essere scritto come dove è una funzione che va da un intervallo ad un intervallo Di solito si parla di perché è più naturale pensare a predittori lineari che spiegano la probabilità piuttosto che il contrario. La curva della funzione logistica-inversa come mostrato nel grafico 35 STATA TUTORIAL Analisi di mercato II Elisa Iezzi La regressione logistica è un una regressione per variabili dipendenti dicotomiche o binarie. Gli odds1 sono il rapporto tra la probabilità di successo sulla probabilità di insuccesso. La trasformazione logaritmica trasforma una moltiplicazione a somma e trasforma anche un insieme di reali positivi all'intera linea reale . Una delle trasformazioni delle probabilità maggiormente utilizzate è definita da: Il modello a regressione logistica è un modello dove è una funzione lineare delle variabili esplicative (indipendenti). Il modello a regressione logistica è un modello dove è una funzione lineare delle variabili esplicative (indpendenti.) Per la stima dei parametri nel modello logistico viene massimizzata la log-verosimiglianza in modo numerico che utilizza un algoritmo iterativo Per una regressione logit , basta digitare logit depvar varlist STATA riporta le stime di massima verosimiglianza per i coefficienti originali sia nel comando logit. 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 alutare 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. DESCRIZIONE DATI Il dataset tumor.dat è un clinical trial in cui i pazienti malati di tumore sono randomizzati per ricevere due diversi tipi di chemioterapia (terapia sequenziale e terapia alternata). Il risultato è classificato in una delle quattro categoria: malattia progressiva, nessun cambiamento, parziale regressione o totale remissione. La questione centrale è se c’è una differenza evidente nei diversi risultati nei due tipi di terapie. 1 Pg 211 Snijders T., Bosker R. MULTILEVEL ANALYSIS: An introduction to basic and advanced multilevel modeling. Sage Publications 1999 36 STATA TUTORIAL Analisi di mercato II Elisa Iezzi Assumiamo di avere un file di testo tumor.dat che contiene una matrice 4x4 delle frequenze. Innanzitutto si dovrà leggere i dati e generare le variabili suddividendole per le terapie e il sesso utilizzando la funzione egen e seq(): infile fr1 fr2 fr3 fr4 using c:\temp\tumor.dat list 1. 2. 3. 4. fr 1 fr 2 f r3 fr 4 28 4 41 12 45 12 44 7 29 5 20 3 26 2 20 1 egen terapia=seq(), from(0) to(1) block(2) egen sesso=seq(), from(1) to(2) by(terapia) label define t 0 seq 1 alt label values terapia t label define s 1 maschio 2 femmina label values sesso s 1. 2. 3. 4. f r1 fr2 fr 3 f r4 te ra pi a s e ss o 28 4 41 12 45 12 44 7 29 5 20 3 26 2 20 1 se q se q al t al t m as c hi o f em m in a m as c hi o f em m in a block(2) permette di creare blocchi bi-dimensionali in cui è ripetuta la sequenza di numeri (da 0 a 1), dove by(terapia) provoca la sequenza e ricomincia tutte le volte che terapia cambia. Dopo dovremmo ristrutturare i dati per il verso della lunghezza (long), mettendo i quattro livelli della variabile dipendente (out come) in una variabile outc ed espandendo i risultati al dataset replicando ogni osservazione per un numero di volte definito da freq cosicchè abbiamo un osservazione per soggetto: reshape long fr, i(terapia sesso) j(outc) (note: j = 1 2 3 4) Data wide -> long 4 6 -> -> -> 12 4 o ut c f r1 f r2 .. . fr4 -> fr Number of obs. Number of variables j variable (4 values) xij variables: expand fr (238 observations created) Per controllare che la conversion dei dati sia corretta: table sesso outc, contents(freq) by(terapia) Terapia e sesso 1 outc 2 3 4 maschio femmina 28 4 45 12 29 5 26 2 alt maschio 41 44 20 20 femmina 12 7 3 1 seq 37 STATA TUTORIAL Analisi di mercato II Elisa Iezzi Per poter modellare la regressione logistica, bisogna avere variabili dicotomiche, per esempio, considerando la remissione parziale e completa come miglioramento e le altre categorie come nessun miglioramento. La nuova variabile può essere generata cosi: gen miglior=outc recode miglior 1/2=0 3/4=1 oppure usando gen miglior = outc>2 Analisi logistica A questo punto possiamo iniziare e creare il modello con il primo comando logit miglior terapia Iteration 0: Iteration 1: Iteration 2: log likelihood = -194.40888 log likelihood = -192.30753 log likelihood = -192.30471 Logistic regression Number of obs LR chi2(1 1) Prob > chi2 Pseudo R2 Log likelihood = -192.30471 miglior Coef. terapia _cons -.4 98 699 3 -. 36 150 2 Std. Err. .2 443 50 8 .1 654 23 6 z - 2.0 4 - 2.1 9 P>|z| 0 .04 1 0 .02 9 = = = = 29 9 4.2 1 0. 040 2 0. 010 8 [95% Conf. Interval] -. 977 618 - .6 857 263 -.0 19 780 5 -.0 37 277 7 L’algoritmo fa 3 iterazioni per convergere. Il coefficiente di terapia rappresenta la differenza in log odds (di un miglioramento) tra le terapie alternata e sequenziale. Il valore negativo indica che la terapia sequenziale è migliore a quella alternata. Il p-value del coefficiente è 0.041. Questo è derivato da la statistica di Wald, z, in cui è uguale al coefficiente diviso per il suo standard error asintotico come derivato dalla matrice Hessiana della funzione di log-verosimiglianza, valutata nella soluzione di massima verosimiglianza. Questo p-value è meno affidabile che il p-value basato sul rapporto di verosimiglianza tra il modello che include solo la costante e il modello corrente, in cui valore è mostrato in alto a destra (chi2(1)=4.21) La distribuzione approssimata se il modello semplice è corretto con un grado di liberà (perché c’è solo un parametro) che ha un p-value di 0.040, molto simile a quello basato sul test di Wald. Il coefficiente della variabile rappresenta la differenza in log odds tra terapie e non è facile da interpretare a parte il segno. Si dovrebbe convertire il coefficiente attraverso una funzione complessa del rapporto tra odds in formato esponenziale. Il comando logistic può essere usato per ottenere direttamente gli odds richiesti e il suo intervallo di confidenza (in alternativa, potremmo utilizzare l’opzione or nel comando logit. L’errore standard rappresenta lo standard error degli odd-ratio. logistic miglior terapia Logistic regression Number of obs LR chi2(1 1) Prob > chi2 Pseudo R2 Log likelihood = -192.30471 miglior Odds Ratio terapia .6073201 Std. Err. .1483991 z -2.04 = = = = 299 4.21 0.0402 0.0108 P>|z| [95% Conf. Interval] 0.041 .3762061 .9804138 Per verificare se l’inclusione di sesso nel modello incrementa significativamente la verosimiglianza, il modello corrente con verosimiglianza stima può essere salvata etimates store model1 38 STATA TUTORIAL Analisi di mercato II Elisa Iezzi Successivamente si puo aggiungere la variabile sesso logistic miglior terapia sesso Logistic regression Log likelihood = -190.63171 Number of obs LR chi2(2) Prob > chi2 Pseudo R2 = = = = 299 7.55 0.0229 0.0194 -----------------------------------------------------------------------------miglior | Odds Ratio Std. Err. z P>|z| [95% Conf. Interval] -------------+---------------------------------------------------------------terapia | .6051969 .1486907 -2.04 0.041 .3739084 .9795537 sesso | .5197993 .1930918 -1.76 0.078 .2509785 1.076551 ------------------------------------------------------------------------------ Il p-value della variabile sesso è basato sulla statistica di Wald ed è di 0.078 e il pvalue per il rapporto di verosimiglianza è ottenuto utilizzando lrtest model1 . Likelihood-ratio test (Assumption: model1 nested in .) LR chi2(1) = Prob > chi2 = 3.35 0.0674 Che non è molto diverso da 0.078. In lrtest il commando ‘.’ Si riferisce al modello corrente e model1 è il modello precedete che era stato memorizzato. Noi potremmo specificare i modelli in ordine inverso cosi Stata assumera che il modello con bassa log-verosimiglianza è dentro all’altro modello. ATTENZIONE: la comparazione di modelli deve essere fatta sullo stesso campione. Se la variabile sesso avesse presentato valori nulli, il numero di osservazioni che contribuivano al modello sarebbero stati inferiori rispetto al model1. In questo caso dovremmo restringere la stima del primo modello. Se il secondo modello (modello completo) è stato stimato per prima, questo può essere ottenuto utilizzando : logistic miglior terapia if e(sample) A questo punto trovato il modello ideale (nel nostro caso il secondo), possiamo controllare la capacità predittiva del modello utilizzando: predict prob E quattro diverse probabilità di previsione possono essere confrontate con le proporzioni osservate: table sesso, contents(mean prob mean miglior freq) by(terapia) terapia | and sesso | mean(prob) mean(miglior) Freq. ----------+-------------------------------------------seq | maschio | .4332747 .4296875 128 femmina | .2843846 .3043478 23 ----------+-------------------------------------------alt | maschio | .3163268 .32 125 femmina | .1938763 .173913 23 Il grado di accordo è buono, così appare non esservi forte interazione tra sesso e tipo di terapia. Potremmo testare ogni iterazione tra sesso e terapia utilizzando xi: logistic miglior i.terapia*i.sesso I residui non sono molto informativi in questi dati perché sono solo 4 diverse previsioni 39