# mape: Mean absolute percent error (MAPE) In ie2misc: Irucka Embry's Miscellaneous USGS Functions

## Description

This function computes the mean absolute percent error (MAPE).

## Usage

 1 mape(predicted, observed, na.rm = FALSE) 

## Arguments

 predicted numeric vector that contains the predicted data points (1st parameter) observed numeric vector that contains the observed data points (2nd parameter) na.rm logical vector that determines whether the missing values should be removed or not.

## Details

MAPE is expressed as

\frac{1}{n} ∑ \limits_{i=1}^n{ 100 \frac{≤ft| X_i - Y_i \right|} {X_i}}

n

the number of observations

X

the observations

Y

the predictions

Below are some points to remember about MAPE from the Ji reference:

1. MAPE is "a measure to validate forecast models",

2. MAPE is "a standardized value and is independent of the unit of the measurement",

3. MAPE is "meaningful only if all X_i values are positive",

4. MAPE is "unstable when X_i values are near zero", and

5. "If X and Y are interchanged, the MAPE will result in a different value."

## Value

mean absolute percent error (MAPE) as a numeric vector. The default choice is that any NA values will be kept (na.rm = FALSE). This can be changed by specifying na.rm = TRUE, such as mape(pre, obs, na.rm = TRUE).

## Source

r - Better error message for stopifnot? - Stack Overflow answered by Andrie on Dec 1 2011. See http://stackoverflow.com/questions/8343509/better-error-message-for-stopifnot.

## References

Lei Ji and Kevin Gallo, "An Agreement Coefficient for Image Comparison", Photogrammetric Engineering & Remote Sensing, Vol. 72, No. 7, July 2006, p. 823-8335, http://www.ingentaconnect.com/content/asprs/pers/2006/00000072/00000007/art00006.

mae for mean-absolute error (MAE), madstat for mean-absolute deviation (MAD), dr for "index of agreement (dr)", vnse for Nash-Sutcliffe model efficiency (NSE), and rmse for root mean square error (RMSE).
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 library(ie2misc) obs <- 1:10 # observed pre <- 2:11 # predicted mape(pre, obs) require(stats) set.seed(100) # makes the example reproducible obs1 <- rnorm(100) # observed pre1 <- rnorm(100) # predicted # using the vectors pre1 and obs1 mape(pre1, obs1) # using a matrix of the numeric vectors pre1 and obs1 mat1 <- matrix(data = c(obs1, pre1), nrow = length(pre1), ncol = 2, byrow = FALSE, dimnames = list(c(rep("", length(pre1))), c("Predicted", "Observed"))) mape(mat1[, 2], mat1[, 1]) # mat1[, 1] # observed values from column 1 of mat1 # mat1[, 2] # predicted values from column 2 of mat1 # using a data.frame of the numeric vectors pre1 and obs1 df1 <- data.frame(obs1, pre1) mape(df1[, 2], df1[, 1]) # df1[, 1] # observed values from column 1 of df1 # df1[, 2] # predicted values from column 2 of df1 # using a data.table of the numeric vectors pre1 and obs1 df2 <- data.table(obs1, pre1) mape(df2[, 2, with = FALSE][[1]], df2[, 1, with = FALSE][[1]]) # df2[, 1, with = FALSE][[1]] # observed values from column 1 of df2 # df2[, 2, with = FALSE][[1]] # predicted values from column 2 of df2