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