为了获得我预测的模型和真值的相对RMSE,我使用了代码
ratio<-prediction1/ISEtrain
rRMSE1<-sqrt(mean((1-ratio)^2))
但我失败了,输出&#34; [1] Inf&#34;。我的代码出了什么问题?
谢谢!
答案 0 :(得分:4)
您获得Inf
,因为您除以零。
遵循维基百科对规范化RMSE(https://en.wikipedia.org/wiki/Root-mean-square_deviation)的定义,您可能想要:
sqrt( mean( (prediction1-ISEtrain)^2) ) / ( max(ISEtrain)-min(ISEtrain) )
答案 1 :(得分:1)
有两种获得相对RMSE(或标准化RMSE)的方法:
将RMSE除以观测值的标准偏差:
sqrt(mean((prediction1 - ISEtrain)^2)) / sd(ISEtrain)
将RMSE除以观察值的最大值和最小值之间的差值(如David所述):
sqrt(mean((prediction1 - ISEtrain)^2)) / diff(range(ISEtrain))
这两种方法都存在于"hydroGOF"
包中并且执行完全相同但正确的函数名称是nrmse()
而不是rmse()
,如前所述。
library("hydroGOF")
nrmse(prediction1, ISEtrain, norm = "sd")
nrmse(prediction1, ISEtrain, norm = "maxmin")
答案 2 :(得分:0)
如果您只想要RMSE,还可以使用hydroGOF包的内置函数,例如:
rmse(prediction1,ISEtrain, na.rm=TRUE)
此功能可以轻松处理设置na.rm=TRUE
的NA或缺失值,有关详细信息,请参阅文档。
此外,包还包含其他有用的拟合优度函数,如NRMSE,MAE,GOF等。
答案 3 :(得分:0)
是的,但是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)
所以不幸的是,这些计算完全不同。
此时我还没有意识到包含此功能的软件包,因此可能需要创建自己的软件包。