Sei sulla pagina 1di 39

STATA TUTORIAL

Analisi di mercato II

Elisa Iezzi

STATA TUTORIAL
Primi passi con STATA
-Gestione dati, grafici e semplici modelli-

Dott.ssa ELISA IEZZI


elisa.iezzi@unibo.it

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 dallEDITOR (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

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

STATA TUTORIAL
Analisi di mercato II

Elisa Iezzi

ISTRUZIONI GENERALI
INTRODUZIONE

Dove trovare STATA e i dati da utilizzare


Allinterno dei programmi si pu avviare direttamente licona 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:

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 allutente 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 lelenco delle variabili contenute nel data set indicandone il
nome, letichetta 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!

STATA TUTORIAL
Analisi di mercato II

Elisa Iezzi

Stata Help
E la finestra della guida alluso del programma (in inglese). Si apre cliccando Help nel men o
premendo alt+h e scegliendo lopzione 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 lapposito 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 leditor, per accedere alle altre finestre
necessario chiuderlo.

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.

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 larchiviazione 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 nelleditor dati e poi salvandoli. Quando un dataset viene modificato, cosa
ricorrente nellutilizzo di Stata, occorre salvare le modifiche se si intende renderle definitive con
lavvertenza 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 dallutente per visualizzare i risultati dellanalisi. 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 lultima 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 sullicona 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 lopzione 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 lopzione
Append to existing file che permette di continuare a registrare gli output in successione a quelli
precedentemente salvati oppure lopzione 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:

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: dallapertura del
dataset, passando per lanalisi 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 licona del file: Stata si aprir automaticamente e tutte le procedure
verranno effettuate senza inceppare in errori.
Come creare un do-file
Facendo clic sullicona che raffigura foglio e matita sulla barra degli strumenti o nel menu
Windows>do-file editor si apre la finestra delleditor 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 lanalisi*
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 alloutput (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 loutput 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 (allinterno 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 (allinterno 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 (allinterno 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

->

I dati ora sono :

14

STATA TUTORIAL
Analisi di mercato II

Elisa Iezzi

. list

1.
2.
3.
4.

s ub j

oc c

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 dallEDITOR (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 sullintestazione della colonna (per es. su var1) in modo tale che appaia lo STATA
VARIABLE INFORMATION dove poter inserire il nome desiderato.
1.Clicca sullicona DATA EDITOR
2.Da sinistra a destra inserire i seguenti numeri (aiutati con
linvio 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 unopzione che pulisce
dati eventualmente in memoria che non sono stati salvati. Se non viene messa unestensione 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
lestensione .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 lestensione .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
lestensione .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
unestensione .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 lopzione 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 lestensione
.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 lespressione indicate vera.
Lopzione 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
sullampiezza 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 lapparizione 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 lindividuo
ha una licenza elementare e 0 negli altri casi, dummy2=1 se lindividuo 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 lespressione 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 unoperazione
impossibile (per es. la divisione per zero) da luogo ad un valore missing.
2. operatori di stringa: + (concatenazione di stringa), per esempio lespressione Matrice di
varianza+-covarianza produce la stringa Matrice di varianza-covarianza
3. operatori di relazione: <(meno di), > (pi grande di), <= (meno o uguale di ), >=
(pigrande 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 lespressione vera, 0 se falsa.

19

STATA TUTORIAL
Analisi di mercato II

Elisa Iezzi

Lordine di valutazione segue le regole standard, lespressione sulla sinistra quella valutata prima,
lultima sulla destra quella valutata per ultima. Le parentesi possono essere usate per forzare un
ordine differente di valutazione

Funzioni
Le funzioni sono usate nellespressione exp nella sintassi vista. Al posto di exp molte funzioni
possono essere utilizzate. Largomento 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 sullintervallo [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 unanalisi 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 loutput. Per
eliminare loutput 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 nellordine 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 lazione dellopzione add() (se specificato lopzione 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 dallopzion 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 lhelp 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, Fishers 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 lipotesi che righe e colonne della tabella siano indipendenti, column mostra in ogni cella
della tabella a doppia entrata le frequenze relative di quella cella allinterno 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 nellanalisi.

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). Lidentifier(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 lupdate rifiutato. Il risultato
uguale al _merge==3, ma cerano degli updates nello using data inconsistenti con ci che
gi si aveva e perci lupdate 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.
Lopzione 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 dellespressione richiesta (se lespressione meno di uno o missing
allora viene interpretata come uno e losservazione 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 unosservazione 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

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

- 99

-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
lhanno 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
laumento 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

WEIGHT

10

no

Graphs by LIFE

Lopzione yline(0) ha permesso di mettere la linea orizzontale in posizione 0. Listruzione /*


*/ 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 lassunzione 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 lassunzione
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

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 allapplicazione 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

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

Lopzione 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 lipotesi 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 ununica 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 ununica 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

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

WEIGHT

10

Unaltra 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 allet, 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 lindice 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 lopzione 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.

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

outc
2

maschio
femmina

28
4

45
12

29
5

26
2

alt
maschio

41

44

20

20

femmina

12

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

Lalgoritmo 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 lopzione or nel comando
logit. Lerrore 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 linclusione 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 allaltro
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

Potrebbero piacerti anche