# Funzioni speciali in genr

## Introduzione

Il comando `genr` offre un modo flessibile per definire nuove variabili. Il comando è documentato nel capitolo della guida comandi di questo manuale (si veda ), mentre questo capitolo offre una discussione più approfondita di alcune delle funzioni speciali disponibili con `genr` e di alcune particolarità del comando.

## Filtri per serie storiche

Un tipo di funzione specializzata di `genr` è il filtro per le serie storiche. Ne esistono di due tipi al momento: il filtro di Hodrick–Prescott e quello passa banda di Baxter–King. Sono utilizzabili rispettivamente con le funzioni `hpfilt()` e `bkfilt()`, che richiedono come argomento il nome della variabile da processare.

### Il filtro di Hodrick–Prescott

Da scrivere.

### Il filtro di Baxter e King

Si consideri la rappresentazione spettrale di una serie storica yt: \[ y_t = \int_{-\pi}^{\pi} e^{i\omega} \mathrm{d} Z(\omega) \] se volessimo estrarre solo la componente di yt che si trova tra le frequenze $\underline{\omega}$ e $\overline{\omega}$ potremmo applicare un filtro passa banda: \[ c^*_t = \int_{-\pi}^{\pi} F^*(\omega) e^{i\omega} \mathrm{d} Z(\omega) \] dove $F^*(\omega) = 1$ per $\underline{\omega} < |\omega| < \overline{\omega}$ e 0 altrove. Ciò implicherebbe, nel dominio temporale, applicare alla serie un filtro con un numero infinito di coefficienti, cosa non desiderabile. Il filtro passa banda di Baxter e King applica a yt un polinomio finito nell'operatore di ritardo A(L): \[ c_t = A(L) y_t \] dove A(L) è definito come \[ A(L) = \sum_{i=-k}^{k} a_i L^i \] I coefficienti ai sono scelti in modo che $F(\omega) = A(e^{i\omega})A(e^{-i\omega})$ sia la migliore approssimazione di $F^*(\omega)$ per un dato k. Chiaramente, maggiore è k, migliore è l'approssimazione, ma poiché occorre scartare 2k osservazioni, di solito si cerca un compromesso. Inoltre, il filtro ha altre proprietà teoriche interessanti, tra cui quella che A(1) = 0, quindi una serie con una sola radice unitaria è resa stazionaria con l'applicazione del filtro.

In pratica, il filtro è usato di solito con dati mensili o trimestrali per estrarne la componente di ciclo economico, ossia la componente tra 6 e 36 trimestri. I valori usuali per k sono 8 o 12 (o forse di più per serie mensili).

I valori predefiniti per i limiti di frequenza sono 8 e 32, mentre il valore predefinito per l'ordine di approssimazione, k, è 8. È possibile impostare questi valori usando il comando . La parola chiave per impostare i limiti di frequenza è `bkbp_limits`, mentre quella per k è `bkbp_k`. Quindi ad esempio, se si stanno usando dati mensili e si vuole impostare i limiti di frequenza tra 18 e 96, e k a 24, si può eseguire

    	set bkbp_limits 18 96
    	set bkbp_k 24

Questi valori resteranno in vigore per le chiamate alla funzione `bkfilt` finché non saranno modificati da un altro uso di `set`.

## Ricampionamento e bootstrapping

Un'altra funzione particolare è il ricampionamento, con reimmissione, di una serie. Da scrivere.

## Gestione dei valori mancanti

Sono disponibili quattro funzioni speciali per gestire i valori mancanti. La funzione booleana `missing()` richiede come unico argomento il nome di una variabile e produce una serie con valore 1 per ogni osservazione in cui la variabile indicata ha un valore mancante, 0 altrove (ossia dove la variabile indicata ha un valore valido). La funzione `ok()` è il complemento di `missing`, ossia una scorciatoia per `!missing` (dove `!` è l'operatore booleano NOT).

Ad esempio, è possibile contare i valori mancanti della variabile `x` usando

          genr nmanc_x = sum(missing(x))

La funzione `zeromiss()`, che richiede anch'essa come unico argomento il nome di una serie, produce una serie in cui tutti i valori zero sono trasformati in valori mancanti. Occorre usarla con attenzione (di solito non bisogna confondere valori mancanti col valore zero), ma può essere utile in alcuni casi: ad esempio, è possibile determinare la prima osservazione valida di una variabile `x` usando

          genr time
          genr x0 = min(zeromiss(time * ok(x)))

La funzione `misszero()` compie l'operazione opposta di `zeromiss`, ossia converte tutti i valori mancanti in zero.

Può essere utile chiarire la propagazione dei valori mancanti all'interno delle formule di `genr`. La regola generale è che nelle operazioni aritmetiche che coinvolgono due variabili, se una delle variabili ha un valore mancante in corrispondenza dell'osservazione t, anche la serie risultante avrà un valore mancante in t. L'unica eccezione a questa regola è la moltiplicazione per zero: zero moltiplicato per un valore mancante produce sempre zero (visto che matematicamente il risultato è zero a prescindere dal valore dell'altro fattore).

## Recupero di variabili interne

Il comando `genr` fornisce un modo per recuperare vari valori calcolati dal programma nel corso della stima dei modelli o della verifica di ipotesi. Le variabili che possono essere richiamate in questo modo sono elencate nella voce della guida comandi; qui ci occupiamo in particolare delle variabili speciali `$test` e `$pvalue`.

Queste variabili contengono, rispettivamente, il valore dell'ultima statistica test calcolata durante l'ultimo uso esplicito di un comando di test e il p-value per quella statistica test. Se non è stato eseguito alcun comando di test, le variabili contengono il codice di valore mancante. I comandi espliciti di test che funzionano in questo modo sono i seguenti: (test congiunto per la significatività di variabili aggiunte a un modello); (test di Dickey–Fuller aumentato, si veda oltre); (test per ARCH); (test Chow per break strutturale); (test per la somma dei coefficienti specificati); (la statistica t di Harvey–Collier); (il test di stazionarietà KPSS, p-value non disponibile); (si veda oltre); (test per la differenza delle medie); (test congiunto per la significatività delle variabili omesse da un modello); (test RESET di Ramsey); (vincolo lineare generale); (test delle successioni per la casualità); (test per la normalità dei residui) e (test per la differenza delle varianze). Nella maggior parte dei casi, vengono salvati valori sia in `$test` che in `$pvalue`; l'eccezione è il test KPSS, per cui non è disponibile il p-value.

Un punto da tenere in considerazione a questo proposito è che le variabili interne `$test` e `$pvalue` vengono sovrascritte ogni volta che viene eseguito uno dei test elencati sopra. Se si intende referenziare questi valori durante una sequenza di comandi gretl, occorre farlo nel momento giusto.

Una questione correlata è che alcuni dei comandi di test generano di solito più di una statistica test e più di un p-value: in questi casi vengono salvati solo gli ultimi valori. Per controllare in modo preciso quali valori vengono recuperati da `$test` e `$pvalue` occorre formulare il comando di test in modo che il risultato non sia ambiguo. Questa nota vale in particolare per i comandi `adf` e `lmtest`.

- Di solito, il comando genera tre varianti del test Dickey–Fuller: una basata su una regressione che include una costante, una che include costante e trend lineare, e una che include costante e trend quadratico. Se si intende estrarre valori da `$test` o `$pvalue` dopo aver usato questo comando, è possibile selezionare la variante per cui verranno salvati i valori, usando una delle opzioni `--nc`, `--c`, `--ct` o `--ctt` con il comando `adf`.

- Di solito, il comando (che deve seguire una regressione OLS) esegue vari test diagnostici sulla regressione in questione. Per controllare cosa viene salvato in `$test` e `$pvalue` occorre limitare il test usando una delle opzioni `--logs`, `--autocorr`, `--squares` o `--white`.

Un aiuto all'uso dei valori immagazzinati in `$test` e `$pvalue` è dato dal fatto che il tipo di test a cui si riferiscono questi valori viene scritto nell'etichetta descrittiva della variabile generata. Per controllare di aver recuperato il valore corretto, è possibile leggere l'etichetta con il comando (il cui unico argomento è il nome della variabile). La seguente sessione interattiva illustra la procedura.

          ? adf 4 x1 --c

          Test Dickey-Fuller aumentati, ordine 4, per x1
          ampiezza campionaria 59
          ipotesi nulla di radice unitaria: a = 1

            test con costante
            modello: (1 - L)y = b0 + (a-1)*y(-1) + ... + e
            valore stimato di (a - 1): -0.216889
            statistica test: t = -1.83491
            p-value asintotico 0.3638

          P-value basati su MacKinnon (JAE, 1996)
          ? genr pv = $pvalue
          Generato lo scalare pv (ID 13) = 0.363844
          ? label pv
          pv=Dickey-Fuller pvalue (scalar)