# DLM representation of ARIMA models

I am working through example 3.2.6 in 'Dynamic linear models with R' by Petris. I have download the USA GDP data located here: http://definetti.uark.edu/dlm/

The example starts by estimating the unknown parameters. See the code below:

library(fpp)
library(forecast)
library(dlm)

# 1. read in data from Petris' website
gdp<- ts(gdp_, frequency = 4, start =1950, end = 2004)

#2. plot log of time series
log_gdp<-log(gdp)
plot(log_gdp[,2], xlab = '', ylab = 'log US GDP', type = 'l')

#3. compute the MLE of the unknown parameters
level0<-log_gdp[1]
level0
slope0<-mean(diff(log_gdp))
slope0

buildGap<- function(u){
trend <- dlmModPoly(dV = 1e-7, dW= exp(u[1:2]), m0=c(level0, slope0), C0=2*diag(2))
gap   <- dlmModARMA(ar=u[4:5], sigma2=exp(u[3]))
return<- (trend+gap)
}

init<-c(-3,-1,-3,.4,.4)
outMLE<-dlmMLE(log_gdp, init, buildGap)
outMLE$value dlmGap<-buildGap(outMLE$par)
sqrt(diag(W(dlmGap))[1:3])
GG(dlmGap)[3:4,3]


My questions are:

• Do I need to fit an arima model to the data first and work out p,d and q? (I can easily do this with auto.arima). I don't understand how I am meant to know what goes into the dlmModARMA part of the code above i.e. setting ar, ma and sigma2

• I don't fully understand how I would change the content of buildGap if I wanted to look at a different time series (let's assume it's ARIMA i.e. also trend + ARMA)

This was the ONLY example I could find of a combined model (with dlmModPoly and dlmModARMA). I'm also really new to this and struggling massively, so any simple explanations would be much appreciated. Thanks!

Concerning function buildGap, an explanation cannot be given in this short space. Basically, what it does is to replace values of parameters at the right spots. dlmMLE uses as inputs a time series (log_gdp), a set of initial values of the parameters (init) and a function that builds the model (buildGap). Then, starting at the initial values, dlmMLE iterates trying to optimize the likelihood. At each iteration, buildGap re-builds the model with the new set of parameter values, so the likelihood can be computed.