【问题标题】:Accuracy testing of forecasts预测的准确性测试
【发布时间】:2014-09-16 13:24:54
【问题描述】:

我找到了一个网站,它准确地解释了我需要为我的数据做什么,但它不在 R 中。谁能建议我如何在 R 中创建它?

http://people.duke.edu/~rnau/three.htm

我需要找到 MSE、MAE、MAPE、ME、MPE、SSE 来测试预测的准确性,而这个页面是我找到的最接近解释如何做到这一点的页面。

data<-c(79160.56266,91759.73029,91186.47551,106353.8192,70346.46525,80279.15139,82611.60076,131392.7209,93798.99391,105944.7752,103913.1296,154530.6937,110157.4025,117416.0942,127423.4206,156751.9979,120097.8068,121307.7534,115021.1187,150657.8258,113711.5282,115353.1395,112701.9846,154319.1785,116803.545,118352.535)
forecasts<-c(118082.3,157303.8,117938.7,122329.8) # found using arima

(如果你把这个问题记下来,你能具体解释一下为什么)

【问题讨论】:

  • 我不是一个“反对者”,但最好展示一下您的努力和您使用过的代码。你基本上是在要求有人根据你想要完成的事情为你做这件事。这是被否决的有力指标。你读过this吗?
  • 您应该能够在 Wikipedia 上找到有关每个列出的统计信息的信息 - 例如 MSE。应该有基本的 R 函数来计算这些值中的大部分(如果不是全部),或者您可以查看像 lmtest 这样的包。至少,它们是相当简单的计算,因此如果需要,您可以轻松编写自己的函数。
  • @PauloCardoso 我并没有要求有人为我做这件事,只是建议如何按照页面上所说的方式去做。每次我提交代码时,人们都会抱怨它太长或无关紧要。我使用不同的预测方法,这也是我没有输入代码的原因。是的,我看过了,但它仍然没有解释我需要什么
  • Rob Hyndman 的text on forecasting 在所有示例中都使用了 R。它可以在线免费获得。
  • @nrussell 我在 wikipedia 等网站上查看了如何做到这一点。我在我的问题中提出的页面似乎测试了样本内的准确性,我也认为样本外这正是我需要做的......但我不知道如何a)找到这些我的数据中的示例和 b) 了解如何正确编码。我已经为此工作了大约 5 个小时:/

标签: r forecasting


【解决方案1】:

这里有一些示例可以帮助您入门,使用包 AER 中的数据集 UKNonDurables。该软件包随附Applied Econometrics with R 一书,这是一本相当不错的应用计量经济学入门书籍,尤其适合没有扎实编程背景的人。

library(forecast)
library(AER) 
##
data("UKNonDurables")
## alias for convenience
Data <- UKNonDurables
## split data into testing and training
train <- window(
  Data,
  end=c(1975,4))
test <- window(
  Data,
  start=c(1976,1))
## fit a model on training data
aaFit <- auto.arima(
  train)
## forcast training model over
## the testing period
aaPred <- forecast(
  aaFit,
  h=length(test))
##
> plot(aaPred)

## extract point forecasts
yHat <- aaPred$mean
## a few functions:
## mean squared (prediction) error
MSE <- function(y,yhat)
{
  mean((y-yhat)**2)
}
## mean absolute (prediction) error
MAE <- function(y,yhat)
{
  mean(abs(y-yhat))
}
## mean absolute percentage (prediction) error
MAPE <- function(y,yhat,percent=TRUE)
{
  if(percent){
    100*mean(abs( (y-yhat)/y ))
  } else {
    mean(abs( (y-yhat)/y ))
  }
}
##
> MSE(test,yHat)
[1] 9646434
> MAE(test,yHat)
[1] 1948.803
> MAPE(test,yHat)
[1] 3.769978

就像我说的,上面的部分或全部函数可能存在于基础 R 或外部包中,但它们通常是简单的公式,实现起来很简单。尝试解决这些问题和/或调整它们以更好地满足您的需求。

编辑: 正如 Hyndman 先生在下面指出的,他的包forecast 包含函数accuracy,它提供了一种非常方便的方法来总结时间序列模型的 GOF 度量。使用上面的相同数据,您可以轻松评估 forecast 对象在训练和测试期间的拟合度:

> round(accuracy(aaPred,Data),3)
                   ME     RMSE      MAE   MPE  MAPE  MASE  ACF1 Theil's U
Training set    2.961  372.104  277.728 0.001 0.809 0.337 0.053        NA
Test set     1761.016 3105.871 1948.803 3.312 3.770 2.364 0.849     1.004

(这里使用了round(...,3),以便输出很好地适合这篇文章)。或者,如果您只想在预测期内检查这些度量,您可以这样调用:

> accuracy(yHat,test)
               ME     RMSE      MAE      MPE     MAPE      ACF1 Theil's U
Test set 1761.016 3105.871 1948.803 3.312358 3.769978 0.8485389  1.004442

【讨论】:

  • 谢谢 :) 我想你不知道如何解释结果的最佳方法是什么?就像 MAPE 最好是小还是大,或者将 MSE 和 MAE 与其他模型进行比较是否更适合它们更大或更小?
  • 一般来说,您希望所有这些值尽可能小(因为它们代表观察值与模型预测值之间的差异量)。然而,就像大多数关于统计推断的问题一样,没有一种简单明了的方法来解释拟合优度,因此您必须对该主题进行大量阅读。您链接的那个网站是一个很好的来源,我建议您浏览CrossValidated 上的问题 - 如果您在其他地方找不到答案,也许可以在该网站上问这个问题。
  • accuracy 包中的 accuracy 函数为您完成所有工作。
  • @RobHyndman 感谢您指出这一点(并贡献了如此出色的软件包)。
猜你喜欢
  • 2016-06-03
  • 2018-08-24
  • 1970-01-01
  • 2015-06-18
  • 2019-04-23
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 2020-02-12
相关资源
最近更新 更多