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

时间:2019-04-21 17:51:20

标签: r time-series arima

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

[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函数时,出现此错误“仅针对单变量时间序列实现”

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 :(得分:0)

您收到此错误,是因为您在将数据帧传递给login.xhtml函数时期望一个单变量时间序列。您可以通过如下正确定义时间序列来消除错误:

arima()

然后您可以调用data.ts <- as.ts(myData$Sales) 函数。

arima()

但是,我不确定这是否是您想要的确切结果。您的数据中有2016年的多个值,根据数据集中的列名,您有每月的数据。如果是这种情况,我怀疑设置fit <- arima(log(data.ts), c(0, 1, 0), seasonal = list(order = c(0, 1, 0), period = 1)) 会导致不良结果,因为当您拥有月度数据时,您将周期设为1,而周期1则通常表示年度数据。您可以查看period = 1了解更多信息,但是如果您有每月的数据,则希望通过以下方式定义时间序列:

?ts

这表示您具有从2016年第一个月(data.ts <- ts(myData$Sales, frequency = 12, start = c(2016,1)) )开始的每月数据(frequency = 12)。再举一个例子,如果您有从2016年4月开始的每月数据,则可以设置start = c(2016,1)frequency = 12