Реализуется только в одномерных временных рядах - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь выполнить анализ временных рядов в моем наборе данных.Первоначально мой набор данных имеет следующие атрибуты.

[1] "Customer"        "Customer.No"     "Shop"            "Invoice"        
[5] "Quantity"        "Sales"           "Cash.Amt"      "Credit.Card.Amt"
[9] "Net.Sales"       "Mens.Wear"       "Womens.Wear"     "Kids.Wear"      
[13] "Foot.Wear"       "Fragrant"        "Class"           "Date"           
[17] "Year"            "Month"

Но я взял только Год и Продажи в своем наборе данных для реализации временных рядов.Когда я пытаюсь запустить функцию arima, она выдает эту ошибку «реализована только для одномерных временных рядов»

data.ts<- as.ts(myData) 
is.ts(data.ts) 
class(data.ts) 
plot(data.ts) 
frequency(data.ts) 
plot(log(data.ts)) 
plot(diff(log(data.ts))) 
acf(data.ts) 
acf(diff(log(data.ts))) 
#p=0 
pacf(diff(log(AirPassengers)))
#q=0
fit <- arima(log(data.ts), c(0, 1, 0), seasonal = list(order = c(0, 1, 0), period = 1))

Может кто-нибудь сказать мне, если я использую правильные атрибуты для реализации временных рядов?Кроме того, почему эта ошибка приходит?Как я могу решить это?

Это первые 6 наблюдений моего набора данных.

   Sales  Year
[1,]   707  2016
[2,]   306  2016
[3,]   394  2016
[4,]   306  2016
[5,]   491  2016
[6,]   306  2016

Годы - 2016, 2017 и 2018 гг., Для которых существуют разные значения продаж.

1 Ответ

0 голосов
/ 24 апреля 2019

Вы получаете сообщение об ошибке, поскольку вы передаете фрейм данных в функцию arima(), когда она ожидает одномерный временной ряд. Вы можете устранить ошибку, правильно указав свой временной ряд следующим образом:

data.ts <- as.ts(myData$Sales) 

Затем вы можете вызвать функцию arima().

fit <- arima(log(data.ts), c(0, 1, 0), seasonal = list(order = c(0, 1, 0), period = 1))

Однако я не уверен, что это именно тот результат, который вы хотите. В ваших данных есть несколько значений для 2016 года, и на основе имен столбцов в вашем наборе данных у вас есть ежемесячные данные. Если это так, я подозреваю, что установка period = 1 приведет к нежелательным результатам, потому что вы указываете период 1, когда у вас есть ежемесячные данные, тогда как период 1 часто представляет годовые данные. Вы можете просмотреть ?ts для получения дополнительной информации, но если у вас есть месячные данные, вы бы хотели определить свой временной ряд следующим образом:

data.ts <- ts(myData$Sales, frequency = 12, start = c(2016,1))

Это означает, что у вас есть ежемесячные данные (frequency = 12), начиная с первого месяца 2016 года (start = c(2016,1)). В качестве другого примера, если бы у вас были месячные данные, начинающиеся в апреле 2016 года, вы бы установили frequency = 12 и start = c(2016,4).

...