我一直在使用R中的hmmTMB包,使用隐马尔可夫模型(HMM)对油价走势进行建模和预测.在用训练数据对模型进行拟合后,我很难在测试数据集上使用拟合的模型对观察到的状态(例如油价)做出提前一步的预测.
# Load necessary libraries
library(hmmTMB)
library(tidyverse)
# Set seed for reproducibility
set.seed(123)
# Example dataset preparation (extended for 1 year)
df <- data.frame(
day = seq.Date(from = as.Date("2020-01-01"), to = as.Date("2020-12-31"), by = "day"),
OILPRICE = rnorm(366, 100, 10)
) %>%
as_tibble()
# Splitting into training and test sets
split_index <- round(nrow(df) * 0.8)
training_set <- df[1:split_index, ] %>% as.data.frame()
testing_set <- df[(split_index + 1):nrow(df), ] %>% as.data.frame()
# Define a hidden Markov model with 2 states for the training set
hid1 <- MarkovChain$new(data = training_set, n_states = 2)
dists <- list(OILPRICE = "norm")
par0 <- list(OILPRICE = list(mean = c(110, 90), sd = c(1, 1)))
obs1 <- Observation$new(data = training_set, n_states = 2, dists = dists, par = par0)
par0 <- obs1$suggest_initial()
obs1 <- Observation$new(data = training_set, n_states = 2, dists = dists, par = par0)
hmm1 <- HMM$new(obs = obs1, hid = hid1)
hmm1$fit(silent = TRUE)
# Rename
data_plot <- training_set
# Color by most likely state sequence
data_plot$state <- factor(paste0("State ", hmm1$viterbi()))
ggplot(data_plot, aes(day, OILPRICE, col = state)) +
geom_point() +
scale_color_manual(values = pal, name = NULL)
# Attempting to make a one-step-ahead prediction
# ??? This is where I need guidance
如何使用hmmTMB对观察到的状态进行一步预测(例如,第二天的OILPRICE)在我的测试数据集(testing_set)上使用拟合模型(hmm 1)?我正在寻找一种方法来预测future 的OILPRICE值的基础上,模型拟合到训练集.
我很感激任何关于如何使用hmmTMB包来实现这一点的见解或例子.