2012-06-18 42 views
5

Tôi đang sử dụng chức năng accuracy từ gói forecast, để tính toán các biện pháp chính xác. Tôi đang sử dụng nó để tính toán các biện pháp cho các mô hình chuỗi thời gian được trang bị, chẳng hạn như ARIMA hoặc làm mịn theo hàm mũ. Vì tôi đang thử nghiệm các kiểu mô hình khác nhau trên các kích thước và mức tập hợp khác nhau, tôi đang sử dụng MASE, lỗi quy mô tuyệt đối trung bình, được giới thiệu bởi Hyndman và cộng sự (2006, "Xem xét các biện pháp khác về độ chính xác dự báo"). mô hình ở các cấp độ khác nhau.Độ chính xác dự báo: không có MASE với hai vectơ làm đối số

Bây giờ tôi cũng so sánh các mô hình với lịch sử dự báo. Vì tôi chỉ có giá trị dự báo chứ không phải các mô hình, tôi đã cố sử dụng chức năng accuracy. Trong chức năng mô tả được đề cập rằng nó cũng được phép cung cấp hai đối vector, một với giá trị dự báo và một với actuals, để tính toán các biện pháp (thay vì một mô hình được trang bị):

f: Một đối tượng của lớp "dự báo" hoặc một số liệu có chứa dự báo. Nó cũng sẽ làm việc với các đối tượng Arima, ets và lm nếu x bị bỏ qua - trong trường hợp này, các số đo chính xác trong mẫu được trả về.

x: Một vector số tùy chọn chứa các giá trị thực tế có cùng độ dài với đối tượng .

Nhưng tôi đã ngạc nhiên bởi thực tế là tất cả các biện pháp đều được trả về, mong đợi MASE. Vì vậy, tôi đã tự hỏi nếu ai đó biết lý do là gì cho điều đó? Tại sao MASE không trả về, trong khi sử dụng hai vectơ làm đối số trong hàm accuracy?

Trả lời

11

Các Mase đòi hỏi các dữ liệu lịch sử để tính toán các yếu tố rộng. Đó là không phải được tính từ dữ liệu trong tương lai như trong câu trả lời của @FBE. Vì vậy, nếu bạn không chuyển dữ liệu lịch sử sang accuracy(), MASE không thể được tính toán. Ví dụ,

> library(forecast) 
> fcast <- snaive(window(USAccDeaths,end=1977.99)) 
> accuracy(fcast$mean,USAccDeaths) 
     ME  RMSE   MAE   MPE  MAPE  ACF1 
225.1666667 341.1639391 259.5000000 2.4692164 2.8505546 0.3086626 
    Theil's U 
    0.4474491 

Nhưng nếu bạn vượt qua toàn bộ đối tượng fcast (trong đó bao gồm các dữ liệu lịch sử), bạn sẽ có được

> accuracy(fcast,USAccDeaths) 
     ME  RMSE   MAE   MPE  MAPE  MASE 
225.1666667 341.1639391 259.5000000 2.4692164 2.8505546 0.5387310 
     ACF1 Theil's U 
    0.3086626 0.4474491 
+0

Có thể truyền các đối tượng khác với đối tượng 'dự báo' để nhận dự đoán MASE không. Ví dụ, tôi muốn sử dụng gói 'vars' để dự đoán và tính toán MASE. Xem câu hỏi liên quan: http://stackoverflow.com/questions/18244506/measuring-var-accuracy-using-accuracy-from-forecast – Harsh

+0

Tiến sĩ Hyndman. Cảm ơn công việc của bạn trong dự báo chuỗi thời gian.Vui lòng đánh giá câu trả lời của tôi để tìm MASE mà không sử dụng đối tượng lớp 'dự báo'. Nó sẽ là tuyệt vời nếu bạn có thể kết hợp nó trong gói của bạn là tốt! –

+0

Tiến sĩ Hyndman, có thể lấy số liệu lỗi MASE cho dữ liệu thiết lập thử nghiệm (định dạng ts) với dữ liệu thực tế không? – mike

0

Để giúp bản thân mình một chút, tôi đã tạo một hàm để tính toán MASE, như được mô tả bởi Hyndman và cộng sự trong "Một cái nhìn khác về các biện pháp dự báo chính xác" (2006).

calculateMASE <- function(f,y) { # f = vector with forecasts, y = vector with actuals 
    if(length(f)!=length(y)){ stop("Vector length is not equal") } 
    n <- length(f) 
    return(mean(abs((y - f)/((1/(n-1)) * sum(abs(y[2:n]-y[1:n-1])))))) 
} 

Để tham khảo, xem:

10

Các bài báo về Mase giải thích rõ ràng làm thế nào để tìm thấy nó (ngay cả đối với phi thời gian -series data)

computeMASE <- function(forecast,train,test,period){ 

    # forecast - forecasted values 
    # train - data used for forecasting .. used to find scaling factor 
    # test - actual data used for finding MASE.. same length as forecast 
    # period - in case of seasonal data.. if not, use 1 

    forecast <- as.vector(forecast) 
    train <- as.vector(train) 
    test <- as.vector(test) 

    n <- length(train) 
    scalingFactor <- sum(abs(train[(period+1):n] - train[1:(n-period)]))/(n-period) 

    et <- abs(test-forecast) 
    qt <- et/scalingFactor 
    meanMASE <- mean(qt) 
    return(meanMASE) 
} 
+0

Chức năng này rất hữu ích +1 – forecaster

+0

Có cách nào để sử dụng chức năng trong trường hợp tôi có dữ liệu theo mùa có nhiều hơn một mùa không? Ví dụ. dữ liệu hàng ngày với mẫu ngày trong tuần (7) và mẫu hàng năm (365). – RandomDude