我发现好多人都没把这两个玩意儿彻底搞清楚。有些论文里的错误比较隐晦,但有些一眼就能看出来作者没搞懂,用错了。
这两个东西公式一样,但统计含义和应用场景却大相径庭。
决定系数(Coefficient of determination,R2, R-square)是做线性回归时的常客。它的核心任务是解释方差,就是你的回归公式(Regression Line)在多大程度上解释了数据y的波动。 它的范围通常是 0 到 1。
当你画y和x的散点图并计算R-square时,它衡量的是数据点仅仅围绕最佳拟合线 (Regression Line)的紧密程度。如果 R-square = 1,说明所有点都完美地落在回归线上。这条回归线可以是任何斜率,不一定是 y=x。
决定系数的公式长这么样:
(注意这里减去的是 y_{reg},即回归方程算出来的预测值。)
搞水文或者环境模型的朋友更熟悉纳什系数(Nash-Sutcliffe Efficiency,NSE)。它的公式如下:
(注意这里减去的是y_{sim} ,即你模型直接输出的模拟值。)
两者公式看起来一样。NSE范围是-\infty到1。NSE看的是模拟值与观测值的绝对一致性。它的参考系不是那条最佳拟合的回归线,而是 1:1 线 (y=x)。只有当图中每个点都落在 1:1 线上时,NSE 才等于 1。
大家最容易犯错的场景是这样的:
你跑了一个复杂的模型,得到了模拟值 Sim,手里也有观测值 Obs。你想证明模型很准,于是画了一个图:横轴是 Obs,纵轴是 Sim。
你直接调用 Excel 或 Python 里的 R-square 函数。这时候,程序内部其实悄悄做了一件事:它把 Obs 当自变量,Sim 当因变量,先做了一次线性回归,找到了一条拟合线,然后告诉你这条线拟合得有多好。
哪怕你的模型有巨大的系统性偏差(比如观测值是 100,你模拟出来是 50,观测是 200,你模拟是 100),虽然数值差得很远,但因为它们有完美的线性关系(斜率为 0.5),算出来的 R-square 依然可以是 1!
这时候你如果宣称:我的模型完美复刻了现实(R-square=1),那就出问题了。因为这时候 NSE 会非常低(甚至为负)。这时候正确的作法是将Obs与Sim代入NSE公式进行计算,或者调用专门的NSE函数(如果有)。