在R中计算相对均方根误差

4
为了得到我的预测模型和真实值之间的相对RMSE,我使用了以下代码。
ratio<-prediction1/ISEtrain  

rRMSE1<-sqrt(mean((1-ratio)^2))

但是我失败了,输出为“[1] Inf”。我的代码哪里出错了?

谢谢!


ISEtrain 中有任何零吗? - David Heckmann
是的..好几个零,这意味着好几个比率都是无穷大?那我应该做什么呢? - nanshen xiaowa
4个回答

5

2

获取相对RMSE(或标准化RMSE)有两种方法:

  1. Divide RMSE by standard deviation of observed values:

    sqrt(mean((prediction1 - ISEtrain)^2)) / sd(ISEtrain)
    
  2. Divide RMSE by difference between max and min of observed values (as David mentioned):

    sqrt(mean((prediction1 - ISEtrain)^2)) / diff(range(ISEtrain))
    

这两种方法都存在于“hydroGOF”软件包中,并且完全相同,但是执行此操作的正确函数名称为nrmse()而不是先前提到的rmse()

library("hydroGOF")

nrmse(prediction1, ISEtrain, norm = "sd")
nrmse(prediction1, ISEtrain, norm = "maxmin")

1

是的,但是在hydroGOF软件包中计算rmse的方法与相对均方根误差不同,请参见下文:

RRMSE = (sqrt(sum(predicted-observed)^2))/ (number of observations * mean of observation)

HydroGOF中的RMSE计算是:

rmse = sqrt (mean((sim-obs)^2, na.rm=TRUE)

很不幸,这些计算方式非常不同。

目前我不知道有包含此功能的软件包,因此可能需要自己创建。


0

如果你只想要RMSE,你也可以使用hydroGOF软件包的内置函数,例如:

rmse(prediction1,ISEtrain, na.rm=TRUE)

这个函数可以轻松处理NA或缺失值,只需设置na.rm=TRUE,详见文档。

此外,该软件包还包含其他有用的拟合度函数,如NRMSE、MAE、GOF等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接