我正在尝试对我的数据集进行时间序列分析。最初,我的数据集具有以下属性。
[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年的销售额具有不同的价值。
答案 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
。