polySeriesChros PDF
polySeriesChros PDF
polySeriesChros PDF
R. S. Stoica
Université Lille 1
Laboratoire Paul Painlevé
59655 Villeneuve d’Ascq Cedex, France
Septembre, 2009
2
1 Introduction
Les exercices de ce recueil ont servi pendant trois ans, comme support pour
les heures des travaux dirigés et des travaux pratiques qui complétaient le
cours “Prévisions dans les séries chronologiques”, donné aux étudiants en
dernière année de master pro par Marie-Claude Viano, puis par Thomas
Simon. Marie-Claude Viano a beaucoup amélioré la qualité des énoncés du
point de vue de la rigueur mathématique, de la logique et de l’orthographe.
Je tiens la remercier pour tous ses efforts.
Le logiciel utilisé pendant les séances des travaux pratiques a été R, disponible
à partir du site http://www.r-project.org/. Les données réelles sur lesquel-
les nous avons travaillé sont accessibles à partir du site
http://www.statsci.org/.
Pour terminer, je voudrais remercier également tous les collègues qui met-
tent en libre accès sur leurs pages Web leurs ressources pédagogiques.
3
P
Exercice 6. L’opération qui à la suite un associe la suite vn = qj=−q aj un−j
s’appelle filtrage. Soit le filtre (moyenne mobile) donné par les coefficients
aj = (2q + 1)−1 , −q ≤ j ≤ q. P
a) Si mn = c0 + c1 n, montrez que qj=−q aj mn−j = mn .
b) Si Zn , n = 0, ±1, ±2, . . . sont des v.a. indépendantesP de moyenne nulle
2 q
et variance σ , montrez que la moyenne mobile An = j=−q aj Zn−j est
σ2
“petite” pour q grand, c’est à dire E[An ] = 0 et V ar[An ] = 2q+1 .
Exercice 8.
a) Calculez la fonction d’auto-covariance de la série temporelle Xt = Zt +
0.3Zt−1 − 0.4Zt−2 avec {Zt } ∼ BB(0, 1).
b) Calculez la fonction d’auto-covariance de la série temporelle Yt = Wt −
1.2Wt−1 − 1.6Wt−2 avec {Wt } ∼ BB(0, 0.25).
c) Comparez les résultats obtenus.
forme aXn + b est obtenu pour les valeurs a = ρ(h) et b = µ(1 − ρ(h)).
Exercice 13. Soit {Yt } la série temporelle formée par l’addition d’un modèle
AR(1) et d’un bruit
Yt = Xt + Wt
où Xt = φXt−1 + Zt , {Zt } ∼ BB(0, σz2 ), |φ| < 1 et Xs et Zt non-corrélées
pour s < t. Nous avons également {Wt } ∼ BB(0, σw 2 ) et E[W Z ] = 0 pour
s t
tous les s, t.
a) Montrez que {Yt } est stationnaire et calculez sa fonction de covariance.
b) Montrez que la série Ut = Yt − φYt−1 peut être répresentée par un modèle
M A(1).
c) Est-ce que d’après le point précédent nous pouvons dire que {Yt } est un
modèle ARM A(1, 1) ? Dans le cas affirmatif, trouvez ses paramètres en
2 = 0.25 et σ 2 = 1.
sachant φ = 0.5, σw z
Exercice 14. Est-ce que les modèles ARMA considérés sont bien définis ?
a) Xt + 0.2Xt−1 − 0.48Xt−2 = Zt
b) Xt + 1.9Xt−1 + 0.88Xt−2 = Zt + 0.2Zt−1 + 0.7Zt−2
c) Xt + 0.6Xt−1 = Zt + 1.2Zt−1
d) Xt + 1.8Xt−1 + 0.81Xt−2 = Zt
e) Xt + 1.6Xt−1 = Zt − 0.4Zt−1 + 0.04Zt−2
Ici {Zt } ∼ BB(0, σ 2 ).
Exercice 18. Soit {Xt }, t = 0, ±1, ±2, . . . une série stationnaire définie par
Xt = φ1 Xt−1 + . . . + φp Xt−p + Zt
avec {Zt } ∼ BB(0, σ 2 ) et E[Zt Xs ] = 0 pour chaque s < t.
a) Montrez que le meilleur prédicteur linéaire de Xn+1 en fonction de
1, X1 , . . . , Xn est
bn+1 = φ1 Xn + . . . + φp Xn+1−p
X
(on suppose n > p).
bn+1 ?
b) Quelle est l’erreur quadratique moyenne de X
Indication : help(read.table)
Pour lire les données vous pouvez utiliser :
rw=read.table(”redwine.dat”,header=FALSE)
data=rw[,1]
Exercice 6. Soit {Zt } ∼ N (0, 1002 ) et les séries temporelles suivantes définies
comme suit :
(1)
Yt = 1 + 0.5t + Zt , (1)
(2) 2πt
Yt = 250 sin + Zt , (2)
50
et
(3) 2πt
Yt = 1 + 0.5t + 250 sin + Zt . (3)
50
a) Simulez les trois séries pour t ∈ [0, 999].
b) Effectuez un filtrage (moyenne mobile) des trois séries avec et sans bruit.
Les coéfficients du filtre sont données par le code R suivant :
d=50
a=c(0.5,rep(1,(d-1)),0.5)/d
Pour filtrer une série temporelle Yt , la commande R filter peut être utilisée
comme suit :
y.f=filter(y,a,circular=TRUE)
c) Comparez les résultats de vos simulations avec les résultats théoriques
obtenus pendant le TD.
9
Exercice 7.
a) Simuler la série Xt = A cos(ωt) + B sin(ωt) avec t = 0, 1, . . . , 199, ω =
2π/10 et A et B deux variables aléatoires indépendantes de moyenne nulle
et variance unité ;
b) Analyser la fonction de covariance empirique pour plusieurs réalisations
de la série.
a) Xt + 0.2Xt−1 − 0.48Xt−2 = Zt
b) Xt = Zt + 0.3Zt−1 − 0.4Zt−2
c) Xt − 0.5Xt−1 = Zt + 0.4Zt−1
avec {Zt } ∼ BB(0, 1). Pour chacun de ces modèles vous devez faire :
- simuler le modèle
- calculer/afficher sa fonction de corrélation
- calculer/afficher sa fonction de corrélation partielle
- refaire ces calculs/affichages pour la réalisation du modèle
- comparer les résultats théoriques avec les résultats obtenus par simulation
en faisant évoluer le nombre de simulations. Qu’est-ce que vous observez
de particulier par rapport à la “forme” de ces fonctions pour chacun de
ces modèles ? Est-ce que l’on peut mettre en relation les paramètres des
modèles et les courbes observées ?
Exercice 13.
a) Étudier la fonction de corrélation et la corrélation partielle du modèle
Xt = 0.8Xt−3 + Zt , avec {Zt } ∼ BB(0, 1).
b) Estimer les paramètres de ce processus sur une simulation de longueur n.
Regarder les résultats obtenus en fonction de n. Les résultats obtenus sont
les coefficients du modèle et les résidus ...
c) Prédire les 10 premières valeurs à partir de n en utilisant le modèle obtenu
au point b). Tracer les intervalles de confiance. Étudier les erreurs de
prédiction. Comparer avec les données ... A-t-on intérêt de prédire avec un
horizon grand ?
11
Exercice 15.
a) Lire la série “oshorts.dat”. Prédire les 7 premières valeurs à partir de
n = 50.
b) Lire la série “sunspots.dat”. Prédire les 10 premières valeurs à partir de
n = 100.
Dans les deux cas il faut justifier le choix du modèle et analyser les résultats.
#
# Exercice 1
#
x11()
par(mfrow=c(2,1))
eps1=rnorm(1000,0,1)
plot(eps1,type="l")
acf(eps1)
x11()
par(mfrow=c(3,1))
eps2=rnorm(1000,1,2)
plot(eps2,type="l")
acf(eps2,lag=50)
acf(eps2,lag=50,type="covariance")
#
# Exercice 2
#
t=c(0:999)
eps=rnorm(length(t),0,100)
a=0.5
b=1.0
m1=a*t+b
y1=m1+eps
x11()
par(mfrow=c(3,1))
plot(t,m1,type="l")
plot(t,y1,type="l")
acf(y1,lag=300)
c=0.1
s50=250*sin(2*pi*t/50)
13
y2=s50+eps
x11()
par(mfrow=c(3,1))
plot(t,s50,type="l")
plot(t,y2,type="l")
acf(y2,lag=300)
m1s50=m1+s50
y3=m1s50+eps
x11()
par(mfrow=c(3,1))
plot(t,m1s50,type="l")
plot(t,y3,type="l")
acf(y3,lag=300)
#
# Exercice 3
#
sign.test = function(x,alpha=0.05)
{
# taille echantillon
n = length(x)
# parametres loi
ms = (n-1)/2
sds = sqrt((n+1)/12)
# construction test
S = sum(x[2:n]>x[1:(n-1)])
S1 = (S - ms)/sds
# retourner la p-value
list(p.value=pnorm(S1),int1 = I1,int2 = I2)
14
#
# Exercice 4
#
# travail sur le bruit
res=diff(eps,25)
x11()
par(mfrow=c(2,1))
plot(res,type="l")
acf(res,lag=300)
# travail sur y1
res=diff(y1,1)
x11()
par(mfrow=c(2,1))
plot(res,type="l")
acf(res,lag=300)
# travail sur y2
res=diff(y2,50)
x11()
par(mfrow=c(2,1))
plot(res,type="l")
acf(res,lag=300)
# travail sur y3
res1=diff(y3,50)
res=diff(res1,1)
x11()
par(mfrow=c(2,1))
plot(res,type="l")
acf(res,lag=300)
#
# Exercice 5
#
rw=read.table("../../../DATA/redwine.dat",header=FALSE)
data=rw[,1]
15
x11()
par(mfrow=c(2,1))
plot(data,type="l")
acf(data,lag=100)
res=diff(data,12)
x11()
par(mfrow=c(2,1))
plot(res,type="l")
acf(res,lag=300)
#
# Exercice 6
#
# produire les donnee simulees
t=c(0:999)
eps=rnorm(length(t),0,100)
a=0.5
b=1.0
m1=a*t+b
y1=m1+eps
s50=250*sin(2*pi*t/50)
y2=s50+eps
m1s50=m1+s50
y3=m1s50+eps
x11()
par(mfrow=c(3,3))
plot(t,m1,type="l")
plot(t,y1,type="l")
acf(y1,lag=300)
plot(t,s50,type="l")
plot(t,y2,type="l")
acf(y2,lag=300)
16
plot(t,m1s50,type="l")
plot(t,y3,type="l")
acf(y3,lag=300)
x11()
par(mfrow=c(2,3))
plot(t,eps,type="l")
acf(eps,lag=300,type="covariance")
acf(eps,lag=300)
plot(t,eps.f,type="l")
acf(eps.f,lag=300,type="covariance")
acf(eps.f,lag=300)
# travail sur m1 et y1
m1.f=filter(m1,a,circular=TRUE)
y1.f=filter(y1,a,circular=TRUE)
x11()
par(mfrow=c(4,3))
plot(m1,type="l")
acf(m1,lag=300,type="covariance")
acf(m1,lag=300)
plot(m1.f,type="l")
acf(m1.f,lag=300,type="covariance")
acf(m1.f,lag=300)
17
plot(y1,type="l")
acf(y1,lag=300,type="covariance")
acf(y1,lag=300)
plot(y1.f,type="l")
acf(y1.f,lag=300,type="covariance")
acf(y1.f,lag=300)
x11()
par(mfrow=c(4,3))
plot(s50,type="l")
acf(s50,lag=300,type="covariance")
acf(s50,lag=300)
plot(s50.f,type="l")
acf(s50.f,lag=300,type="covariance")
acf(s50.f,lag=300)
plot(y2,type="l")
acf(y2,lag=300,type="covariance")
acf(y2,lag=300)
plot(y2.f,type="l")
acf(y2.f,lag=300,type="covariance")
acf(y2.f,lag=300)
x11()
par(mfrow=c(4,3))
plot(m1s50,type="l")
acf(m1s50,lag=300,type="covariance")
acf(m1s50,lag=300)
plot(m1s50.f,type="l")
acf(m1s50.f,lag=300,type="covariance")
18
acf(m1s50.f,lag=300)
plot(y3,type="l")
acf(y3,lag=300,type="covariance")
acf(y3,lag=300)
plot(y3.f,type="l")
acf(y3.f,lag=300,type="covariance")
acf(y3.f,lag=300)
#
# Exercice 7
#
t=c(0:199)
a=rnorm(1,0,1)
b=rnorm(1,0,1)
x=a*cos((2*pi/10)*t)+b*sin((2*pi/10)*t)
x11()
par(mfrow=c(2,1))
plot(x,type="l")
acf(x,lag=200,type="covariance")
#
# Exercice 8
#
z=rnorm(1000,0,1)
x=filter(z,filter=c(1,0.3,-0.4),method="convolution",circular=TRUE)
x11()
par(mfrow=c(3,1))
plot(x,type="l")
sigma_x=acf(x,lag=10,type="covariance")
sigma_x[0:3]
rho_x=acf(x,lag=10)
rho_x[0:3]
w=rnorm(1000,0,0.5)
y=filter(w,filter=c(1,-1.2,-1.6),method="convolution",circular=TRUE)
x11()
par(mfrow=c(3,1))
plot(y,type="l")
sigma_y=acf(y,lag=10,type="covariance")
19
sigma_y[0:3]
rho_y=acf(y,lag=10)
rho_y[0:3]
#
# Exercice 9
#
ha=c(0:99)
sha=rep(1,length(ha))
xa=rnorm(1,0,1)*rep(1,1000)
x11()
par(mfrow=c(2,1))
acf(xa,lag=100,type="covariance")
plot(ha,sha,col="blue")
hb=c(0:99)
shb=rep(c(1,-1),length(hb)/2)
xb=rnorm(1,0,1)*rep(c(1,-1),500)
x11()
par(mfrow=c(2,1))
acf(xb,lag=100,type="covariance")
plot(hb,shb,col="blue")
hc=c(0:199)
shc=1+cos(0.5*pi*hc)+cos(0.25*pi*hc)
a=rnorm(1,0,1)
b=rnorm(1,0,1)
c=rnorm(1,0,1)
z=rnorm(1,0,1)
t=c(0:999)
xc=z*rep(1,1000)+a*cos((0.5*pi)*t)+b*sin((0.5*pi)*t)
+c*cos((0.25*pi)*t)+d*sin((0.25*pi)*t)
x11()
par(mfrow=c(2,1))
acf(xc,lag=200,type="covariance")
plot(hc,shc,col="blue",type="l")
hd=c(0:9)
shd=c(c(1,0.4),rep(0,8))
theta1=2
20
zd1=rnorm(1000,0,sqrt(0.2))
yd1=filter(zd1,filter=c(1,theta1),method="convolution",circular=TRUE)
theta2=0.5
zd2=rnorm(1000,0,sqrt(0.8))
yd2=filter(zd2,filter=c(1,theta2),method="convolution",circular=TRUE)
par(mfrow=c(3,1))
acf(yd1,lag=10,type="covariance")
acf(yd2,lag=10,type="covariance")
plot(hd,shd,col="blue")
#
# Exercice 10
#
M=1000
phi=0.9
z=rnorm(M,0,1)
x0=0.2
x=c(x0,rep(0,M-1))
for(i in 2 : M)
{
x[i]=phi*x[i-1]+z[i]
}
x11()
par(mfrow=c(2,1))
plot(x,col="blue",type="l")
acf(x,lag=20,type="covariance")
#
# Exercice 11
#
acf=ARMAacf(ar=c(-0.2,0.48),ma=0,25)
pacf=ARMAacf(ar=c(-0.2,0.48),ma=0,25,pacf=T)
ar2=arima.sim(n=100,list(order=c(2,0,0,),ar=c(-0.2,0.48)),sd=1)
x11()
par(mfrow=c(4,1))
plot(acf,type="h",xlab="Lag")
abline(h=0)
21
plot(pacf,type="h",xlab="Lag")
abline(h=0)
acf(ar2,lag=25)
pacf(ar2,lag=25)
acf=ARMAacf(ar=0,ma=c(0.3,-0.4),25)
pacf=ARMAacf(ar=0,ma=c(0.3,-0.4),25,pacf=T)
ma2=arima.sim(n=1000,list(order=c(0,0,2,),ma=c(0.3,-0.4)),sd=1)
x11()
par(mfrow=c(4,1))
plot(acf,type="h",xlab="Lag")
abline(h=0)
plot(pacf,type="h",xlab="Lag")
abline(h=0)
acf(ma2,lag=25)
pacf(ma2,lag=25)
acf=ARMAacf(ar=0.5,ma=0.4,25)
pacf=ARMAacf(ar=0.5,ma=0.4,25,pacf=T)
arma11=arima.sim(n=200,list(order=c(1,0,1),ar=0.5,ma=0.4),sd=1)
x11()
par(mfrow=c(4,1))
plot(acf,type="h",xlab="Lag")
abline(h=0)
plot(pacf,type="h",xlab="Lag")
abline(h=0)
acf(arma11,lag=25)
pacf(arma11,lag=25)
#
# Exercice 12
#
acf=ARMAacf(ar=0.5,ma=0,25)
pacf=ARMAacf(ar=0.5,ma=0,25,pacf=T)
x11()
par(mfrow=c(3,1))
plot(acf,type="h",xlab="Lag")
abline(h=0)
plot(pacf,type="h",xlab="Lag")
abline(h=0)
22
x=arima.sim(n=1000,list(order=c(1,0,0),ar=0.5),sd=1)
w=rnorm(1000,0,1)
y=x+w
x11()
par(mfrow=c(3,1))
plot(y,type="l",col="blue")
acf(y,lag=25)
pacf(y,lag=25)
# differences ...
y2=y[2:1000]
y1=y[1:999]
u1=y2-y1
x11()
par(mfrow=c(3,1))
plot(u1,type="l",col="blue")
acf(u1,lag=25)
pacf(u1,lag=25)
acf=ARMAacf(ar=0.5,ma=-0.1,25)
pacf=ARMAacf(ar=0.5,ma=-0.1,25,pacf=T)
y3=arima.sim(n=1000,list(order=c(1,0,1),ar=0.5,ma=-0.1),sd=sqrt(1.25))
x11()
par(mfrow=c(2,2))
plot(acf,type="h",xlab="Lag")
23
abline(h=0)
plot(pacf,type="h",xlab="Lag")
abline(h=0)
acf(y3,lag=25)
pacf(y3,lag=25)
#
# Exercice 13
#
acf=ARMAacf(ar=c(0,0,0.8),ma=0,25)
pacf=ARMAacf(ar=c(0,0,0.8),ma=0,25,pacf=T)
ar3=arima.sim(n=1000,list(order=c(3,0,0),ar=c(0.0,0.0,0.8)),sd=1)
x11()
par(mfrow=c(2,2))
plot(acf,type="h",xlab="Lag")
abline(h=0)
plot(pacf,type="h",xlab="Lag")
abline(h=0)
acf(ar3,lag=25)
pacf(ar3,lag=25)
y=ar3[1:100]
estim=arima(y,order=c(3,0,0))
estim$coef
x11()
par(mfrow=c(2,1))
plot(estim$resid,type="l")
acf(estim$resid,lag=50)
p=predict(estim,n.ahead=50)
x11()
plot(y,type="o",col="green",xlim=c(0,120))
lines(p$pred,type="o",col="red")
lines(p$pred+1.96*p$se,col="blue",lty="dashed")
lines(p$pred-1.96*p$se,col="blue",lty="dashed")
#
# Exercice 14
#
24
acf=ARMAacf(ar=c(1,-0.24),ma=c(0.4,0.2,0.1),25)
pacf=ARMAacf(ar=c(1,-0.24),ma=c(0.4,0.2,0.1),25,pacf=T)
arma23=arima.sim(n=1000,list(order=c(2,0,3),ar=c(1,-0.24),
ma=c(0.4,0.2,0.1)),sd=1)
x11()
par(mfrow=c(2,2))
plot(acf,type="h",xlab="Lag")
abline(h=0)
plot(pacf,type="h",xlab="Lag")
abline(h=0)
acf(arma23,lag=25)
pacf(arma23,lag=25)
y=arma23[1:940]
estim=arima(y[1:900],order=c(2,0,3))
estim$coef
x11()
par(mfrow=c(2,1))
plot(estim$resid,type="l")
acf(estim$resid,lag=50)
p=predict(estim,n.ahead=20)
x11()
plot(y,type="o",col="green",xlim=c(880,930))
lines(p$pred,type="o",col="red")
lines(p$pred+1.96*p$se,col="blue",lty="dashed")
lines(p$pred-1.96*p$se,col="blue",lty="dashed")
#
# Exercice 15
#
# oshorts.dat
rw=read.table("../DATA TP/oshorts.dat",header=FALSE)
data=rw[,1]
y=data[1:50]
x11()
par(mfrow=c(3,1))
plot(y,type="o")
25
abline(h=0)
acf(y,lag=25)
pacf(y,lag=25)
estim=arima(y,order=c(0,0,1))
estim$coef
x11()
par(mfrow=c(2,1))
plot(estim$resid,type="l")
acf(estim$resid,lag=50)
p=predict(estim,n.ahead=7)
x11()
plot(data,type="o",col="green",xlim=c(1,60))
lines(p$pred,type="o",col="red")
lines(p$pred+1.96*p$se,col="blue",lty="dashed")
lines(p$pred-1.96*p$se,col="blue",lty="dashed")
# sunspots.dat
rw=read.table("../DATA TP/sunspots.dat",header=FALSE)
data=rw[,1]
data=data-mean(data)
y=data[1:100]
x11()
par(mfrow=c(3,1))
plot(y,type="o")
abline(h=0)
acf(y,lag=25)
pacf(y,lag=25)
estim=arima(y,order=c(2,0,0))
estim$coef
x11()
par(mfrow=c(2,1))
plot(estim$resid,type="l")
acf(estim$resid,lag=50)
26
p=predict(estim,n.ahead=8)
x11()
plot(data[1:120],type="o",col="green",xlim=c(1,120))
lines(p$pred,type="o",col="red")
lines(p$pred+1.96*p$se,col="blue",lty="dashed")
lines(p$pred-1.96*p$se,col="blue",lty="dashed")
#
# Exercice 16
#
t=c(0:200)
eps=rnorm(length(t),0,100)
a=0.5
b=1.0
m1=a*t+b
y1=m1+eps
x1=diff(y1,1)
x11()
par(mfrow=c(4,1))
plot(y1,type="l",col="blue")
plot(x1,type="l",col="blue")
acf(x1,lag=10)
pacf(x1,lag=10)
sarima(y1,0,1,1)
sarima.for(y1,100,0,1,1)
#
# Exercice 17
#
s5=250*sin(2*pi*t/5)
y2=s5+eps
x2=diff(y2,5)
x11()
par(mfrow=c(3,1))
plot(y2,type="l",col="blue")
27
acf(y2,lag=40)
pacf(y2,lag=40)
x11()
par(mfrow=c(3,1))
plot(x2,type="l",col="blue")
acf(x2,lag=40)
pacf(x2,lag=40)
sarima(y2,0,0,5,0,1,0,5)
sarima.for(y2,100,0,0,5,0,1,0,5)
#
# Exercice 18
#
eps=rnorm(length(t),0,4)
s5=10*sin(2*pi*t/5)
y3=m1+s5+eps
x3=diff(y3,1)
x31=diff(x3,5)
x11()
par(mfrow=c(3,1))
plot(y3,type="l",col="blue")
acf(y3,lag=40)
pacf(y3,lag=40)
x11()
par(mfrow=c(3,1))
plot(x3,type="l",col="blue")
acf(x3,lag=40)
pacf(x3,lag=40)
x11()
par(mfrow=c(3,1))
plot(x31,type="l",col="blue")
acf(x31,lag=40)
pacf(x31,lag=40)
28
sarima(y3,0,1,5,0,1,0,5)
sarima.for(y3,100,0,1,5,0,1,0,5)
#
# Exercice 19
#
rw=read.table("../../../DATA/airpass.dat",header=FALSE)
data=rw[,1]
x11()
par(mfrow=c(3,1))
plot(data,type="l",col="blue")
acf(data,lag=40)
pacf(data,lag=40)
y=log(data)
x11()
par(mfrow=c(3,1))
plot(y,type="l",col="blue")
acf(y,lag=40)
pacf(y,lag=40)
dy1=diff(y,1)
dy112=diff(dy1,12)
x11()
par(mfrow=c(3,1))
plot(dy1,type="l",col="blue")
acf(dy1,lag=40)
pacf(dy1,lag=40)
x11()
par(mfrow=c(3,1))
plot(dy112,type="l",col="blue")
acf(dy112,lag=40)
pacf(dy112,lag=40)
sarima(y,12,1,0,0,1,0,12)
sarima.for(y,100,12,1,0,0,1,0,12)
29
#
# R code by R.H. Shumway and D.S. Stoffer
#
sarima.for=function(xdata,nahead,p,d,q,P=0,D=0,Q=0,S=-1){
data=as.ts(xdata)
constant=1:length(data)
xmean=matrix(1,length(data),1)
if (d>0)
fitit=arima(data, order=c(p,d,q), seasonal=list(order=c(P,D,Q), period=S),
xreg=constant,include.mean=F)
if (d<.00001)
fitit=arima(data, order=c(p,d,q), seasonal=list(order=c(P,D,Q), period=S),
xreg=xmean,include.mean=F)
if (d+D>1)
fitit=arima(data, order=c(p,d,q), seasonal=list(order=c(P,D,Q), period=S))
#
if (d>0)
nureg=(length(data)+1):(length(data)+nahead)
if (d<.00001)
nureg=matrix(1,length(nahead),1)
if (d+D>1)
nureg=NULL
fore=predict(fitit, n.ahead=nahead, newxreg=nureg)
#
# graph:
#
U = fore$pred + 2*fore$se
L = fore$pred - 2*fore$se
minx=min(data,L)
maxx=max(data,U)
x11()
ts.plot(data,fore$pred,col=1:2, ylim=c(minx,maxx),
ylab=deparse(substitute(xdata)))
lines(fore$pred, col="red", type="p")
lines(U, col="blue", lty="dashed")
lines(L, col="blue", lty="dashed")
#
return(fore)
30
#
# R code by R.H. Shumway and D.S. Stoffer
#
sarima=function(data,p,d,q,P=0,D=0,Q=0,S=-1){
n=length(data)
constant=1:n
xmean=matrix(1,n,1)
if (d>0)
fitit=arima(data, order=c(p,d,q), seasonal=list(order=c(P,D,Q), period=S),
xreg=constant,include.mean=F)
if (d<.00001)
fitit=arima(data, order=c(p,d,q), seasonal=list(order=c(P,D,Q), period=S),
xreg=xmean,include.mean=F)
if (d+D>1)
fitit=arima(data, order=c(p,d,q), seasonal=list(order=c(P,D,Q), period=S))
if (S < 0) goof=20 else goof=3*S
x11()
par(mfrow=c(2,1))
plot(fitit$resid,type="l",main="Standardized residuals",ylab=" ")
acf(fitit$resid,lag=50,main="ACF of residuals", ylab=" ")
#tsdiag(fitit,gof.lag=goof)
#k=length(fitit$coef)
#BIC=log(fitit$sigma2)+(k*log(n)/n)
#AICc=log(fitit$sigma2)+((n+k)/(n-k-2))
#AIC=log(fitit$sigma2)+((n+2*k)/n)
#list(fit=fitit, AIC=AIC, AICc=AICc, BIC=BIC)
list(fit=fitit)
}
31
References
[1] P. J. Brockwell and R. A. Davis. Introduction to time series and fore-
casting. Springer-Verlag, New-York, 1999.
[3] R. H. Shumway and D. S. Stoffer. Time series analysis and its application
with R examples. Springer Texts in Statistics, 2006.