Заполнение сезонных данных (отсутствие вменения данных) Фильтр Калмана в R - PullRequest
1 голос
/ 20 января 2020

Я пытаюсь заполнить пробел в данных о погоде, мои данные каждые полчаса, но здесь я подготовил воспроизводимый код для почасовых данных. Поскольку данные о погоде являются сезонными, сначала я создаю временной ряд, используя 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')
...