仅在单变量时间序列上实施

Only implemented on univariate time series

我正在尝试对我的数据集进行时间序列分析。本来我的数据集有以下属性。

[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"

但是我在我的数据集中只使用了 Year & Sales 来实现时间序列。 当我尝试 运行 arima 函数时,它给出了这个错误 "only implemented for univariate time series"

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,其中有不同的销售额值。

您收到错误消息是因为您在 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))

这表示您有从 2016 年第一个月 (start = c(2016,1)) 开始的月度数据 (frequency = 12)。再举一个例子,如果您有从 2016 年 4 月开始的月度数据,您可以设置 frequency = 12start = c(2016,4)