1context("Fit, transform and simulation")
2
3test_that("FitSSM, transformSSM and simulateSSM works",{
4  tol<-1e-4
5
6  model<-SSModel(log(cbind(front,rear))~ -1 + log(PetrolPrice) + log(kms)
7    + SSMregression(~law,data=Seatbelts,index=1)
8    + SSMcustom(Z=diag(2),T=diag(2),R=matrix(1,2,1),
9      Q=matrix(1),P1=diag(10,2))
10    + SSMseasonal(period=12,sea.type='trigonometric'),
11    data=Seatbelts,H=matrix(NA,2,2))
12  model$y[c(6,205,50,50+192)] <- NA
13  updatefn <- function(pars, model,...){
14    diag(model$H[,,1])<-exp(0.5*pars[1:2])
15    model$H[1,2,1]<-model$H[2,1,1]<-tanh(pars[3])*prod(sqrt(exp(0.5*pars[1:2])))
16    model$R[28:29]<-exp(pars[4:5])
17    model
18  }
19  expect_warning(fit<-fitSSM(model=model,updatefn=updatefn,inits=c(-10,-10,0.7,-4,-4),method="BFGS"),NA)
20  expect_equal(fit$optim.out$p,c(-10.431,-9.460,0.732,-4.182,-4.218),tolerance=1e-4,check.attributes=FALSE)
21  expect_equal(fit$optim.out$value,-337.3011,tolerance=1e-6,check.attributes=FALSE)
22
23  expect_warning(mod <- transformSSM(fit$model, "augment"),NA)
24
25  set.seed(123)
26
27  expect_warning(out <- KFS(mod,smoothing="state"),NA)
28  expect_warning(sim <- simulateSSM(mod,"states",nsim=25,antithetics=TRUE),NA)
29
30  expect_equal(rowMeans(sim[192,,]), out$alpha[192,],tolerance=tol)
31  expect_equal(rowMeans(sim[1,,]), out$alpha[1,],tolerance=tol)
32  expect_equal(cov(t(sim[1,,])), out$V[,,1],tolerance=1e-2,check.attributes=FALSE)
33  expect_equal(var(sim[1,29,]), 1.102994,tolerance=tol,check.attributes=FALSE)
34  expect_equal(cov(t(sim[192,,])), out$V[,,192],tolerance=1e-2,check.attributes=FALSE)
35  expect_equal(var(sim[192,29,]), 1.219971, tolerance=tol,check.attributes=FALSE)
36
37  expect_warning(out <- KFS(fit$model,smoothing=c("state","disturbance")),NA)
38  expect_warning(sim <- simulateSSM(fit$model,"disturbances",nsim=25,antithetics=TRUE),NA)
39
40  expect_equal(rowMeans(sim[192,,]), c(out$eps[192,],0), check.attributes=FALSE)
41  expect_equal(rowMeans(sim[1,,]), c(out$eps[1,],out$eta[1,]), check.attributes=FALSE)
42  expect_equal(apply(sim[1,1:2,],1,var), c(0.0014407910, 0.0007057237),tolerance=tol,check.attributes=FALSE)
43  expect_equal(var(sim[1,3,]),  0.8124605,tolerance=tol,check.attributes=FALSE)
44  expect_equal(apply(sim[192,1:2,],1,var), c(0.0017375633,0.0006524667),tolerance=tol,check.attributes=FALSE)
45  expect_equal(var(sim[192,3,]), 0.6529779,tolerance=tol,check.attributes=FALSE)
46})
47