Временные ряды в R: Как установить недельный период в два года? - PullRequest
1 голос
/ 30 мая 2019

У меня есть временной ряд с недельным периодом (7 дней) в течение двух лет.У меня 58 значений.Начало: 2017-08-05, конец: 2018-09-08.Мне нужно работать с этим временным рядом в R - делать прогнозы с помощью модели SARIMA и т. Д. Но у меня есть проблема с определением периода / частоты в R. Когда я использую функцию разложения, я получаю ошибку: "time series has no or less than 2 periods".Функция Arima не работает должным образом.Подробная информация ниже.Каким образом я могу импортировать мои данные для использования в R с запрошенной частотой, пожалуйста?

Мои данные (краткий пример):

Файл: session2.csv

date        count
11.11.2017  55053
18.11.2017  45256
25.11.2017  59091
2.12.2017   50030
9.12.2017   41769
16.12.2017  63042
23.12.2017  51838
30.12.2017  47652
6.1.2018    18731
13.1.2018   54470
20.1.2018   22514
27.1.2018   63818
3.2.2018    51605
10.2.2018   26312
17.2.2018   11111

data1.csv содержит только значения.Например:

53053
45256
59091
50045
41769
65042
51838

Я пытался в R:

sessions1 <- scan("data1.csv")
sessionsTS <- ts(sessions1, frequency=52, start=decimal_date(ymd("2017-11-11")))

Выходные сеансы TS и ошибки:

> sessionsTS
Time Series:
Start = 2017.59178082192 
End = 2018.68418328598 
Frequency = 52 

Какой формат времени представляют эти числа (Начало, Конец) пожалуйста?И каким образом я могу использовать для преобразования в десятичную дату?

> sessionsComponents <- decompose(sessionsTS)
Error in decompose(sessionsTS) : 
  time series has no or less than 2 periods

> arima(sessionsTS, order = c(0, 1, 0), seasonal = list(order = c(2, 0, 0), period = 52), xreg = NULL, include.mean = TRUE)
Error in optim(init[mask], armaCSS, method = optim.method, hessian = FALSE,  : 
  initial value in 'vmmin' is not finite

> fit <- Arima(sessionsTS, order = c(0, 1, 0), seasonal = list(order = c(2, 0, 0), period = 52))
Error in optim(init[mask], armaCSS, method = optim.method, hessian = FALSE,  : 
  initial value in 'vmmin' is not finite

> sarima(sessionsTS,1,1,0,2,0,0,52)
Error in sarima(sessionsTS, 1, 1, 0, 2, 0, 0, 52) : 
  unused arguments (0, 0, 52)

Далее я попробовал:

dataSeries <- read.table("sessions2.csv", header=TRUE, sep = ";", row.names=1)
dataTS <- as.xts(dataSeries , frequency=52, start=decimal_date(ymd("2017-11-11")))

> sessionsComponents2 <- decompose(dataTS)
Error in decompose(dataTS) : time series has no or less than 2 periods 

> model = Arima(dataTS, order=c(0,1,0), seasonal = c(2,0,0))
> model
Series: dataTS 
ARIMA(0,1,0)

В этом случае Арима используется без сезонности ...

Большое спасибо за помощь.

1 Ответ

1 голос
/ 30 мая 2019

Ваши данные отбираются еженедельно, поэтому, если период также равен одной неделе, вам нужно установить frequency=1, но в этот момент нет смысла проводить сезонное моделирование.Имеет смысл иметь годовой период, как вы сделали, установив frequency=52, но тогда у вас не будет достаточно периодов для каких-либо оценок, вам потребуется как минимум 104 наблюдения (по крайней мере, два периода, как ошибкасообщение объясняет) для этого.

Короче говоря, вы не сможете делать то, что хотите, если не получите больше данных.

Частичный ответ на ваши вопросы о ts() и формате времени.Если вы сделаете это следующим образом:

tt <- read.table(text="
date        count
11.11.2017  55053
18.11.2017  45256
25.11.2017  59091
2.12.2017   50030
9.12.2017   41769
16.12.2017  63042
23.12.2017  51838
30.12.2017  47652
6.1.2018    18731
13.1.2018   54470
20.1.2018   22514
27.1.2018   63818
3.2.2018    51605
10.2.2018   26312
17.2.2018   11111", header=TRUE)

tt$date <- as.Date(tt$date, format="%d.%m.%Y")

ts(tt$count, frequency=52, start=c(2017, 45))
# Time Series:
# Start = c(2017, 45) 
# End = c(2018, 7) 
# Frequency = 52 
#  [1] 55053 45256 59091 50030 41769 63042 51838 47652 18731
#      54470 22514 63818 51605 26312 11111

start на 45-й неделе 2017 года, а end на 7-й неделе 2018 года.

Вы можете найти номера недели, используя format(tt$date, "%W").Посмотрите на ?strptime для более подробной информации и чтобы увидеть, что означает %W.

...