function calc_pollutant_rmse($latitude, $longitude, $pollutant, $results)
{
    $sum_leftout_err = 0;
    $count = count($results);
    if ($count == 0) {
        return array("std" => 0, "rmse" => 0, "nrmse" => 0);
    }
    for ($i = 0; $i < $count; $i++) {
        $tmp = $results;
        $leftout_lat = $tmp[$i]["latitude"];
        $leftout_lng = $tmp[$i]["longitude"];
        $leftout_val = $tmp[$i][$pollutant];
        unset($tmp[$i]);
        $tmp = array_values($tmp);
        //reorder array numerically
        $calc_leftout = calc_pollutant_idw($leftout_lat, $leftout_lng, $pollutant, $tmp);
        $leftout_err = pow($calc_leftout - $leftout_val, 2);
        $sum_leftout_err += $leftout_err;
        echo '<br />' . $leftout_lat . ', ' . $leftout_lng . ', ' . $leftout_val . ' , ' . $calc_leftout;
    }
    $rmse = sqrt($sum_leftout_err / $count);
    $std = sqrt(calc_variance_value($pollutant, $results));
    $nrmse = round($rmse / $std, 4);
    $variances = array("std" => $std, "rmse" => $rmse, "nrmse" => $nrmse);
    return $variances;
}
function model_pollutant_points_for_locations_and_times_custom_window($latitudes, $longitudes, $datetimes, $pollutant, $time_window_size, $location_window_size)
{
    $time_window_start = 0;
    $location_window_start_lat = 0;
    $location_window_start_long = 0;
    $window_array = NULL;
    $final_values = array();
    for ($i = 0; $i < count($datetimes); $i++) {
        $t = strtotime($datetimes[i]);
        $dx = ($latitudes[$i] - $location_window_start_lat) * 110.8;
        // 110.8 km per degree of latitude
        $dy = ($longitudes[$i] - $location_window_start_long) * 96.5;
        // 96.5 km per degree of longitude
        if ($t - $time_window_start > $time_window_size || $dx > $location_window_size || $dy > $location_window_size) {
            // new window
            $location_window_start_lat = $latitudes[$i];
            $location_window_start_long = $longitudes[$i];
            $time_window_start = $t;
            $window_array = model_location_and_time_array($latitudes[$i], $longitudes[$i], $location_window_size * 2, $datetimes[$i], 200, $pollutant, true);
        }
        $value = calc_pollutant_idw($latitudes[$i], $longitudes[$i], $pollutant, $window_array);
        array_push($final_values, $value);
    }
    return $final_values;
}