# Dettagli sui file di dati

## Formato interno di base

Nel formato dati interno di gretl un dataset è immagazzinato in XML (extensible mark-up language). I file di dati sono conformi al semplice DTD (document type definition) contenuto nel file `gretldata.dtd`, fornito con la distribuzione di gretl e installato nella directory dei dati di sistema (ad es. `/usr/share/gretl/data` su Linux). I file di dati possono essere non compressi o compressi con gzip; oltre ai valori dei dati, contengono altre informazioni aggiuntive, come i nomi e le descrizioni delle variabili, la frequenza dei dati e così via.

La maggior parte degli utenti probabilmente non avrà bisogno di leggere o scrivere questi file, se non usando gretl stesso, ma se si vuole manipolarli usando altri strumenti, può essere utile esaminare il DTD e qualcuno dei file di esempio forniti: il file `data4-1.gdt` dà un semplice esempio, il file `data4-10.gdt` invece contiene anche delle etichette per le osservazioni.

## Formato tradizionale di ESL

Per compatibilità all'indietro, gretl può elaborare anche file di dati nel formato tradizionale ereditato dal programma ESL di Ramanathan. In questo formato (che era quello predefinito nelle versioni di gretl precedenti alla 0.98) un dataset è rappresentato da due file: uno contiene i dati veri e propri, l'altro contiene la descrizione dei dati e le modalità per la loro lettura. Per essere più specifici:

1. Dati veri e propri: una matrice rettangolare di numeri separati da spazio vuoto. Ogni colonna rappresenta una variabile, ogni riga un'osservazione per ognuna delle variabili (come in un foglio elettronico). Le colonne dei dati possono essere separate da spazi o caratteri tab. Il nome del file deve avere l'estensione `.gdt` e il file di solito è di tipo ASCII (testo semplice), ma può essere anche compresso con gzip, per occupare meno spazio su disco. È possibile inserire commenti in un file di dati: se una riga comincia con un carattere cancelletto (`#`), l'intera riga viene ignorata (questo comportamento è coerente con i file di dati di gnuplot e di octave).

2. Descrizione: il file di dati deve essere accompagnato da un file di descrizioni, che ha lo stesso nome di base del file di dati, ma l'estensione `.hdr`. Questo file contiene, nell'ordine:

   - (Opzionale) commenti sui dati, introdotti dalla stringa di apertura `(*` e conclusi dalla stringa `*)`; ognuna di queste stringhe deve essere presente da sola su una riga.

   - (Richiesta) lista dei nomi delle variabili presenti nel file, separati da spazio bianco. I nomi sono limitati a 8 caratteri, devono iniziare con una lettera e possono contenere solo caratteri alfanumerici e il carattere trattino basso, `_`. La lista può continuare su più righe e deve essere chiusa da un punto e virgola `;`.

   - (Richiesta) riga osservazioni, nel formato `1 1 85`. Il primo elemento indica la frequenza dei dati (1 per dati non datati o annuali, 4 per trimestrali, 12 per mensili). Gli altri due elementi indicano le osservazioni iniziale e finale: di solito questi saranno pari a 1 e al numero delle osservazioni, per i dati non datati. Per le serie storiche, è possibile usare date nella forma `1959.1` (trimestrale, una cifra dopo il punto) o `1967.03` (mensile, due cifre dopo il punto). Si veda il per l'uso speciale di questa riga nel caso dei dati panel.

   - La parola chiave `BYOBS`.

Ecco un esempio di un file di descrizione dei dati ben scritto.

    	  (*
    	  DATA9-6:
    	  Dati su log(moneta), log(reddito) e tasso di interesse USA.
    	  Fonte: Stock and Watson (1993) Econometrica
    	  (dati grezzi) Il periodo è 1900-1989 (dati annuali).
    	  Dati composti da Graham Elliott.
    	  *)
    	  lmoneta lreddito tassint ;
    	  1 1900 1989 BYOBS

Il corrispondente file di dati contiene tre colonne di dati, ognuna con 90 osservazioni.

Ci sono altre tre caratteristiche del formato dati tradizionale degne di nota.

1. Se la parola chiave `BYOBS` è sostituita da `BYVAR` ed è seguita dalla parola chiave `BINARY`, significa che il corrispondente file di dati è in formato binario. Questo tipo di file di dati può essere scritto da gretlcli usando il comando `store` con l'opzione `-s` (precisione singola) o l'opzione `-o` (precisione doppia).

2. Se `BYOBS` è seguita dalla parola chiave `MARKERS`, gretl si aspetta un file di dati in cui la prima colonna contiene stringhe (lunghe al massimo 8 caratteri) usate per identificare le osservazioni. Queste possono essere utili nel caso dei dati di tipo cross-section in cui le unità di osservazione sono identificabili: regioni, stati, città ecc. Un altro caso è quello delle serie storiche irregolari, come ad esempio i dati giornalieri delle quotazioni azionarie, in cui mancano i giorni in cui non avvengono contrattazioni: in questo caso, le osservazioni possono essere marcate con una stringa che rappresenta la data, come ad esempio `10/01/98` (si ricordi il limite di 8 caratteri). Si noti che le opzioni `BINARY` e `MARKERS` sono mutualmente esclusive, e si noti anche che i marcatori non sono considerati come una variabile: questa colonna non compare nell'elenco delle variabili nel file di descrizione dei dati.

3. Se esiste un file con lo stesso nome di base del file di dati e di quello delle descrizioni, ma con l'estensione `.lbl`, esso viene letto e usato per riempire le etichette descrittive per le serie di dati. Il formato del file di etichette è semplice: ogni riga contiene il nome di una variabile (indicata nel file di descrizione) seguito da uno o più spazi, seguito dall'etichetta descrittiva. Ecco un esempio: `prezzo Indice dei prezzi delle auto nuove, anno base 1982`

Se si vuole salvare i dati nel formato tradizionale, occorre usare l'opzione `-t` con il comando `store`, nella versione a riga di comando del programma o nella finestra del terminale della versione grafica del programma.

## Dettagli sui database binari

Un database di gretl consiste di due parti: un file indice ASCII (con l'estensione `.idx`) che contiene informazioni sulle serie, e un file binario (con estensione `.bin`) che contiene i dati veri e propri. Ecco due esempi di voci contenute in un file `idx`:

          G0M910  Indice composto da 11 indicatori principali (1987=100)
          M 1948.01 - 1995.11  n = 575
          currbal Bilancia dei pagamenti: parte corrente; corretta per la stagionalità
          Q 1960.1 - 1999.4 n = 160

Il primo campo è il nome della serie, il secondo è una descrizione della serie (al massimo di 128 caratteri). Sulla seconda riga, il primo campo è un codice di frequenza: `M` per mensile, `Q` per trimestrale, `A` per annuale, `B` per giornalieri-lavorativi (giornalieri con cinque giorni a settimana) e `D` per giornalieri (sette giorni a settimana). Al momento non vengono accettati altri codici di frequenza. Quindi segue la data iniziale (con due cifre che seguono il punto nei dati mensili, una per i dati trimestrali, nessuna per quelli annuali), uno spazio, un trattino, un altro spazio, la data finale, la stringa `n =` e il numero delle osservazioni. Nel caso di dati giornalieri, le date iniziale e finale devono essere indicate nella forma `YYYY/MM/DD`. Questo formato deve essere rispettato alla lettera.

Opzionalmente, la prima riga del file indice può contenere un breve commento (al massimo 64 caratteri) a proposito della fonte e del tipo dei dati, che segue un carattere cancelletto. Ad esempio:

          # Banca Centrale Europea (tassi di interesse)

Il corrispondente database binario contiene i valori dei dati, rappresentati come float, ossia come numeri in virgola mobile a precisione singola, che tipicamente occupano quattro byte ciascuno. I numeri sono immagazzinati per variabile, così che i primi n numeri sono le osservazioni della variabile 1, i successivi m sono le osservazioni per la variabile 2 e così via.

# Note tecniche

Gretl è scritto nel linguaggio di programmazione C. Ho aderito nel modo più stretto possibile allo standard C ISO/ANSI (C89), anche se l'interfaccia grafica e alcune altre componenti devono fare uso necessariamente di estensioni specifiche per certe piattaforme.

gretl è stato sviluppato sotto Linux. La libreria condivisa e il client a riga di comando dovrebbero essere compilabili su qualsiasi piattaforma che (a) supporti l'ISO/ANSI C e (b) abbia installate le seguenti librerie: zlib (per la compressione dei dati), libxml (manipolazione dell'XML) e LAPACK (supporto per l'algebra lineare). La home page di zlib si trova a info-zip.org, libxml si trova a xmlsoft.org, mentre LAPACK è a netlib.org. Se il sistema ospita anche la libreria GNU readline, essa sarà usata per gretcli, fornendo una riga di comando molto più comoda da utilizzare. Si veda la home page di readline.

Il client grafico dovrebbe essere compilabile e utilizzabile su ogni sistema che, oltre ai requisiti visti sopra, offra la libreria GTK nella versione 1.2.3 o superiore (si veda gtk.org). Al momento della scrittura di questo manuale esistono due varianti principali delle librerie GTK: la serie 1,2 e la serie 2.0, lanciata nell'estate 2002. Poiché queste varianti sono mutualmente incompatibili, gretl può essere compilato usando una sola di esse; il pacchetto sorgente contiene due directory: `gui` per GTK 1.2 e `gui2` per GTK 2.0. Raccomando l'uso di GTK 2.0 se è disponibile, visto che offre molti vantaggi rispetto a GTK 1.2.

gretl chiama gnuplot per produrre grafici. È possibile trovare gnuplot a gnuplot.info. Al momento della scrittura di questo manuale, la versione ufficiale più recente di gnuplot è la 4.0 (dell'Aprile 2004). La versione MS Windows di gretl comprende la versione 4.0 di gnuplot per Windows; sul sito web di gretl è possibile trovare un pacchetto rpm di gnuplot 3.8j0 per sistemi Linux x86.

Alcune funzionalità di gretl fanno uso della libreria gtkextra di Adrian Feguin. È possibile trovare gtkextra a gtkextra.sourceforge.net. Le parti rilevanti di questo pacchetto sono incluse (in forma leggermente modificata) con la distribuzione sorgente di gretl.

Una versione binaria del programma è disponibile per la piattaforma Microsoft Windows (versione 32-bit, ossia Windows 95 o superiore). Questa versione è cross-compilata su Linux usando mingw (il compilatore GNU C, gcc, portato per l'uso con win32) e collegata alla libreria C di Microsoft C, `msvcrt.dll`. Utilizza il port di GTK 2.0 su win32 di Tor Lillqvist. L'installatore per Windows (libero, open-source) è a cura di Jordan Russell (jrsoftware.org).

Spero che gli utenti con conoscenze di programmazione possano considerare gretl abbastanza interessante e degno di essere migliorato ed esteso. La documentazione dell'API libgretl non è ancora completa, ma è possibile trovare alcuni dettagli seguendo il link Libgretl API docs sul sito web di gretl.

# Accuratezza numerica

gretl usa aritmetica a doppia precisione, ad eccezione del plugin per precisione multipla invocabile con il comando del menù Modello, Minimi quadrati in alta precisione che rappresenta i valori in virgola mobile usando un numero di bit indicato dalla variabile di ambiente `GRETL_MP_BITS` (valore predefinito: 256). Le equazioni normali dei minimi quadrati sono risolte in modo predefinito usando la decomposizione di Cholesky, che è abbastanza accurata per la maggior parte delle applicazioni (c'è anche l'opzione di usare la decomposizione QR). Il programma è stato testato abbastanza approfonditamente con i dataset di riferimento forniti dal NIST (il National Institute of Standards and Technology statunitense) e un rapporto completo dei risultati si trova sul sito web di gretl (seguendo il link Accuratezza numerica).

Nell'Ottobre del 2002 ho avuto un utile scambio di idee con Giovanni Baiocchi e Walter Distaso, che stavano scrivendo una recensione di gretl per il Journal of Applied Econometrics e con James MacKinnon, responsabile delle recensioni di software per il giornale La recensione è poi stata pubblicata; si veda Baiocchi e Distaso (2003). e sono grato a Baiocchi e Distaso per il loro accurato esame del programma, che ha suggerito le seguenti modifiche.

1. I recensori hanno trovato un bug nel calcolatore di p-value di gretl, perchè il programma mostrava il complemento della probabilità corretta per i valori negativi di z. Il bug è stato corretto nella versione 0.998 del programma (pubblicata il 9 Luglio 2002).

2. È stato anche notato che il calcolatore di p-value produceva risultati non accurati per valori estremi di x (ad es. valori da 8 a 10 nella distribuzione t con 100 gradi di libertà). Anche questo problema è stato risolto nella versione 0.998 di gretl, inserendo codice più accurato per la distribuzione di probabilità.

3. I recensori hanno notato un difetto nella presentazione dei coefficienti di regressione in gretl, perchè alcuni coefficienti venivano mostrati con un numero troppo basso di cifre significative. Il difetto è stato corretto nella versione 0.999 (pubblicata il 25 Agosto 2002): ora tutte le statistiche associate con la regressione sono mostrate con 6 cifre significative.

4. I test eseguiti dai recensori indicavano che l'accuratezza numerica di gretl su MS Windows è minore che su Linux, dove io avevo svolto i miei test. Ad esempio, i dati Longley (un dataset notoriamente mal-condizionato usato spesso per testare i programmi econometrici) la versione Windows di gretl produceva alcuni coefficienti con la settima cifra errata, mentre gli stessi coefficienti risultavano corretti su Linux. Questa anomalia è stata corretta nella versione 1.0pre3 di gretl (pubblicata il 10 Ottobre 2002).

La versione attuale di gretl comprende un plugin che esegue la suite NIST di test della regressione lineare. È possibile trovarlo nel menù Utilità della finestra principale. Quando viene eseguito questo test, un'introduzione spiega qual è il risultato atteso: se si esegue il test e si ottengono risultati diversi da quelli attesi, si prega di inviare un bug report a `cottrell@wfu.edu`.

Come detto sopra, tutte le statistiche di regressione sono mostrate con 6 cifre significative nella versione attuale di gretl (tranne quando viene usato il plugin per precisione multipla, e allora i risultati sono mostrati con 12 cifre). Se occorre esaminare un valore più da vicino, basta per prima cosa salvarlo (si veda il comando ) e poi visualizzarlo usando il comando `print --ten` (si veda il ): verrà mostrato con 10 cifre significative.

# Analisi econometrica avanzata con software libero

Come descritto nel manuale, gretl offre una raccolta abbastanza completa di stimatori basati sui minimi quadrati e alcuni stimatori aggiuntivi, come logit, probit e le minime deviazioni assolute, ma gli utenti avanzati possono trovare questa lista troppo ristretta.

Senza dubbio, alcuni utenti avanzati preferiranno scrivere da soli il proprio codice statistico usando qualche linguaggio di programmazione come C, C++ o Fortran. Un'altra opzione è quella di usare un linguaggio di livello più alto che offre funzioni per la manipolazione di matrici e altre routine statistiche incluse o disponibili come pacchetti aggiuntivi. Se si è attratti da quest'ultima opzione e si intende usare software libero, raccomando di dare un'occhiata a GNU R (r-project.org) o GNU Octave (www.octave.org). Questi programmi sono molto simili rispettivamente ai programmi commerciali S e Matlab.

Come già detto nel manuale, gretl offre la possibilità di esportare i dati nei formati di Octave e R. Nel caso di Octave, il dataset di gretl viene salvato come matrice singola `X`: una volta importati i dati in Octave, se si vuole, è possibile eliminare la matrice `X`, si veda il manuale di Octave per i dettagli. Per quanto riguarda R, il file dei dati esportati conserva qualsiasi struttura di serie storiche riconoscibile da gretl. Le serie sono salvate come strutture individuali: i dati vanno importati in R con il comando `source()`.

Di questi due programmi, R è forse quello di più immediato interesse per gli econometrici, visto che offre più routine statistiche (ad es. modelli lineari generalizzati, stima di massima verosimiglianza, metodi per serie storiche), quindi ho inserito in gretl una funzione per trasferire velocemente dati in R. Il menù Sessione di gretl contiene il comando Avvia GNU R, che salva una versione per R del dataset in uso (come file `Rdata.tmp` nella directory gretl dell'utente) e lo carica in una nuova sessione di R. Di seguito sono forniti alcuni dettagli su questa operazione.

Per prima cosa, i dati vengono importati in R scrivendo una versione temporanea di `.Rprofile` nella directory di lavoro corrente (se esiste un file di questo tipo, viene letto da R all'avvio). Se la directory contiene una versione personale di `.Rprofile`, il file originale viene rinominato temporaneamente come `.Rprofile.gretltmp` e viene ripristinato all'uscita da gretl (se qualcuno ha un'idea migliore per questa operazione, mi farebbe piacere ascoltarla).

Inoltre, il modo esatto in cui R viene avviato dipende dalla variabile interna `Rcommand` di gretl, il cui valore deve essere impostato nel menù File, Preferenze. Il comando predefinito è `RGui.exe` in MS Windows, mentre in X è `R --gui=gnome` se al momento della compilazione è stata trovata un'installazione del desktop Gnome (gnome.org), oppure `xterm -e R` se Gnome non è disponibile. Si noti che questa stringa può contenere al massimo tre elementi separati da spazi: ulteriori elementi saranno ignorati.

# Elenco degli URL

Quello che segue è un elenco degli URL citati nel testo.

Census Bureau, Data Extraction Service

  `http://www.census.gov/ftp/pub/DES/www/welcome.html`

Estima (RATS)

  `http://www.estima.com/`

Home page del desktop Gnome

  `http://www.gnome.org/`

Libreria GNU Multiple Precision (GMP)

  `http://swox.com/gmp/`

Home page di GNU Octave

  `http://www.octave.org/`

Home page di GNU R

  `http://www.r-project.org/`

Manuale di GNU R

  `http://cran.r-project.org/doc/manuals/R-intro.pdf`

Home page di Gnuplot

  `http://www.gnuplot.info/`

Manuale di Gnuplot

  `http://ricardo.ecn.wfu.edu/gnuplot.html`

Pagina dei dati di Gretl (versione italiana)

  `http://gretl.sourceforge.net/gretl_data_it.html`

Home page di Gretl (versione italiana)

  `http://gretl.sourceforge.net/gretl_italiano.html`

Home page di GTK+

  `http://www.gtk.org/`

Home page del port di GTK+ per win32

  `http://www.gimp.org/~tml/gimp/win32/`

Home page di Gtkextra

  `http://gtkextra.sourceforge.net/`

Home page di InfoZip

  `http://www.info-zip.org/pub/infozip/zlib/`

JRSoftware

  `http://www.jrsoftware.org/`

Home page di Mingw (gcc per win32)

  `http://www.mingw.org/`

Minpack

  `http://www.netlib.org/minpack/`

Penn World Table

  `http://pwt.econ.upenn.edu/`

Home page di Readline

  `http://cnswww.cns.cwru.edu/~chet/readline/rltop.html`

Manuale di Readline

  `http://cnswww.cns.cwru.edu/~chet/readline/readline.html`

Home page di Xmlsoft

  `http://xmlsoft.org/`