首页 > 解决方案 > 如何在不使用库(Metrics)的情况下制作 MAE 和 RAE 的功能?

问题描述

我的目标是创建平均绝对误差 (MAE) 和相对绝对误差 (RAE) 的函数,而不使用任何类型的库,例如 library(Metrics)。

我尝试在 MAE 和 RAE 的函数中输入公式

mae <- function(a, b)
{
    mean(abs(a, b))
}


rae <- function(a, b)
{
    abs(a,b )
}

但是,与下面的函数相比,这两个函数都提供了不同的答案,

library(Metrics)
stats <- function(a,b)
    {
        mae <- mae(a,b)
        rae <- rmse(a,b)
    }

标签: rfunctionstatistics

解决方案


你的功能是错误的。您可以使用以下函数进行计算maerae无需任何封装

x <- c(1.1, 1.9, 3.0, 4.4, 5.0, 5.6)
y <- c(0.9, 1.8, 2.5, 4.5, 5.0, 6.2)

mae1 <- function(x,y)
  {
  mean(abs(x-y))
  }

mae1(x, y)
#> [1] 0.25


rae1 <- function(x,y)
  {
  sum(abs(x-y))/sum(abs(x - mean(x)))
  }

rae1(x,y)
#> [1] 0.1666667

library(Metrics)
#> Warning: package 'Metrics' was built under R version 3.6.2

mae(x, y)
#> [1] 0.25
rae(x,y)
#> [1] 0.1666667

reprex 包(v0.3.0)于 2019 年 12 月 27 日创建

它提供与包相同的输出Metrics

更新

如果您的数据包含 NA,则上述功能以及 package 的功能Matrics将失败。在这种情况下使用以下代码

x <- c(1.1, 1.9, 3.0, 4.4, 5.0, 5.6, NA)
y <- c(0.9, 1.8, 2.5, 4.5, 5.0, 6.2, 2)

mae1 <- function(x,y, na.rm=TRUE)
  {
  mean(abs(x-y), na.rm=na.rm)
  }

mae1(x, y, na.rm=TRUE)
#> [1] 0.25


rae1 <- function(x,y, na.rm=TRUE)
  {
  sum(abs(x-y), na.rm=na.rm)/sum(abs(x - mean(x, na.rm=na.rm)), na.rm=na.rm)
  }

rae1(x,y, na.rm=TRUE)
#> [1] 0.1666667

library(Metrics)
#> Warning: package 'Metrics' was built under R version 3.6.2

mae(x, y)
#> [1] NA
rae(x,y)
#> [1] NA

reprex 包(v0.3.0)于 2019 年 12 月 27 日创建


推荐阅读