{
  "description": "Tobit regression model for predicting log10(E. coli CFU + 1) from fluorimeter sensor readings",
  "response_variable": "log10(CFU + 1)",
  "detection_limit": {
    "cbt_dl_cfu": 100,
    "dl_log10": 2.0043213737826426,
    "description": "CBT values >= 100 CFU are right-censored at log10(101)"
  },
  "winning_spec_name": "+slopes",
  "features": [
    "mon2c_n",
    "temp",
    "tof_n"
  ],
  "sensor_fixed_effects": true,
  "sensor_slopes": true,
  "ridge_lambda": 0.1,
  "per_sensor_z": false,
  "country_fe": false,
  "censored_weight": 1,
  "reference_sensor": "50065",
  "fe_sensors": [
    "50045",
    "50053"
  ],
  "coefficients": {
    "intercept": 0.8277859852008312,
    "mon2c_n": 1.9764872111883633,
    "temp": 0.17291459655078956,
    "tof_n": 0.005692295744107956,
    "sensor_fe_50045": 0.45336097273889797,
    "sensor_fe_50053": -0.5893495278755129,
    "slope_mon2_50045": -0.19082259689698264,
    "slope_mon2_50053": -1.5571485894331594
  },
  "sigma": 0.6064581272924916,
  "metrics": {
    "r2_insample": 0.5193260379816752,
    "mae_insample": 0.3959389675786972,
    "agreement_insample": 0.8935185185185185,
    "agreement_loocv": 0.8842592592592593,
    "n": 216
  },
  "agreement_band": {
    "half_width_log10": 0.9192388155425119,
    "description": "Two independent CBT 95% CIs combined: sqrt(2) * 0.65 / 1.96 * 1.96",
    "cbt_ci_half": 0.65
  },
  "normalization": {
    "mon2c_n": {
      "mean": 53.30555555555556,
      "sd": 164.23988543936525,
      "description": "z-score normalization applied to baseline-subtracted RAW mon2 (not temperature-corrected)"
    },
    "temp": {
      "mean": 31.86949906944442,
      "sd": 4.108239275766577,
      "description": "z-score normalization applied to water temperature (degrees C)"
    },
    "tof_n": {
      "mean": 4.064814814814815,
      "sd": 15.049777375090326,
      "description": "z-score normalization applied to baseline-subtracted ToF signal"
    }
  },
  "temperature_correction": {
    "applied": false,
    "note": "Temperature is an explicit model feature (temp, and the mon2xtemp interaction), not a multiplicative pre-correction. rho is not applied.",
    "reference_rho_estimate": 0.016395464869203735
  },
  "per_sensor_baselines": {
    "mon2c": {
      "50045": 484,
      "50053": 798.5,
      "50065": 304
    },
    "tof": {
      "50045": 29,
      "50053": 33,
      "50065": 39
    },
    "description": "Median of clean-water (CBT=0) readings per sensor, subtracted before z-scoring"
  },
  "who_risk_categories": {
    "labels": [
      "Conformity",
      "Low",
      "Intermediate",
      "Very high"
    ],
    "thresholds_cfu": [
      0,
      1,
      10,
      100
    ],
    "description": "WHO/UNICEF 4-level drinking water quality classification"
  },
  "export_date": "2026-06-19",
  "source_script": "scripts/cbt-model-eval.js (via export-csv.js)",
  "data_files": [
    "data/cbt-datagrid.csv",
    "data/cbt-sipm.json",
    "data/cbt-tof.json",
    "data/cbt-diagnostics.json",
    "data/cbt-overrides-snapshot.json"
  ]
}
