如何在不同的时间尺度上计算 RMSE
Posted
技术标签:
【中文标题】如何在不同的时间尺度上计算 RMSE【英文标题】:How to calculate RMSE on different time scale 【发布时间】:2016-11-10 12:35:04 【问题描述】:我有 18 年的每日模拟和观察数据,我可以使用此代码计算 RMSE;
sqrt( mean( (df$simulated-df$observed)^2 , na.rm = TRUE ) )
但我必须在整个时间段、每年、每月、每周和季节性时间尺度上计算不同时间序列的 RMSE。 此外,我想执行相关系数、方差、偏差和均值,并将所有结果放在一个文件中。
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:您应该检查 hydroTSM
和 hydroGOF
包。他们应该有你想要的一切
例子:
# Getting the new numeric goodness-of-fit measures
gof(sim = Simulated, obs = Observed)
# Plot 'obs' vs 'sim' for the daily,
# monthly and annual time series
ggof(sim = Simulated, obs = Observed, ylab = "Q (ft3/day)",
ftype = "dma", FUN = mean)
ggof(sim = Sim, obs = Obs, ylab = "Q (ft3/day)",
ftype = "seasonal", FUN = mean)
【讨论】:
是的,我正在使用hydroGOF包,你想分享代码吗? @thecatalyst,由于模拟数据和观测数据都存在缺失值,我们如何处理这些代码中的缺失值? 查看 Mauricio 在他的 Github 上的代码,然后在适用的情况下包含na.rm = TRUE
ggof.R。该函数调用hydroTSM
package中的几个函数
我在计算 Mauricio 的代码时收到此错误,如何纠正这些错误 [注意:'sim' & 'obs' 不是动物园对象 => 'ftype' 已更改为 'o ' ] xy.coords(x, y, xlabel, ylabel, log) 中的错误:“x”是一个列表,但没有组件“x”和“y”另外:警告消息:1:“rNSE”可以不可计算:'obs' 中的某些元素为零! 2:“rd”无法计算:“obs”中的某些元素为零!【参考方案2】:
如果缩放是一个问题,那么建议您事先对数据进行标准化和规范化。这可以通过将日期编码为有意义的数字表示来完成。
您可以从拟合模型的摘要中提取大部分所需的统计数据,您可以使用str()
进行探索。您还可以从 Metrics
包中获得很多有用的统计信息,包括 RMSE。
【讨论】:
以上是关于如何在不同的时间尺度上计算 RMSE的主要内容,如果未能解决你的问题,请参考以下文章
Python Dataframe:在一列上使用Groupby计算R ^ 2和RMSE