【问题标题】:Why is the error while running Accurracy function in R programming?为什么在 R 编程中运行 Accuracy 函数时出错?
【发布时间】:2020-08-25 08:21:34
【问题描述】:

我正在尝试使用 r 编程中的准确度函数来寻找预测模型的准确度。但我在 R Studio 中收到以下错误。我是否必须更改预测变量的模式或其他东西?我已经将类视为 ts,将模式视为数字。

我不明白为什么,任何帮助将不胜感激。以下是完整代码。

输入结果:

dput(Enrollment_Data)
structure(list(COUNT = c(17L, 1L, 5L, 8L, 45L, 21L, 18L, 43L, 
82L, 116L, 192L, 289L, 242L, 254L, 335L, 138L, 71L, 98L, 91L, 
138L, 175L, 232L, 155L, 376L, 197L, 271L, 421L), Enrolment_date = structure(c(25L, 
20L, 5L, 10L, 8L, 16L, 1L, 18L, 14L, 12L, 3L, 26L, 23L, 21L, 
6L, 11L, 9L, 17L, 2L, 19L, 15L, 13L, 4L, 27L, 24L, 22L, 7L), .Label = c("APR2018", 
"APR2019", "AUG2018", "AUG2019", "DEC2017", "DEC2018", "DEC2019", 
"FEB2018", "FEB2019", "JAN2018", "JAN2019", "JUL2018", "JUL2019", 
"JUN2018", "JUN2019", "MAR2018", "MAR2019", "MAY2018", "MAY2019", 
"NOV2017", "NOV2018", "NOV2019", "OCT2018", "OCT2019", "SEP2017", 
"SEP2018", "SEP2019"), class = "factor")), class = "data.frame", row.names = c(NA, 
-27L))

数据:

 COUNT Enrolment_date
1     17        SEP2017
2      1        NOV2017
3      5        DEC2017
4      8        JAN2018
5     45        FEB2018
6     21        MAR2018
7     18        APR2018
8     43        MAY2018
9     82        JUN2018
10   116        JUL2018
11   192        AUG2018
12   289        SEP2018
13   242        OCT2018
14   254        NOV2018
15   335        DEC2018
16   138        JAN2019
17    71        FEB2019
18    98        MAR2019
19    91        APR2019
20   138        MAY2019
21   175        JUN2019
22   232        JUL2019
23   155        AUG2019
24   376        SEP2019
25   197        OCT2019
26   271        NOV2019
27   421        DEC2019

错误:

> accuracy(forecast1)
Error in accuracy.default(forecast1) : 
  First argument should be a forecast object or a time series.

完整代码:

Enrollment_Data <- read.csv('RateT0.csv')

head(Enrollment_Data)

#load packages
library(tseries)
library(ggplot2)
library(forecast)


attach(Enrollment_Data)
#Data Exploration

plot(COUNT)
#Forecasting Returns

adf.test(COUNT, alternative="stationary")

d.COUNT <- diff(COUNT, differences = 3)
summary(COUNT)
summary(d.COUNT)

plot(d.COUNT)

adf.test(d.COUNT, alternative="stationary")

acf(d.COUNT)
pacf(d.COUNT)

#Step 2: Model Estimation

forecast::auto.arima(d.COUNT)

#Step 4: Diagnosis
arima.final <-arima(d.COUNT, c(3,0,0))

tsdiag(arima.final)

'Choose the one that has least AIC and significant co-efficients'

#arima.final <-arima(COUNT, c(3,3,1))

forecast1 <- predict(arima.final,n.ahead = 12)
forecast1

summary(forecast1)
accuracy(forecast1)
plot(d.COUNT)

【问题讨论】:

  • 问题未正确提出。您没有提供数据或最小示例来直接测试您的代码。下次提供一个可重现的例子。看看这个:stackoverflow.com/help/how-to-ask

标签: r arima


【解决方案1】:

错误说得很清楚:accuracy 的第一个参数必须是 forecastts 类的对象。

如果您运行class(forecast1),您将收到list,这就是您收到该错误消息的原因。

现在,有很多方法可以更正您的代码。考虑到您的代码结构,我建议您使用以下代码。

改变这个

forecast1 <- predict(arima.final,n.ahead = 12)

进入这个:

forecast1 <- forecast(arima.final, h = 12)

predict 函数不同,forecast 返回一个forecast 类的对象,这将使accuracy 按预期工作。

【讨论】:

  • 我把它改成了预测,现在预测和预测函数生成的预测值完全不同,我不明白为什么,..以及关于这个的想法?
  • 我在示例中得到完全相同的值,但我没有您的数据。为了进一步帮助您,您需要提供一个可重现的示例。如果您不介意分享您的数据,您可以将dput(Enrollment_Data) 的结果添加到您的问题中。
  • 是的,我做了,但即使我做了与否,也没有任何区别。
  • 向问题添加数据。
  • 即使使用您的数据,我也得到完全相同的值。看看这个:p &lt;- predict(arima.final,n.ahead = 12); f &lt;- forecast(arima.final, h = 12); all.equal(f$mean, p$pred) # TRUE
猜你喜欢
  • 2020-12-16
  • 2019-01-08
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
相关资源
最近更新 更多