library(Quandl)
## Loading required package: xts
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(zoo)
library(tseries)
library(forecast)
## Loading required package: timeDate
## This is forecast 6.2
library(gdata)
## gdata: Unable to locate valid perl interpreter
## gdata:
## gdata: read.xls() will be unable to read Excel XLS and XLSX files
## gdata: unless the 'perl=' argument is used to specify the location
## gdata: of a valid perl intrpreter.
## gdata:
## gdata: (To avoid display of this message in the future, please
## gdata: ensure perl is installed and available on the executable
## gdata: search path.)
## gdata: Unable to load perl libaries needed by read.xls()
## gdata: to support 'XLX' (Excel 97-2004) files.
##
## gdata: Unable to load perl libaries needed by read.xls()
## gdata: to support 'XLSX' (Excel 2007+) files.
##
## gdata: Run the function 'installXLSXsupport()'
## gdata: to automatically download and install the perl
## gdata: libaries needed to support Excel XLS and XLSX formats.
##
## Attaching package: 'gdata'
## The following objects are masked from 'package:xts':
##
## first, last
## The following object is masked from 'package:stats':
##
## nobs
## The following object is masked from 'package:utils':
##
## object.size
library(KFAS)
## Warning: package 'KFAS' was built under R version 3.2.5
library(dlmodeler)
## Warning: package 'dlmodeler' was built under R version 3.2.5
cpi <-Quandl("FRED/CPIAUCNS",api_key= "5NyVfHfxdScCYsskDP59", type = "zoo")
lcpi<- log(cpi)
plot(lcpi, xlab="Years", ylab="",main="CPI")
y<-lcpi
yt <-window(cpi,start="Jan 1955", end = "Dec 2016")
lyt <- log(yt)
dlyt <- diff(lyt)
plot(dlyt, xlab="Years", ylab="",main=" Consumer Index from 1955 to 2013")
T <- length(dlyt)
dlyt.model <- SSModel(dlyt~SSMtrend(degree=1,Q=NA)+SSMseasonal(period=12,sea.type="dummy",Q=NA), H=NA)
## Warning in `dim<-.zoo`(`*tmp*`, value = length(x)): setting this dimension
## may lead to an invalid zoo object
## Warning in `dim<-.zoo`(`*tmp*`, value = c(735, 1)): setting this dimension
## may lead to an invalid zoo object
dlyt.model$Z
## , , 1
##
## level sea_dummy1 sea_dummy2 sea_dummy3 sea_dummy4 sea_dummy5
## [1,] 1 1 0 0 0 0
## sea_dummy6 sea_dummy7 sea_dummy8 sea_dummy9 sea_dummy10 sea_dummy11
## [1,] 0 0 0 0 0 0
dlyt.model$Q
## , , 1
##
## [,1] [,2]
## [1,] NA 0
## [2,] 0 NA
dlyt.model$H
## , , 1
##
## [,1]
## [1,] NA
dlyt.updatefn <- function(pars, model) {
model$Q[,,1] <- diag(exp(pars[1:2]))
model$H[,,1] <- exp(pars[3])
model
}
dlyt.fit <- fitSSM(dlyt.model, inits=log(c(0.1,0.01,0.001)), updatefn=dlyt.updatefn, method="BFGS")
dlyt.fit$optim.out$par
## [1] -259.75012 -104.64014 -11.36904
dlyt.fit$model$Q
## , , 1
##
## [,1] [,2]
## [1,] 1.55581e-113 0.000000e+00
## [2,] 0.00000e+00 3.592241e-46
dlyt.fit$model$H
## , , 1
##
## [,1]
## [1,] 1.154748e-05
Kalman Filtering:
dlyt.out <- KFS(dlyt.fit$model)
colnames(dlyt.out$alphahat)
## [1] "level" "sea_dummy1" "sea_dummy2" "sea_dummy3" "sea_dummy4"
## [6] "sea_dummy5" "sea_dummy6" "sea_dummy7" "sea_dummy8" "sea_dummy9"
## [11] "sea_dummy10" "sea_dummy11"
KFdlyt<- dlyt.out$a %*% as.vector(dlyt.out$model$Z)
KSdlyt<- dlyt.out$alphahat %*% as.vector(dlyt.out$model$Z)
ilv <- which(colnames(dlyt.out$a)=="level")
ise <- which(colnames(dlyt.out$a)=="se_dummy1")
KSdlyt.CI.lvl <- as.vector(dlyt.out$alphahat[,ilv]) + qnorm(0.90)* sqrt(cbind(dlyt.out$V[ilv,ilv,])) %*% cbind(-1,1)
KSdlyt.CI.sea <- as.vector(dlyt.out$alphahat[,ise]) + qnorm(0.90)* sqrt(cbind(dlyt.out$V[ise,ise,])) %*% cbind(-1,1)
KFdlyt.CI.lvl <- as.vector(dlyt.out$a[-(T+1),ilv]) + qnorm(0.90)* sqrt(cbind(dlyt.out$P[ilv,ilv,-(T+1)])) %*% cbind(-1,1)
KFdlyt.CI.se <- as.vector(dlyt.out$a[-(T+1),ise]) + qnorm(0.90)* sqrt(cbind(dlyt.out$P[ise,ise,-(T+1)])) %*% cbind(-1,1)
plot.ts( cbind(dlyt, dlyt.out$a[-(T+1),ilv], KFdlyt.CI.lvl), col=c("green","yellow","red","blue"), lty=c(1,1,3,3), plot.type="single", xlab="", ylab="", main="Filtered Values (real/actual)" )
h <- 36
dlyt.fcst <- predict(dlyt.out$model, interval="confidence", level=0.9, n.ahead=h)
dlyt.fcst <- ts(dlyt.fcst, start=(index(dlyt)[length(dlyt)]+0.25), frequency=12)
cppi <- Quandl("FRED/CPIAUCNS", api_key="5NyVfHfxdScCYsskDP59", type = "zoo",start_date="1990-01-01", end_date="2016-12-31")
lcppi <- log(cppi)
dy <- diff(lcppi)
lcolor <- c(1,2,2,2)
lwidth <- c(2,2,1,1)
ltypes <- c(1,1,2,2)
plot.ts( cbind(dy, dlyt.fcst), plot.type="single", col=lcolor, lwd=lwidth, lty=ltypes, xlab="", ylab="", main=" Predicting rate of Inflation")
## Warning in cbind(dy, dlyt.fcst): number of rows of result is not a multiple
## of vector length (arg 1)
library("Quandl")
library("tseries")
library("urca")
## Warning: package 'urca' was built under R version 3.2.4
library("KFAS")
y <- datasets::JohnsonJohnson
y.model <- SSModel(y ~ SSMtrend(degree=2, Q=list(NA, NA)) + SSMseasonal(period=4, sea.type="dummy", Q=NA), H=NA)
y.model$T
## , , 1
##
## level slope sea_dummy1 sea_dummy2 sea_dummy3
## level 1 1 0 0 0
## slope 0 1 0 0 0
## sea_dummy1 0 0 -1 -1 -1
## sea_dummy2 0 0 1 0 0
## sea_dummy3 0 0 0 1 0
Updating for MLE:
y.model$R
## , , 1
##
## [,1] [,2] [,3]
## level 1 0 0
## slope 0 1 0
## sea_dummy1 0 0 1
## sea_dummy2 0 0 0
## sea_dummy3 0 0 0
y.model$Z
## , , 1
##
## level slope sea_dummy1 sea_dummy2 sea_dummy3
## [1,] 1 0 1 0 0
y.model$Q
## , , 1
##
## [,1] [,2] [,3]
## [1,] NA 0 0
## [2,] 0 NA 0
## [3,] 0 0 NA
y.model$H
## , , 1
##
## [,1]
## [1,] NA
y.updatefn <- function(pars, model) {
model$Q[,,1] <- diag(exp(pars[1:3]))
model$H[,,1] <- exp(pars[3])
model
}
pars <- log(c(0.1,0.01,0.001))
y.fit <- fitSSM(y.model, inits=pars, updatefn=y.updatefn, method="BFGS")
y.fit$optim.out$par
## [1] -12.081664 -6.964867 -3.297725
y.fit$model$Q
## , , 1
##
## [,1] [,2] [,3]
## [1,] 5.662394e-06 0.0000000000 0.00000000
## [2,] 0.000000e+00 0.0009444887 0.00000000
## [3,] 0.000000e+00 0.0000000000 0.03696716
y.fit$model$H
## , , 1
##
## [,1]
## [1,] 0.03696716
Kalman Filter:
y.out <- KFS(y.fit$model, smoothing=c("state","disturbance"))
colnames(y.out$alphahat)
## [1] "level" "slope" "sea_dummy1" "sea_dummy2" "sea_dummy3"
h<-16
y.fcst <- predict(y.out$model, interval="confidence", level=0.9, n.ahead=h)
y.fcst <- ts(y.fcst, start=(index(y)[length(y)]+0.25), frequency=4)
par(mfcol=c(2,1), cex=0.9)
lcolor <- c(1,2,2,2)
lwidth <- c(2,2,1,1)
ltypes <- c(1,1,2,2)
plot.ts( cbind(y, y.fcst), plot.type="single", col=lcolor, lwd=lwidth, lty=ltypes, xlab="", ylab="", main="Johnson and Johnson: log transformed earnings per share")
legend("topleft", legend = c("actual data","forecast","90% confidence interval"),
col=lcolor, lwd=lwidth, lty=ltypes, bty="n", cex=0.5 )
plot.ts( exp( cbind(y, y.fcst) ), plot.type="single", col=lcolor, lwd=lwidth, lty=ltypes, xlab="", ylab="", main="Johnson and Johnson: earnings per share")
legend("topleft", legend = c("actual data","forecast","90% confidence interval"),
col=lcolor, lwd=lwidth, lty=ltypes, bty="n", cex=0.5 )
t.model <- SSModel(y ~ SSMtrend(degree=2) + SSMseasonal(period=4, sea.type="dummy"), H=NA)
t.model$T
## , , 1
##
## level slope sea_dummy1 sea_dummy2 sea_dummy3
## level 1 1 0 0 0
## slope 0 1 0 0 0
## sea_dummy1 0 0 -1 -1 -1
## sea_dummy2 0 0 1 0 0
## sea_dummy3 0 0 0 1 0
t.model$R
## , , 1
##
## [,1]
## level 0
## slope 0
## sea_dummy1 0
## sea_dummy2 0
## sea_dummy3 0
t.model$Z
## , , 1
##
## level slope sea_dummy1 sea_dummy2 sea_dummy3
## [1,] 1 0 1 0 0
t.model$Q
## , , 1
##
## [,1]
## [1,] 0
t.model$H
## , , 1
##
## [,1]
## [1,] NA
t.out <- KFS(y.fit$model, smoothing=c("state","disturbance"))
colnames(t.out$alphahat)
## [1] "level" "slope" "sea_dummy1" "sea_dummy2" "sea_dummy3"
t.KF <- t.out$a %*% as.vector(t.out$model$Z)
t.KS <- t.out$alphahat %*% as.vector(t.out$model$Z)
ilvl <- which(colnames(t.out$a)=="level")
isea <- which(colnames(t.out$a)=="sea_dummy1")
t.KF.CI.lvl <- as.vector(t.out$a[-(T+1),ilvl]) + qnorm(0.95)* sqrt(cbind(t.out$P[ilvl,ilvl,-(T+1)])) %*% cbind(-1,1)
t.KF.CI.sea <- as.vector(t.out$a[-(T+1),isea]) + qnorm(0.95)* sqrt(cbind(y.out$P[isea,isea,-(T+1)])) %*% cbind(-1,1)
t.KS.CI.lvl <- as.vector(t.out$alphahat[,ilvl]) + qnorm(0.95)* sqrt(cbind(t.out$V[ilvl,ilvl,])) %*% cbind(-1,1)
t.KS.CI.sea <- as.vector(t.out$alphahat[,isea]) + qnorm(0.95)* sqrt(cbind(y.out$V[isea,isea,])) %*% cbind(-1,1)
par(mfrow=c(2,1))
plot.ts(cbind(y, t.out$alphahat[,ilvl], t.KS.CI.lvl), col=c("black","red","red","red"), lty=c(1,1,3,3), plot.type="single", xlab="", ylab="", main="actual and smoothed values" )
plot.ts( cbind(y.out$alphahat[,isea], t.KS.CI.sea), col="red", lty=c(1,3,3), plot.type="single", xlab="", ylab="", main="seasonal component" )
abline(h=0, lty=3)
h <- 16
t.fcst <- predict(t.out$model, interval="confidence", level=0.9, n.ahead=h)
t.fcst <- ts(t.fcst, start=(index(y)[length(y)]+0.25), frequency=4)
par(mfcol=c(2,1), cex=0.9)
lcolor <- c(1,2,2,2)
lwidth <- c(2,2,1,1)
ltypes <- c(1,1,2,2)
plot.ts( cbind(y, t.fcst), plot.type="single", col=lcolor, lwd=lwidth, lty=ltypes, xlab="", ylab="", main="Johnson and Johnson: log transformed earnings per share")
legend("topleft", legend = c("actual data","forecast","90% confidence interval"),
col=lcolor, lwd=lwidth, lty=ltypes, bty="n", cex=0.5 )
plot.ts( exp( cbind(y, t.fcst) ), plot.type="single", col=lcolor, lwd=lwidth, lty=ltypes, xlab="", ylab="", main="Johnson and Johnson: earnings per share")
legend("topleft", legend = c("actual data","forecast","90% confidence interval"),
col=lcolor, lwd=lwidth, lty=ltypes, bty="n", cex=0.5 )
library(dummy)
## dummy 0.1.3
## dummyNews()
data(Nile)
plot(Nile)
T<-length(Nile)
year<-seq(1871,1970)
dummy<-ifelse(year>1889,1,0)
y<-datasets::Nile
y<-cbind(y,dummy)
y.LLM <- SSModel(y ~ SSMtrend(1, Q=list(NA))+dummy, data=y, H=NA )
y.LLM
## Call:
## SSModel(formula = y ~ SSMtrend(1, Q = list(NA)) + dummy, data = y,
## H = NA)
##
## State space model object of class SSModel
##
## Dimensions:
## [1] Number of time points: 100
## [1] Number of time series: 1
## [1] Number of disturbances: 1
## [1] Number of states: 2
## Names of the states:
## [1] dummy level
## Distributions of the time series:
## [1] gaussian
##
## Object is a valid object of class SSModel.
y.LLM$a
## [,1]
## dummy 0
## level 0
y.LLM$Z
## , , 1
##
## dummy level
## [1,] 0 1
##
## , , 2
##
## dummy level
## [1,] 0 1
##
## , , 3
##
## dummy level
## [1,] 0 1
##
## , , 4
##
## dummy level
## [1,] 0 1
##
## , , 5
##
## dummy level
## [1,] 0 1
##
## , , 6
##
## dummy level
## [1,] 0 1
##
## , , 7
##
## dummy level
## [1,] 0 1
##
## , , 8
##
## dummy level
## [1,] 0 1
##
## , , 9
##
## dummy level
## [1,] 0 1
##
## , , 10
##
## dummy level
## [1,] 0 1
##
## , , 11
##
## dummy level
## [1,] 0 1
##
## , , 12
##
## dummy level
## [1,] 0 1
##
## , , 13
##
## dummy level
## [1,] 0 1
##
## , , 14
##
## dummy level
## [1,] 0 1
##
## , , 15
##
## dummy level
## [1,] 0 1
##
## , , 16
##
## dummy level
## [1,] 0 1
##
## , , 17
##
## dummy level
## [1,] 0 1
##
## , , 18
##
## dummy level
## [1,] 0 1
##
## , , 19
##
## dummy level
## [1,] 0 1
##
## , , 20
##
## dummy level
## [1,] 1 1
##
## , , 21
##
## dummy level
## [1,] 1 1
##
## , , 22
##
## dummy level
## [1,] 1 1
##
## , , 23
##
## dummy level
## [1,] 1 1
##
## , , 24
##
## dummy level
## [1,] 1 1
##
## , , 25
##
## dummy level
## [1,] 1 1
##
## , , 26
##
## dummy level
## [1,] 1 1
##
## , , 27
##
## dummy level
## [1,] 1 1
##
## , , 28
##
## dummy level
## [1,] 1 1
##
## , , 29
##
## dummy level
## [1,] 1 1
##
## , , 30
##
## dummy level
## [1,] 1 1
##
## , , 31
##
## dummy level
## [1,] 1 1
##
## , , 32
##
## dummy level
## [1,] 1 1
##
## , , 33
##
## dummy level
## [1,] 1 1
##
## , , 34
##
## dummy level
## [1,] 1 1
##
## , , 35
##
## dummy level
## [1,] 1 1
##
## , , 36
##
## dummy level
## [1,] 1 1
##
## , , 37
##
## dummy level
## [1,] 1 1
##
## , , 38
##
## dummy level
## [1,] 1 1
##
## , , 39
##
## dummy level
## [1,] 1 1
##
## , , 40
##
## dummy level
## [1,] 1 1
##
## , , 41
##
## dummy level
## [1,] 1 1
##
## , , 42
##
## dummy level
## [1,] 1 1
##
## , , 43
##
## dummy level
## [1,] 1 1
##
## , , 44
##
## dummy level
## [1,] 1 1
##
## , , 45
##
## dummy level
## [1,] 1 1
##
## , , 46
##
## dummy level
## [1,] 1 1
##
## , , 47
##
## dummy level
## [1,] 1 1
##
## , , 48
##
## dummy level
## [1,] 1 1
##
## , , 49
##
## dummy level
## [1,] 1 1
##
## , , 50
##
## dummy level
## [1,] 1 1
##
## , , 51
##
## dummy level
## [1,] 1 1
##
## , , 52
##
## dummy level
## [1,] 1 1
##
## , , 53
##
## dummy level
## [1,] 1 1
##
## , , 54
##
## dummy level
## [1,] 1 1
##
## , , 55
##
## dummy level
## [1,] 1 1
##
## , , 56
##
## dummy level
## [1,] 1 1
##
## , , 57
##
## dummy level
## [1,] 1 1
##
## , , 58
##
## dummy level
## [1,] 1 1
##
## , , 59
##
## dummy level
## [1,] 1 1
##
## , , 60
##
## dummy level
## [1,] 1 1
##
## , , 61
##
## dummy level
## [1,] 1 1
##
## , , 62
##
## dummy level
## [1,] 1 1
##
## , , 63
##
## dummy level
## [1,] 1 1
##
## , , 64
##
## dummy level
## [1,] 1 1
##
## , , 65
##
## dummy level
## [1,] 1 1
##
## , , 66
##
## dummy level
## [1,] 1 1
##
## , , 67
##
## dummy level
## [1,] 1 1
##
## , , 68
##
## dummy level
## [1,] 1 1
##
## , , 69
##
## dummy level
## [1,] 1 1
##
## , , 70
##
## dummy level
## [1,] 1 1
##
## , , 71
##
## dummy level
## [1,] 1 1
##
## , , 72
##
## dummy level
## [1,] 1 1
##
## , , 73
##
## dummy level
## [1,] 1 1
##
## , , 74
##
## dummy level
## [1,] 1 1
##
## , , 75
##
## dummy level
## [1,] 1 1
##
## , , 76
##
## dummy level
## [1,] 1 1
##
## , , 77
##
## dummy level
## [1,] 1 1
##
## , , 78
##
## dummy level
## [1,] 1 1
##
## , , 79
##
## dummy level
## [1,] 1 1
##
## , , 80
##
## dummy level
## [1,] 1 1
##
## , , 81
##
## dummy level
## [1,] 1 1
##
## , , 82
##
## dummy level
## [1,] 1 1
##
## , , 83
##
## dummy level
## [1,] 1 1
##
## , , 84
##
## dummy level
## [1,] 1 1
##
## , , 85
##
## dummy level
## [1,] 1 1
##
## , , 86
##
## dummy level
## [1,] 1 1
##
## , , 87
##
## dummy level
## [1,] 1 1
##
## , , 88
##
## dummy level
## [1,] 1 1
##
## , , 89
##
## dummy level
## [1,] 1 1
##
## , , 90
##
## dummy level
## [1,] 1 1
##
## , , 91
##
## dummy level
## [1,] 1 1
##
## , , 92
##
## dummy level
## [1,] 1 1
##
## , , 93
##
## dummy level
## [1,] 1 1
##
## , , 94
##
## dummy level
## [1,] 1 1
##
## , , 95
##
## dummy level
## [1,] 1 1
##
## , , 96
##
## dummy level
## [1,] 1 1
##
## , , 97
##
## dummy level
## [1,] 1 1
##
## , , 98
##
## dummy level
## [1,] 1 1
##
## , , 99
##
## dummy level
## [1,] 1 1
##
## , , 100
##
## dummy level
## [1,] 1 1
y.LLM$T
## , , 1
##
## dummy level
## dummy 1 0
## level 0 1
y.LLM$R
## , , 1
##
## [,1]
## dummy 0
## level 1
y.LLM$H
## , , 1
##
## [,1]
## [1,] NA
y.LLM$Q
## , , 1
##
## [,1]
## [1,] NA
pars <- log( rep(var(Nile, na.rm=TRUE), 2) )
y.fit <- fitSSM( model=y.LLM, inits=pars, method='BFGS' )
y.fit
## $optim.out
## $optim.out$par
## [1] 7.536911 9.556134
##
## $optim.out$value
## [1] 625.7254
##
## $optim.out$counts
## function gradient
## 29 9
##
## $optim.out$convergence
## [1] 0
##
## $optim.out$message
## NULL
##
##
## $model
## Call:
## SSModel(formula = y ~ SSMtrend(1, Q = list(NA)) + dummy, data = y,
## H = NA)
##
## State space model object of class SSModel
##
## Dimensions:
## [1] Number of time points: 100
## [1] Number of time series: 1
## [1] Number of disturbances: 1
## [1] Number of states: 2
## Names of the states:
## [1] dummy level
## Distributions of the time series:
## [1] gaussian
##
## Object is a valid object of class SSModel.
y.out <- KFS(y.fit$model)
y.KF.CI <- predict(y.fit$model, interval="confidence", level=0.9, filtered=TRUE)
y.KS.CI <- predict(y.fit$model, interval="confidence", level=0.9)
y.KF.CI[1,] <- NA
par(mfrow=c(2,2), cex=0.6)
plot.ts( cbind(y, y.KF.CI, Nile), plot.type="single",
col=c(1,4,4,4,1), lwd=c(2,2,2,2,1), lty=c(1,1,2,2,3), xlab="", ylab="", main="")
abline(v=1898)
legend("topright", legend = c("data","filtered state","90% confidence interval"),
col = c("black","blue","blue"), lty = c(1,1,2), lwd = c(1,1,1),bty="n", cex=0.9 )
plot( ts( c(y.out$v[-1]), start=1871), col="blue", lwd=2, xlab="", ylab="", main="forecast error")
abline(h=0, lty=3)
plot( ts( c(y.out$P)[-1], start=1871), col="blue", lwd=2, xlab="", ylab="", main="variance of state")
plot( ts( c(y.out$F)[-1], start=1871), col="blue", lwd=2, xlab="", ylab="", main="variance of forecast error")
par(mfrow=c(1,2), mar=c(3,3,2,1), cex=0.8)
plot.ts( cbind(y, y.KF.CI, Nile), plot.type="single",
col=c(1,4,4,4,1), lwd=c(2,2,2,2,1), lty=c(1,1,2,2,3), xlab="", ylab="", main="")
abline(v=1898)
legend("topright", legend=c("data","filtered","90% confidence interval"), col=c(1,4,4), lty=c(1,1,2), lwd=2, bty="n", cex=0.9 )
plot.ts( cbind(y, y.KS.CI, Nile), plot.type="single",
col=c(1,2,2,2,1), lwd=c(2,2,2,2,1), lty=c(1,1,2,2,3), xlab="", ylab="", main="")
abline(v=1898)
legend("topright", legend=c("data","smoothed","90% confidence interval"), col=c(1,2,2), lty=c(1,1,2), lwd=2, bty="n", cex=0.9 )
par(mfrow=c(1,2), mar=c(3,3,2,1), cex=0.8)
plot.ts( cbind(y, y.KF.CI, Nile), plot.type="single",
col=c(1,4,4,4,1), lwd=c(2,2,2,2,1), lty=c(1,1,2,2,3), xlab="", ylab="", main="")
abline(v=1898)
legend("topright", legend=c("data","filtered","90% confidence interval"), col=c(1,4,4), lty=c(1,1,2), lwd=2, bty="n", cex=0.9 )
plot.ts( cbind(y, y.KS.CI, Nile), plot.type="single",
col=c(1,2,2,2,1), lwd=c(2,2,2,2,1), lty=c(1,1,2,2,3), xlab="", ylab="", main="")
abline(v=1898)
legend("topright", legend=c("data","smoothed","90% confidence interval"), col=c(1,2,2), lty=c(1,1,2), lwd=2, bty="n", cex=0.9 )
data(Nile)
plot(Nile)
T<-length(Nile)
year<-seq(1871,1970)
dummy<-ifelse(year>1889,1,0)
y<-datasets::Nile
y<-cbind(y,dummy)
y[21:50] <- NA
y[71:80] <- NA
y.LLM <- SSModel(y ~ SSMtrend(1, Q=list(NA))+dummy, data=y, H=NA )
y.LLM
## Call:
## SSModel(formula = y ~ SSMtrend(1, Q = list(NA)) + dummy, data = y,
## H = NA)
##
## State space model object of class SSModel
##
## Dimensions:
## [1] Number of time points: 100
## [1] Number of time series: 1
## [1] Number of disturbances: 1
## [1] Number of states: 2
## Names of the states:
## [1] dummy level
## Distributions of the time series:
## [1] gaussian
##
## Object is a valid object of class SSModel.
y.LLM$a
## [,1]
## dummy 0
## level 0
y.LLM$Z
## , , 1
##
## dummy level
## [1,] 0 1
##
## , , 2
##
## dummy level
## [1,] 0 1
##
## , , 3
##
## dummy level
## [1,] 0 1
##
## , , 4
##
## dummy level
## [1,] 0 1
##
## , , 5
##
## dummy level
## [1,] 0 1
##
## , , 6
##
## dummy level
## [1,] 0 1
##
## , , 7
##
## dummy level
## [1,] 0 1
##
## , , 8
##
## dummy level
## [1,] 0 1
##
## , , 9
##
## dummy level
## [1,] 0 1
##
## , , 10
##
## dummy level
## [1,] 0 1
##
## , , 11
##
## dummy level
## [1,] 0 1
##
## , , 12
##
## dummy level
## [1,] 0 1
##
## , , 13
##
## dummy level
## [1,] 0 1
##
## , , 14
##
## dummy level
## [1,] 0 1
##
## , , 15
##
## dummy level
## [1,] 0 1
##
## , , 16
##
## dummy level
## [1,] 0 1
##
## , , 17
##
## dummy level
## [1,] 0 1
##
## , , 18
##
## dummy level
## [1,] 0 1
##
## , , 19
##
## dummy level
## [1,] 0 1
##
## , , 20
##
## dummy level
## [1,] 1 1
##
## , , 21
##
## dummy level
## [1,] 1 1
##
## , , 22
##
## dummy level
## [1,] 1 1
##
## , , 23
##
## dummy level
## [1,] 1 1
##
## , , 24
##
## dummy level
## [1,] 1 1
##
## , , 25
##
## dummy level
## [1,] 1 1
##
## , , 26
##
## dummy level
## [1,] 1 1
##
## , , 27
##
## dummy level
## [1,] 1 1
##
## , , 28
##
## dummy level
## [1,] 1 1
##
## , , 29
##
## dummy level
## [1,] 1 1
##
## , , 30
##
## dummy level
## [1,] 1 1
##
## , , 31
##
## dummy level
## [1,] 1 1
##
## , , 32
##
## dummy level
## [1,] 1 1
##
## , , 33
##
## dummy level
## [1,] 1 1
##
## , , 34
##
## dummy level
## [1,] 1 1
##
## , , 35
##
## dummy level
## [1,] 1 1
##
## , , 36
##
## dummy level
## [1,] 1 1
##
## , , 37
##
## dummy level
## [1,] 1 1
##
## , , 38
##
## dummy level
## [1,] 1 1
##
## , , 39
##
## dummy level
## [1,] 1 1
##
## , , 40
##
## dummy level
## [1,] 1 1
##
## , , 41
##
## dummy level
## [1,] 1 1
##
## , , 42
##
## dummy level
## [1,] 1 1
##
## , , 43
##
## dummy level
## [1,] 1 1
##
## , , 44
##
## dummy level
## [1,] 1 1
##
## , , 45
##
## dummy level
## [1,] 1 1
##
## , , 46
##
## dummy level
## [1,] 1 1
##
## , , 47
##
## dummy level
## [1,] 1 1
##
## , , 48
##
## dummy level
## [1,] 1 1
##
## , , 49
##
## dummy level
## [1,] 1 1
##
## , , 50
##
## dummy level
## [1,] 1 1
##
## , , 51
##
## dummy level
## [1,] 1 1
##
## , , 52
##
## dummy level
## [1,] 1 1
##
## , , 53
##
## dummy level
## [1,] 1 1
##
## , , 54
##
## dummy level
## [1,] 1 1
##
## , , 55
##
## dummy level
## [1,] 1 1
##
## , , 56
##
## dummy level
## [1,] 1 1
##
## , , 57
##
## dummy level
## [1,] 1 1
##
## , , 58
##
## dummy level
## [1,] 1 1
##
## , , 59
##
## dummy level
## [1,] 1 1
##
## , , 60
##
## dummy level
## [1,] 1 1
##
## , , 61
##
## dummy level
## [1,] 1 1
##
## , , 62
##
## dummy level
## [1,] 1 1
##
## , , 63
##
## dummy level
## [1,] 1 1
##
## , , 64
##
## dummy level
## [1,] 1 1
##
## , , 65
##
## dummy level
## [1,] 1 1
##
## , , 66
##
## dummy level
## [1,] 1 1
##
## , , 67
##
## dummy level
## [1,] 1 1
##
## , , 68
##
## dummy level
## [1,] 1 1
##
## , , 69
##
## dummy level
## [1,] 1 1
##
## , , 70
##
## dummy level
## [1,] 1 1
##
## , , 71
##
## dummy level
## [1,] 1 1
##
## , , 72
##
## dummy level
## [1,] 1 1
##
## , , 73
##
## dummy level
## [1,] 1 1
##
## , , 74
##
## dummy level
## [1,] 1 1
##
## , , 75
##
## dummy level
## [1,] 1 1
##
## , , 76
##
## dummy level
## [1,] 1 1
##
## , , 77
##
## dummy level
## [1,] 1 1
##
## , , 78
##
## dummy level
## [1,] 1 1
##
## , , 79
##
## dummy level
## [1,] 1 1
##
## , , 80
##
## dummy level
## [1,] 1 1
##
## , , 81
##
## dummy level
## [1,] 1 1
##
## , , 82
##
## dummy level
## [1,] 1 1
##
## , , 83
##
## dummy level
## [1,] 1 1
##
## , , 84
##
## dummy level
## [1,] 1 1
##
## , , 85
##
## dummy level
## [1,] 1 1
##
## , , 86
##
## dummy level
## [1,] 1 1
##
## , , 87
##
## dummy level
## [1,] 1 1
##
## , , 88
##
## dummy level
## [1,] 1 1
##
## , , 89
##
## dummy level
## [1,] 1 1
##
## , , 90
##
## dummy level
## [1,] 1 1
##
## , , 91
##
## dummy level
## [1,] 1 1
##
## , , 92
##
## dummy level
## [1,] 1 1
##
## , , 93
##
## dummy level
## [1,] 1 1
##
## , , 94
##
## dummy level
## [1,] 1 1
##
## , , 95
##
## dummy level
## [1,] 1 1
##
## , , 96
##
## dummy level
## [1,] 1 1
##
## , , 97
##
## dummy level
## [1,] 1 1
##
## , , 98
##
## dummy level
## [1,] 1 1
##
## , , 99
##
## dummy level
## [1,] 1 1
##
## , , 100
##
## dummy level
## [1,] 1 1
y.LLM$T
## , , 1
##
## dummy level
## dummy 1 0
## level 0 1
y.LLM$R
## , , 1
##
## [,1]
## dummy 0
## level 1
y.LLM$H
## , , 1
##
## [,1]
## [1,] NA
y.LLM$Q
## , , 1
##
## [,1]
## [1,] NA
pars <- log( rep(var(Nile, na.rm=TRUE), 2) )
y.fit <- fitSSM( model=y.LLM, inits=pars, method='BFGS' )
y.fit
## $optim.out
## $optim.out$par
## [1] 6.453453 9.540353
##
## $optim.out$value
## [1] 366.9446
##
## $optim.out$counts
## function gradient
## 21 9
##
## $optim.out$convergence
## [1] 0
##
## $optim.out$message
## NULL
##
##
## $model
## Call:
## SSModel(formula = y ~ SSMtrend(1, Q = list(NA)) + dummy, data = y,
## H = NA)
##
## State space model object of class SSModel
##
## Dimensions:
## [1] Number of time points: 100
## [1] Number of time series: 1
## [1] Number of disturbances: 1
## [1] Number of states: 2
## Names of the states:
## [1] dummy level
## Distributions of the time series:
## [1] gaussian
##
## Object is a valid object of class SSModel.
y.out <- KFS(y.fit$model)
# 90% confidence intervals for filtered state
y.KF.CI <- predict(y.fit$model, interval="confidence", level=0.9, filtered=TRUE)
y.KS.CI <- predict(y.fit$model, interval="confidence", level=0.9)
y.KF.CI[1,] <- NA
par(mfrow=c(2,2), cex=0.6)
plot.ts( cbind(y, y.KF.CI, Nile), plot.type="single",
col=c(1,4,4,4,1), lwd=c(2,2,2,2,1), lty=c(1,1,2,2,3), xlab="", ylab="", main="")
abline(v=1898)
legend("topright", legend = c("data","filtered state","90% confidence interval"),
col = c("black","blue","blue"), lty = c(1,1,2), lwd = c(1,1,1),bty="n", cex=0.9 )
plot( ts( c(y.out$v[-1]), start=1871), col="blue", lwd=2, xlab="", ylab="", main="forecast error")
abline(h=0, lty=3)
plot( ts( c(y.out$P)[-1], start=1871), col="blue", lwd=2, xlab="", ylab="", main="variance of state")
plot( ts( c(y.out$F)[-1], start=1871), col="blue", lwd=2, xlab="", ylab="", main="variance of forecast error")
MLE & Kalman Filtering
par(mfrow=c(1,2), mar=c(3,3,2,1), cex=0.8)
plot.ts( cbind(y, y.KF.CI, Nile), plot.type="single",
col=c(1,4,4,4,1), lwd=c(2,2,2,2,1), lty=c(1,1,2,2,3), xlab="", ylab="", main="")
abline(v=1898)
legend("topright", legend=c("data","filtered","90% confidence interval"), col=c(1,4,4), lty=c(1,1,2), lwd=2, bty="n", cex=0.9 )
plot.ts( cbind(y, y.KS.CI, Nile), plot.type="single",
col=c(1,2,2,2,1), lwd=c(2,2,2,2,1), lty=c(1,1,2,2,3), xlab="", ylab="", main="")
abline(v=1898)
legend("topright", legend=c("data","smoothed","90% confidence interval"), col=c(1,2,2), lty=c(1,1,2), lwd=2, bty="n", cex=0.9 )