仅在单变量时间序列上实施
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 = 12
和 start = c(2016,4)
。
我正在尝试对我的数据集进行时间序列分析。本来我的数据集有以下属性。
[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 = 12
和 start = c(2016,4)
。