r - 如何在不使用库(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)
}
解决方案
你的功能是错误的。您可以使用以下函数进行计算mae
且rae
无需任何封装
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 日创建
推荐阅读
- vuejs2 - VeeValidate - 如何验证应该使用 http:// 的 URL
- javascript - 谷歌地图:将动画符号添加到带有虚线集的折线
- javascript - 如何在 axios 拦截器中重定向?
- python - python:映射列值的组合以提取列表项
- angularjs - AngularJS:如何让视图的初始化等到我们得到服务的响应?
- java - 无法在java中写入我的属性文件
- go - 使用 Golang 从文本文件末尾读取特定内容的有效方法
- flutter - 在颤动中获取 LayoutBuilder 高度
- ionic-framework - 如何在 ion-datetime 中设置最小和最大时间
- python-3.x - Python中的另一个自动点击器,不能为热键按钮触发启动/停止和启动/暂停,需要一些想法来中断循环