基于ARIMA的R时间序列分析预测

wvt8vs2t  于 2023-01-28  发布在  其他
关注(0)|答案(2)|浏览(136)

我是编程新手,正在尝试为多篇文章创建预测模型。不幸的是,使用Excel或类似软件无法完成此任务。因此,我安装了Rstudio来解决此问题。我的目标是使用ARIMA模型对数据集中的每篇文章进行18个月的预测。
然而,我目前面临着一个 Dataframe 格式的问题,具体来说,我不确定CSV应该如何构造才能被代码读取。
我已附加了CSV格式的当前数据集图像:https://i.stack.imgur.com/AQJx1.png
下面是我的dput(sales_data):structure(list(X.Article.1.Article.2.Article.3 = c("janv-19;42;49;55", "f\xe9vr-19;56;58;38", "mars-19;55;59;76")), class = "data.frame", row.names = c(NA, -3L))
并且还提供了我到目前为止在博客和网站的帮助下构建的代码:

library(forecast)
library(reshape2)

sales_data <- read.csv("sales_data.csv", header = TRUE)

sales_data_long <- reshape2::melt(sales_data, id.vars = "Code Article")

for(i in 1:nrow(sales_data_long)) {
  
  sales_data_article <- subset(sales_data_long, sales_data_long$`Code Article` == sales_data_long[i,"Code Article"])
  
  sales_ts <- ts(sales_data_article$value, start = c(2010,6), frequency = 12)
  
  arima_fit <- auto

  arima_forecast <- forecast(arima_fit, h = 18)
  
  print(arima_forecast)
  print("Article: ", Code article[i])
}

对于这段代码,RStudio给出了以下错误:“错误:在数据中找不到ID变量:代码文章”
目前,我对生成任何图或输出不感兴趣。我的主要精力是为我的数据确定适当的格式。
我是否需要修改CSV文件并使用“”或““分隔每列;“?或者,我是否可以保留数据的当前格式,而在代码中进行调整?

jvidinwx

jvidinwx1#

根据jrcalabrese请求添加了dput输出。替换为reforme 2(tidyr)。使用了pivot_longger。现在给予错误,这在reforme 2::melt中发生。csv结构是什么并不重要。您的结构很好。希望这对您有帮助!:-)

library(tidyr)
sales_data <- structure(list(var1 = c("Article 1", "Article 2", "Article 3"),
`janv-19` = c(42, 56, 55),
`fev-19` = c(49, 58, 59),
`mars-19` = c(55, 38, 76)),
row.names = c(NA, 3L), class = "data.frame")

sales_data_long <- sales_data |> pivot_longer(!var1,
                                              names_to = "month",
                                              values_to = "count")
li9yvcax

li9yvcax2#

我修改了我的代码,终于得到了一些东西。下面是我的代码:

library(forecast)
library(readr)

sales_data <- read_csv("sales_data.csv")

sales_ts_list <- list()
for(i in 1:ncol(sales_data)){
sales_ts_list[[i]] <- ts(sales_data[,i], start = c(2019, 1), frequency = 12)
}

sales_arima_list <- list()
for(i in 1:length(sales_ts_list)){
sales_arima_list[[i]] <- auto.arima(sales_ts_list[[i]])
}

sales_forecast_list <- list()
for(i in 1:length(sales_arima_list)){
sales_forecast_list[[i]] <- forecast(sales_arima_list[[i]], h = 18)
}

for(i in 1:length(sales_forecast_list)){
print(sales_forecast_list[[i]])
}

for(i in 1:length(sales_forecast_list)){
plot(sales_forecast_list[[i]])
mtext(colnames(sales_data)[i], side = 3, line = 0, cex = 1.5)
}

这似乎是可行的,因为我得到了一个图表和一个列表。另一方面,我只得到了一个图表,而不是所有文章的图表。我想这是因为我的文件中有太多的项目。是否可以调用一个特定的图表?例如:“我想显示项目编号87的图表”?

相关问题