Я пытаюсь заполнить пробел в данных о погоде, мои данные каждые полчаса, но здесь я подготовил воспроизводимый код для почасовых данных. Поскольку данные о погоде являются сезонными, сначала я создаю временной ряд, используя stat :: ts (), а затем передаю его в фильтр Калмана (imputeTS :: na_seade c) или прогноз :: na.interp, однако код очень медленно, в то время как если я передаю необработанные данные в фильтр Калам без созданного TS, это довольно быстро, но теряет информацию о сезонности. Кроме того, я попытался найти find_frequency = TRUE в imputeTS :: na_seade c (), снова это делает код слишком медленным (это занимает часы и часы для одного временного ряда). Интересно, есть ли способ использовать фильтр Калмана, но сохранить информацию о сезонности.
library(riem)
library(dplyr)
library(imputeTS)
library(forecast)
library(stats)
library(plotly)
Raw_data =riem_measures("SFO", date_start = "2010-01-01")
Gapfilled <- Raw_data %>%
dplyr::mutate(tmpfts = ts(data = .$tmpf,
start = min(time(valid)),
frequency = 24)) %>%
dplyr::mutate(ts_interpFilled = forecast::na.interp(tmpfts) %>% as.numeric(),
na_seadecKalman = imputeTS::na_seadec(tmpfts, algorithm = "kalman"),
na_seadecma = imputeTS::na_seadec(tmpf, algorithm = "ma"),
# na_kalman = imputeTS::na_kalman(tmpfts, model = "auto.arima"),
tsclean = forecast::tsclean (tmpfts) %>% as.numeric()
)
plot_ly(Gapfilled, x = ~valid) %>%
add_trace(y = ~ tmpf, name = 'Actuals',mode = 'lines', type = 'scatter' ) %>%
add_trace(y = ~ts_interpFilled, name = 'forecast::na.interp', mode = 'lines', type = 'scatter') %>%
add_trace(y = ~na_seadecma, name = 'imputeTS::na_seadecma', mode = 'lines', type = 'scatter') %>%
add_trace(y = ~tsclean, name = 'forecast::tsclean', mode = 'lines', type = 'scatter') %>%
# add_trace(y = ~na_kalman, name = 'imputeTS::na_kalman', mode = 'lines', type = 'scatter') %>%
add_trace(y = ~na_seadecKalman, name = 'imputeTS::na_seadecKalman', mode = 'lines', type = 'scatter')