Вмененные прогнозы для отсутствующих данных временного ряда почти стационарные (плоская линия) - PullRequest
1 голос
/ 26 июня 2019

У меня есть данные о времени игрока, которых не хватает, количество игроков за несколько лет.Я пытаюсь заполнить / предсказать данные пропавшего игрока за различные интервалы.

Данные доступны здесь: https://1drv.ms/u/s!AvEZ_QPY7OZuhJAlKJN89rH185SUhA

Я следую приведенным ниже инструкциям, которые используют KalmanRun для вмененияпропущенные значенияЯ испробовал 3 различных подхода к преобразованию данных с использованием объекта xts и 2 подхода к преобразованию его в данные временных рядов

https://stats.stackexchange.com/questions/104565/how-to-use-auto-arima-to-impute-missing-values

require(forecast)
library(xts)
library(anytime)
library(DescTools)

df_temp = read.csv("r_share.csv")
df_temp[['DateTime']] <- as.Date(strptime(df_temp[['DateTime']], format='%Y-%m-%d %H:%M:%S'))

3 подхода к преобразованию данных;xts, кажется, работает лучше всего, возвращая ненулевые данные, которые можно интерпретировать.

#Convert df_temp to TimeSeries object

df_temp = xts(df_temp$Players, df_temp$DateTime)
#df_temp = as.ts(log(df_temp$Players), start = start(df_temp$DateTime), end = end(df_temp$DateTime), frequency = 365)
#df_temp = ts(df_temp$Players, start = c(2013, 02, 02), end = c(2016, 01, 31), frequency = 365)

Подгонка и построение графиков:

fit <- auto.arima(df_temp, seasonal = TRUE)
id.na <- which(is.na(df_temp))

kr <- KalmanRun(index(df_temp), fit$model, update = FALSE)

#?KalmanRun$tol

for (i in id.na)
  df_temp[i] <- fit$model$Z %*% kr$states[i,]

plot(df_temp)

Ожидаемый результат - это данные, которые имитируют изменчивость, наблюдаемую в фактическомданные и отличаются для каждого интервала, в то время как фактический результат является относительно стационарным и неизменным (оба интервала имеют почти одинаковый прогноз).

1 Ответ

1 голос
/ 26 июня 2019

Это должно быть с моделью arima()?.
Может быть, вы могли бы попробовать с другой моделью, разработанной Facebook, названной Prophet.
Здесь вы можете найти guide и github page .

Если я понял, вы хотите что-то вроде этого:

# Import library

library(prophet)

# Read  data
df = read.csv("C:/Users/Downloads/r_share.csv",sep = ";")

# Transform to date
df["DateTime"] = as.Date(df$DateTime,format = "%d/%m/%Y")

# Change names for the model
colnames(df) = c("ds","y")

# call model
m = prophet(df)


# make "future" just one day greater than past
future = make_future_dataframe(m,periods = 1)

# predict the points
forecast = predict(m,future)

# plot results
plot(m,forecast)

plot

...