Nothing
## ----include=FALSE------------------------------------------------------------
library(ctsmTMB)
library(ggplot2)
## ----eval=FALSE---------------------------------------------------------------
# model$predict(data,
# pars = NULL,
# use.cpp = FALSE,
# method = "ekf",
# ode.solver = "euler",
# ode.timestep = diff(data$t),
# k.ahead = Inf,
# return.k.ahead = NULL,
# return.covariance = TRUE,
# initial.state = self$getInitialState(),
# estimate.initial.state = private$estimate.initial,
# silent = FALSE
# )
## ----eval=FALSE---------------------------------------------------------------
# k.ahead * (nrow(data) - k.ahead)
## -----------------------------------------------------------------------------
model = ctsmTMB$new()
model$addSystem(dx ~ theta * (t*u^2-cos(t*u) - x) * dt + sigma_x*dw)
model$addObs(y ~ x)
model$setVariance(y ~ sigma_y^2)
model$addInput(u)
model$setParameter(
theta = c(initial = 2, lower = 0, upper = 100),
sigma_x = c(initial = 0.2, lower = 1e-5, upper = 5),
sigma_y = c(initial = 5e-2)
)
model$setInitialState(list(1, 1e-1*diag(1)))
# Set simulation settings
set.seed(20)
true.pars <- c(theta=20, sigma_x=1, sigma_y=5e-2)
dt.sim <- 1e-3
t.sim <- seq(0, 1, by=dt.sim)
u.sim <- cumsum(rnorm(length(t.sim),sd=0.1))
df.sim <- data.frame(t=t.sim, y=NA, u=u.sim)
# Perform simulation
sim <- model$simulate(data=df.sim,
pars=true.pars,
n.sims=1,
silent=T)
x <- sim$states$x$i0$x1
# Extract observations from simulation and add noise
iobs <- seq(1,length(t.sim), by=10)
t.obs <- t.sim[iobs]
u.obs <- u.sim[iobs]
y = x[iobs] + true.pars["sigma_y"] * rnorm(length(iobs))
# Create data-frame
.data <- data.frame(
t = t.obs,
u = u.obs,
y = y
)
## ----echo=FALSE, fig.height=5,fig.width=9,out.width="100%", fig.align='center'----
ggplot() +
geom_point(aes(x=t.obs, y=y, color="y(t)")) +
geom_line(aes(x=t.obs, y=u.obs, color="u(t)")) +
ctsmTMB:::getggplot2theme() +
theme(legend.text = ggplot2::element_text(size=15)) +
labs(color="",x="Time",y="")
## ----message=FALSE------------------------------------------------------------
pred = model$predict(.data, k.ahead=nrow(.data)-1, pars=c(1, 1, 0.05))
pred1 = model$predict(.data, k.ahead=nrow(.data)-1, pars=c(10, 1, 0.05))
pred2 = model$predict(.data, k.ahead=nrow(.data)-1, pars=c(50, 1, 0.05))
pred3 = model$predict(.data, k.ahead=nrow(.data)-1, pars=c(100, 1, 0.05))
## -----------------------------------------------------------------------------
head(pred$states)
## -----------------------------------------------------------------------------
head(pred$observations)
## ----echo=FALSE, fig.height=5,fig.width=9,out.width="100%", fig.align='center'----
t <- pred$states$t.j
latex.str <- lapply(
c(sprintf("theta[%s]", c(1,10,50,100)),"y[t[k]]"),
str2expression
)
ggplot() +
geom_line(aes(x=t, y=pred$states$x, color="label1")) +
geom_line(aes(x=t, y=pred1$states$x, color="label2")) +
geom_line(aes(x=t, y=pred2$states$x, color="label3")) +
geom_line(aes(x=t, y=pred3$states$x, color="label4")) +
# geom_line(aes(x=t, y=pred4$states$x, color="label5")) +
# geom_line(aes(x=t, y=pred5$states$x, color="label6")) +
geom_point(aes(x=t.obs, y=y, color="y(t)")) +
scale_color_discrete(labels=latex.str) +
ctsmTMB:::getggplot2theme() +
theme(legend.text = ggplot2::element_text(size=15)) +
labs(color="",x="Time",y="")
## -----------------------------------------------------------------------------
fit = model$estimate(.data)
print(fit)
## -----------------------------------------------------------------------------
pred.horizon <- 25
pred = model$predict(.data, k.ahead=pred.horizon)
## -----------------------------------------------------------------------------
pred.H = pred$states[pred$states$k.ahead==pred.horizon,]
## ----echo=FALSE, fig.height=5,fig.width=9,out.width="100%", fig.align='center'----
ggplot() +
geom_line(aes(x=pred.H$t.j, y=pred.H$x,color="25-Step Predictions")) +
geom_ribbon(aes(x=pred.H$t.j,ymin=pred.H$x-2*sqrt(pred.H$var.x),ymax=pred.H$x+2*sqrt(pred.H$var.x)),fill="grey",alpha=0.5) +
geom_point(aes(x=t.obs,y,color="Observations")) +
labs(color="",x="Time",y="") +
ctsmTMB:::getggplot2theme()
## -----------------------------------------------------------------------------
rmse = c()
k.ahead = 1:pred.horizon
for(i in k.ahead){
xy = data.frame(
x = pred$states[pred$states$k.ahead==i,"x"],
y = pred$observations[pred$observations$k.ahead==i,"y.data"]
)
rmse[i] = sqrt(mean((xy[["x"]] - xy[["y"]])^2))
}
## ----echo=FALSE, fig.height=5,fig.width=9,out.width="100%", fig.align='center'----
ggplot() +
geom_line(aes(k.ahead, rmse), color="steelblue") +
geom_point(aes(k.ahead, rmse), color="red") +
labs(
title = "Root-Mean Square Errors for Different Prediction Horizons",
x = "Prediction Steps",
y = "Root-Mean-Square Errors"
) +
ctsmTMB:::getggplot2theme()
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.