diff --git a/webapp/index.html b/webapp/index.html index aec4edf..8fad0bd 100644 --- a/webapp/index.html +++ b/webapp/index.html @@ -134,7 +134,10 @@
-
Metrics Comparison: All Scenarios
+
Metrics vs PhenoCam (fusion scenarios)
+

+ R² (variance explained), nRMSE (RMSE normalised by PhenoCam σ), NSE_PC (Nash–Sutcliffe vs PhenoCam). Other metrics remain in metrics.json. +

@@ -605,8 +608,8 @@ const scenarios = ["aggressive_sigma20", "aggressive_sigma30", "nonaggressive_sigma20", "nonaggressive_sigma30"]; const scenarioNames = ["Aggressive σ20", "Aggressive σ30", "Non-aggressive σ20", "Non-aggressive σ30"]; - const metrics = ["pearson_r", "r_squared", "rmse", "mae", "nrmse", "nse_pc"]; - const metricLabels = { pearson_r: "r", r_squared: "R²", rmse: "RMSE", mae: "MAE", nrmse: "nRMSE", nse_pc: "NSE_PC" }; + const metrics = ["r_squared", "nrmse", "nse_pc"]; + const metricLabels = { r_squared: "R²", nrmse: "nRMSE", nse_pc: "NSE_PC" }; let html = ""; html += ""; @@ -621,7 +624,12 @@ html += ``; metrics.forEach(m => { const val = m === "nse_pc" ? (data.nse_pc ?? data.nse) : data[m]; - const fmt = val !== null && val !== undefined ? (m === "pearson_r" || m === "r_squared" || m === "nse_pc" ? val.toFixed(3) : val.toFixed(4)) : "—"; + const fmt = + val !== null && val !== undefined + ? m === "nrmse" + ? val.toFixed(4) + : val.toFixed(3) + : "—"; html += ``; }); html += ""; @@ -635,7 +643,12 @@ html += ``; metrics.forEach(m => { const val = m === "nse_pc" ? (data.nse_pc ?? data.nse) : data[m]; - const fmt = val !== null && val !== undefined ? (m === "pearson_r" || m === "r_squared" || m === "nse_pc" ? val.toFixed(3) : val.toFixed(4)) : "—"; + const fmt = + val !== null && val !== undefined + ? m === "nrmse" + ? val.toFixed(4) + : val.toFixed(3) + : "—"; html += ``; }); html += ""; @@ -646,7 +659,7 @@ // Add phenocam stats info if available if (metricsData.phenocam_stats) { const stats = metricsData.phenocam_stats; - html += `

PhenoCam stats: mean=${stats.mean.toFixed(3)}, std=${stats.std.toFixed(3)}, n=${stats.n_samples}

`; + html += `

PhenoCam GCC samples (ground truth): n = ${stats.n_samples}

`; } container.innerHTML = html; diff --git a/webapp/metrics.html b/webapp/metrics.html index 9cc23b4..1dab574 100644 --- a/webapp/metrics.html +++ b/webapp/metrics.html @@ -18,7 +18,6 @@ th, td { border: 1px solid #ccc; padding: 6px 8px; text-align: left; } th { background: #f5f5f5; } td.num { text-align: right; font-variant-numeric: tabular-nums; } - .compare-note { font-size: 12px; color: #555; margin: 0 0 8px 0; max-width: 720px; } .section-note { font-size: 12px; color: #555; margin: -6px 0 8px 0; max-width: 720px; line-height: 1.45; } .section-note code { background: #f1f1f1; padding: 1px 4px; border-radius: 3px; font-size: 11px; } .intro { font-size: 13px; color: #333; background: #fafafa; border: 1px solid #e5e5e5; @@ -50,10 +49,22 @@
S2 (baseline)${fmt}
${scenarioNames[i]}${fmt}