Sei sulla pagina 1di 7

F. Lisi - I principali comandi di R per lanalisi delle serie storiche (versione 3.

0)

2/14

0. Introduzione

I principali comandi di R per

R un linguaggio di programmazione orientato all'analisi statistica dei dati ed


disponibile, gratuitamente, per chiunque lo intenda utilizzare secondo la licenza
GPL (Gnu Public Licence), al seguente indirizzo:

lanalisi delle serie storiche

http://www.ci.tuwien.ac.at/R/contents.html
In queste pagina si fa riferimento alla versione 1.9.0 di R.

I nomi per gli oggetti possono essere formati dalle lettere dell'alfabeto, dalle cifre 09, e dal carattere punto: ".''. Un nome non pu iniziare con una cifra (9ma non
ammesso ma m9a lo ) n con un punto seguito solo da cifre (.90 non ammesso

Francesco Lisi

ma .9a lo ).

Dipartimento di Scienze Statistiche - Universit di Padova

E' importante sottolineare che in R usare lettere maiuscole piuttosto che minuscole
fa differenza e dunque, ad esempio, l'oggetto ma diverso dall'oggetto mA.

1. Comandi generali
Novembre 2006
versione 3.0

L'assegnazione di un valore ad un variabile avviene tramite l'operatore =


a=12

Il concatenamento di oggetti si ottiene con il comando c


x=c(2,3,4)
y=c("stringa1", "stringa2", "stringa3")

E' possibile ottenere sequenze numeriche con il comando seq


a=seq(minimo, massimo, incremento)

Per ottenere vettori di costanti o con andamenti regolari si usa il comando rep
rep(costante, n. di volte)
rep(min:max, n. di volte)
rep(c(0,6), n. di volte)

Queste note fanno riferimento alla versione 2.4.0 di R.

Per creare una matrice


matrix(dati, nrow, ncol, byrow=TRUE)

F. Lisi - I principali comandi di R per lanalisi delle serie storiche (versione 3.0)

3/14

Numero righe e colonne in una matrice x

F. Lisi - I principali comandi di R per lanalisi delle serie storiche (versione 3.0)

Per salvare il valore di una variabile y in un file c:\sse\results.out si deve usare il

nrow(x)

comando

ncol(x)

write(y,"c:/sse/reults.out",ncolumns=1)

Per concatenare matrici o per aggiungere righe o colonne ad una matrice


rbind(mat1, mat2)

# concatena per riga

cbind(mat1, mat2)

# concatena per colonna

Caricamento di un programma

2. Grafici
E' possibile creare il grafico di una serie di dati con il comando plot
plot(x, parametri)

source("c:/sse/sse")
Caricamento di una libreria

Per vedere gli oggetti correntemente disponibili

Creazione di un istogramma
hist(x,breaks=15)

objects()
Per rimuove l'oggetto di nome pippo

Per creare un diagramma a dispersione tra i dati in x e quelli in y


plot(x,y, parametri)

library(forecast)

Alcune opzioni per il parametro type nel comando plot

rm(pippo)

rm(list=ls())

Opzioni

Stile

Per aprire una finestra su un comando, ad es. il comando mean

type="p"

Punti (default)

type="l"

Linee

type="b"

Linee e punti

type="h"

Istogrammi

?mean

1. Caricamento e salvataggio dei dati

Si supponga di avere una serie storica in formato ASCII contenuta nel file

Alcune opzioni per le funzioni del comando plot

c:\sse\pippo.dat. Per assegnare questa serie storica ad una variabile x di tipo array
x=scan("c:/sse/pippo.dat")
Si noti l'uso della barra / al posto della barra rovesciata \ tipica del DOS.

Nel caso di serie storiche possibile creare degli oggetti di classe ts mediante la
funzione ts. Per esempio, se i dati fossero annuali e partissero dal 1951 si avrebbe
x=ts(scan("c:/sse/pippo.dat"),start=1951,frequency=1)

Con dati mensili invece si dovrebbe scrivere


x=ts(scan("c:/sse/pippo.dat"),start=c(1951,1),frequency
=12)

4/14

Opzioni

Stile

main="titolo"

Stringa del titolo

sub="sottotitolo"

Stringa del sottotitolo

xlab="intestazione"

Intestazione asse delle x

ylab="intestazione"

Intestazione asse delle y

xlim=c(xmin,xmax)

Scala dell'asse x

ylim=c(ymin,ymax)

Scala dell'asse y

lwd=1

Grossezza linea (1,2,..)

lty=1

Tipo di linea (1=continua, 2..)

F. Lisi - I principali comandi di R per lanalisi delle serie storiche (versione 3.0)

5/14

Comandi che aggiungono elementi a grafici esistenti

F. Lisi - I principali comandi di R per lanalisi delle serie storiche (versione 3.0)

6/14

Mediana
median(x)

Funzione

Descrizione

abline(a,b)

Aggiunge al grafico corrente una linea con


intercetta a e coefficiente angolare b

abline(h=c)

Aggiunge una linea orizzontale in y=c

abline(v=c)

Aggiunge una linea verticale in x=c

lines(y, parametri)

Aggiunge nel grafico la serie y

text(xpos,ypos,testo)

Aggiunge testo nella posizione specificata

Varianza

Quantili

var(x)

quantile(x, c(0.3,0.8))

log(x)

# sottoserie n1-n2 #

Coefficiente di asimmetria (libreria sse)

par(mfrow=c(3,1))

l'indice vale 3 nel caso normale


curtosi.fisher(x)

plot(serie1)
plot(serie2)
plot(serie3)
Per rappresentare diverse serie sullo stesso grafico disponibile il comando ts.plot

Coefficiente di curtosi (libreria sse)


curtosi(x)

Grafici multipli
win.graph(width=6, height=9)

Trasformazione logaritmica

asimm(x)
Grafici di sottoserie
plot(window(x,n1,n2))

Differenziazione
diff(x,lag=1,differences=1)

Campionamento da una serie (una osservazione ogni 4)


x.sub=x[seq(1,length(x),by=4)]

appartenente alla libreria ts

Estrazione di valori tramite operatori logici


x.sub=x[x>0]

ts.plot(serie1,serie2,,gpars=list(col=c(2,3,)))

x.sub=x[x==1]
x.sub=x[x!=1]

3. Analisi preliminari

4. Generazione di una serie da un modello ARMA


Lunghezza di una serie
length(x)

La generazione di n numeri casuali normali pu avvenire mediante il comando

Varie statistiche descrittive

rnorm

summary(x)

wn=rnorm(200)

Media
mean(x)

F. Lisi - I principali comandi di R per lanalisi delle serie storiche (versione 3.0)

7/14

F. Lisi - I principali comandi di R per lanalisi delle serie storiche (versione 3.0)

8/14

dove ar=vettore numerico di coefficienti AR

La generazione di n osservazioni da un modello ARMA avviene mediante il


comando arima.sim . La sintassi del comando

ma=vettore numerico di coefficienti MA

y=arima.sim(n,model,rand.gen=rnorm,sd,n.start = NA..)

lag.max=massimo lag richiesto


pacf=indicatore logico che specifica se calcolare lautocorrelazione parziale.

dove n=lunghezza della serie


model = una lista con gli ordini del modello e i coefficienti AR ed MA

Ad esempio:

rand.gen= una funzione che specifica la distribuzione delle innovazioni

z=ARMAacf(ar=c(0.5,0.3), ma=(0.5), lag.max=20,


pacf=FALSE)

(normale di default)
sd = deviazione standard dell'innovazione
n.start = numero di osservazioni da tralasciare

Il calcolo della funzione di autocorrelazione campionaria avviene tramite il


comando acf

Ad esempio, per generare serie da un modello ARMA (2,2) ad innovazioni normali

acf(x,lag.max=36,type=c(correlation,covariance,

y=arima.sim(n=100,model=list(ar = c(0.8,-0.4),ma=c(-0.2,

partial),plot=TRUE)

0.3)), sd = 1)
per generare una serie da un modello ARIMA(2,1,1) ad innovazioni normali

lag.max = massimo ritardo per il quale calcolare lautocorrelazione

y=arima.sim(n=200,list(order=c(2,1,1), ar=c(0.88,-0.48),
ma=c(-0.22)), sd=sqrt(0.18))

type = permette di calcolare la correlazione (default), la covarianza o la


correlazione parziale.

per generare un AR(1) ad innovazioni t di Student


y=arima.sim(n = 200, list(ar=-0.7, ma=NULL),
function(n) rt(n, df = 5))

plot = se posto uguale a FALSE non viene rappresentato il grafico


rand.gen =
Per disporre dei valori numerici delle autocorrelazioni bisogna assegnare il comando
acf ad una variabile, ad es

Si noti che :
-

per generare serie da un modello integrato bisogna usare lopzione order;

per generare una serie da un modello stagionale SARIMA bisogna scrivere il


modello nella sua forma ARMA.

z=acf(x,lag.max=36)
z$acf

contiene i valori numerici della funzione di autocorrelazione

Il calcolo della funzione campionaria di autocorrelazione parziale pu avvenire


anche tramite il comando pacf
pacf(x,lag.max=36,plot=TRUE)

5. Funzioni di autocovarianza e autocorrelazione

Per il calcolo della funzione di autocorrelazione campionaria incrociata di tra due

Il calcolo dellautocorrelazione teorica di un processo ARMA avviene tramite il

serie x e y bisogna prima inserirle in una matrice, ad es. z=cbind(x,y) e poi richimare

comando ARMAacf, la cui sintassi

la funzione acf per loggetto z

ARMAacf(ar=numeric(0), ma=numeric(0), lag.max=r,


pacf=FALSE)

F. Lisi - I principali comandi di R per lanalisi delle serie storiche (versione 3.0)

9/14

F. Lisi - I principali comandi di R per lanalisi delle serie storiche (versione 3.0)

10/14

in riferimento alla varianza residua del modello) per i modelli

Per una serie storica x possibile tracciare i grafici di ACF e PACF in una stessa

ARMA(p,q), p=0,1,,pmax e q=0,1,,qmax


ident$aic2

schermata tramite il comando cfs (libreria sse)

fornisce lo stesso tipo di matrice ma il criterio di Akaike viene


calcolato in riferimento alla log-verosimiglianza

cfs(x,lagmax=24,new=T)
ident$sc

fornisce la matrice con i valori del criterio di Schwartz per i


modelli ARMA(p,q), p=0,1,,pmax e q=0,1,,qmax

lopzione new specifica se la funzione deve aprire una nuova finestra grafica.
ident$hqc

fornisce la matrice con i valori del criterio di Hannan e Quinn


per i modelli ARMA(p,q), p=0,1,,pmax e q=0,1,,qmax

6. Identificazione e Stima di un modello ARIMA

La stima di un modello lineare autoregressivo pu avvenire tramite il comando

Per l'identificazione automatica di un modello ARIMA si pu utilizzare il comando

ar.ols.

best.arima appartenente alla libreria forecast.

fit.x=ar.ols(x,aic=TRUE,order.max=10,intercept=T)

best.arima(x,d=1,D=0,max.p=5,max.q=5,

max.P=2,

max.Q=2,

max.order=5, stationary=F, ic=c(aic,aicc,bic)

Questo comando adatta alla serie x un modello AR(p) stimando i parametri con le
equazioni di Yule-Walker e selezionandone l'ordine mediante il criterio AIC
nellinsieme dei modelli AR di ordine p (0,1,2,,10)

d = ordine della differenza prima


D = ordine della differenza stagionale

Se invece si pone aic=FALSE ad esempio

max.p = massimo ritardo di p

fit.x=ar.ols(x,aic=FALSE,order.max=3,intercept=F)

max.q = massimo ritardo di q


max.P = massimo ritardo di P
max.Q = massimo ritardo di Q

La stima avviene come sopra, ma ora viene stimato solo un modello di ordine 3, in
questo caso senza costante.

max.order = massimo valore di p+q+P+Q


ic = criterio di informazione da usare per la selezione del modello

I valori del comando ar sono


fit.x$ar

Unaltra possibilit quella di utilizzare il comando automatic appartenente alla

fornisce le stime dei parametri

fit.x$asy.var.coef fornisce, basandosi sulla teoria asintotica, la matrice di


varianza-covarianza, dei coefficienti stimati

libreria sse
fit.x$order

fornisce informazioni sullordine del modello

pmax e qmax sono i valori massimi degli ordini p e q per i quali si vuole calcoalre il

fit.x$resid

fornisce la serie dei residui del modello stimato

modello ARMA(p,q)

fit.x$aic

fornisce informazioni sui valori di AIC

ident=automatic(x,pmax,qmax,c)

c un parametro richiesto dal criterio di Hannan e Quinn

ident$aic

fornisce la matrice con i valori del criterio di Akaike (calcolato

F. Lisi - I principali comandi di R per lanalisi delle serie storiche (versione 3.0)

11/14

F. Lisi - I principali comandi di R per lanalisi delle serie storiche (versione 3.0)

Una procedura preferibile viene fornita dal comando arima, il quale stima un

fit.x$aic

12/14

fornisce il valore di AIC corrispondente alla log-verosimiglianza

modello ARIMA(p,d,q) mediante la verosimiglianza

fit.x$code

1 o 2 se OK (maggiori dettagli sullhelp della funzione nlm)

fit.x=arima(x,order=c(p,d,q), include.mean=T, xreg=NULL,

fit.x$resid

fornisce i residui del modello stimato

fixed=NULL)

fit.x$sigma2 fornisce la stimata MV della varianza dellerrore

se

include.mean=T

viene

stimato

un

modello

con

costante,

se

include.mean=F viene stimato un modello senza costante.

7. Verifica della bont del modello stimato

xreg= vettore di regressori esterni (opzionale)


fixed= vettore della stessa lunghezza del numero totale di parametri contente
eventuali vincoli sui parametri. Se fornito vengono stimati solo i parametri
per cui fixed=NA, mentre gli altri parametri vengono posti pari al valore
indicato.

Stazionariet ed invertibilit: per il calcolo del modulo delle radici di un polinomio


si usa il comando polyroot. Ad es. per trovare le radici di 1-0.5x-0.3x2=0
polyroot(c(1,-0.5,-0.3))

Per modelli integrati (d>0) la costante non viene mai stimata.

Per determinarne il modulo


Mod(polyroot(c(1,-0.5,-0.3)))

Si noti che diverse specificazioni dei mofelli ARMA hanno differenti segni per i
coefficienti AR e/o MA. La definizione usata da R la seguente
X[t]=a[1]X[t-1]++a[p]X[t-p]+e[t]+ b[1]e[t-1]+...+ b[q]e[t-q]

Analisi dei residui


tsdiag(fit.x, gof.lag=20)
gof.lag massimo numero di ritardi per test portmanteau (corrisponde a K)

La funzione restituisce i grafici di alcune diagnostiche

Per la stima di un modello stagionale SARIMA(p,d,q)x(P,D,Q) si usa il comando


arima con l'opzione seasonal
fit.x=arima(x,order=c(p,d,q),seasonal=list(order=c(P,D,Q

Si possono confrontare modelli alternativi facendo ricorso ai criteri di Akaike, di


Schwartz, di Hannan e Quinn, etc..

),period=12),include.mean=T)

x.modello=arima(x,order=c(p,0,q), include.mean=T)
verosim=x.modello$loglik

varianza=x.modello$sigma2

I valori del comando arima sono:

aic2=(-2*verosim)+2*(p+q)
fit.x

primo riassunto dei risultati

fit.x$coef

fornisce i valori delle stime dei coefficienti

aic=log(varianza)+(2*(p+q))/n
scc=log(varianza)+(p+q)*(log(n)/n)

fit.x$var.coef fornisce la varianza degli stimatori dei coefficienti


fit.x$arma

hqc=log(varianza)+(p+q)*c*log(log(n))/n

fornisce informazioni sugli ordini del modello

fit.x$loglik fornisce il valore della log-verosimiglianza massimizzata

Per effettuare il test di Box-Ljung si usa il comando Ljung.Box appartenente alla

F. Lisi - I principali comandi di R per lanalisi delle serie storiche (versione 3.0)

13/14

F. Lisi - I principali comandi di R per lanalisi delle serie storiche (versione 3.0)

14/14

libreria sse
bt=Ljung.Box(x, lag=20, par=2)

pt$statistics

valore della statistica test

par vale 0 se il test viene effettuato sulla serie originale e p+q se viene applicato ai

pt$p.value

p-value

residui di un modello ARMA(p,q)

bt$statistic valore della statistica

Per effettuare il test BDS di indipendenza si usa il comando bds.test facente parte

bt$parameter

g.d.l. della distribuzione chi quadro appropriato

della libreria tseries

bt$p.value

p-value

bdsx=bds.test(x,d=4,eps=c(eps1,eps2,eps3,))

Il comando Ljung.Box() senza alcun assegnamento produce un riassunto

indica il massimo valore di d per il quale il test viene calcolato. Ad es. d=4
significa che il test viene calcolato per d=2,3,4

contenente il valore della statistica test, i g.d.l. e il p-value per il particolare ritardo

eps vettore numerico di valori per epsilon. Il test viene calcolato per ogni valore di

considerato.

d e per ogni valore di epsilon. Generalmente epsilon viene espresso come

multiplo della deviazione standard dei dati, ad es. eps1=0.5*sd(x).

Per effettuare il test di Jarque e Bera si usa il comando jarque.bera.test facente


parte della libreria tseries
jb=jarque.bera.test(x)

bdsx$statistics

matrice dei valori della statistica test corrispondenti a


ciascuna coppia (d,epsilon)

jb$statistics

valore della statistica test

jb$parameter

g.d.l. della distribuzione chi quadro

jb$p.value

p-value

Il comando jarque.bera.test(x) senza alcun assegnamento produce un


output simile a quello descritto per il test di Box.

bdsx$p.value

matrice dei valori dei p-value corrispondenti alla statistica


test per ogni coppia (d,epsilon)

8. Previsione

La previsione k passi in avanti si ottiene usando la funzione predict


prev=predict(fit.x, n.ahead=k)

Per effettuare il test di Pierce sulla stagionalit residua si usa il comando pierce.test
facente parte della libreria sse
pt=pierce.test(x,m,s,para)

I suoi valori sono


prev$pre fornisce le previsioni puntuali

numero di ritardi stagionali da considerare

periodo stagionale

para numero di parametri stimati. Se il test viene fatto sulla serie originale para=0,
altrimenti corrisponde all'ordine del modello ARMA.

prev$se fornisce gli errori standard delle previsioni puntuali