### Set model
drift <- c("a*X", "X")
diffusion <- c("b", "sigma")
# Use `model.class="linearStateSpaceModel"` implicitly.
ymodel <- setModel(
drift = drift,
diffusion = diffusion,
solve.variable = c("X", "Y"),
state.variable = c("X", "Y"),
observed.variable = "Y"
)
### Set data
T <- 100
N <- 50000
n <- N
h <- T / N
true.par <- list(
a = -1.5,
b = 0.3,
sigma = 0.053
)
tmp.yuima <- simulate(
ymodel, true.parameter = true.par, sampling = setSampling(n = N, Terminal = T)
)
ydata <- tmp.yuima@data
rm(tmp.yuima)
### Set yuima
variable_data_mapping <- list(
#"X" = NA,
"Y" = 2
)
yuima <- setYuima(model = ymodel, data = ydata, variable_data_mapping = variable_data_mapping)
# Estimate
upper.par <- list(
a = 1,
b = 5,
sigma = 1
)
lower.par <- list(
a = -10,
b = 0.01,
sigma = 0.001
)
start.par <- list(
a = 0.5,
b = 4,
sigma = 0.9
)
filter_mean_init <- 0
res <- qmle.linear_state_space_model(
yuima, start = start.par, upper = upper.par, lower = lower.par,
filter_mean_init = filter_mean_init
)
Run the code above in your browser using DataLab