{ "cells": [ { "cell_type": "markdown", "id": "c608792f", "metadata": {}, "source": [ "# Retrieval Analysis" ] }, { "cell_type": "markdown", "id": "3ffc460a", "metadata": {}, "source": [ "This notebook is intended to show how the trained retrieval models can be evaluated. \n", "They are run on real measurement data and the results are compared to radiosonde observations and era5 data." ] }, { "cell_type": "code", "execution_count": 1, "id": "50c3e022", "metadata": {}, "outputs": [], "source": [ "%config InlineBackend.figure_format = 'svg'\n", "\n", "import xarray as xr\n", "import numpy as np\n", "from IPython.display import Markdown, display\n", "\n", "from openMWR.hatpro_data import calc_derived_quantities\n", "from openMWR.run import run_model_list\n", "from openMWR.models import Model\n", "from openMWR.calc_errors import calculate_errors\n", "from openMWR.plot import plot_err\n", "\n", "DATA_DIR = '../../../../data'\n", "\n", "device = \"cpu\"" ] }, { "cell_type": "markdown", "id": "89b20a38", "metadata": {}, "source": [ "First, load the trained models." ] }, { "cell_type": "code", "execution_count": 2, "id": "5f297731", "metadata": {}, "outputs": [], "source": [ "site = 'munich_G5'\n", "\n", "model_list = [Model.load('NN_opt', site=site, data_dir=DATA_DIR), Model.load('MLR_opt', site=site, data_dir=DATA_DIR), Model.load('NN_R17_opt', site=site, data_dir=DATA_DIR)]" ] }, { "cell_type": "markdown", "id": "701bbaa2", "metadata": {}, "source": [ "## Radiosonde Data Comparison" ] }, { "cell_type": "markdown", "id": "7871fc5b", "metadata": {}, "source": [ "The analysis data set, created with the `openMWR.radiosonde.create_analysis_dataset` function, is used for the analysis. \n", "This dataset contains the microwave radiometer measurements and the corresponding radiosonde observations. \n", "Depending on how it was created, the dataset may also contain RPG retrievals and simulated brightness temperatures from the radiosonde profiles." ] }, { "cell_type": "code", "execution_count": 3, "id": "014b0e0b", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 3MB\n",
       "Dimensions:           (time: 253, height: 138, frq: 14)\n",
       "Coordinates:\n",
       "  * time              (time) datetime64[ns] 2kB 2024-11-21T10:45:00 ... 2025-...\n",
       "    synop             (time) datetime64[ns] 2kB 2024-11-21T12:00:00 ... 2025-...\n",
       "  * height            (height) int64 1kB 0 10 25 50 75 ... 9700 9800 9900 10000\n",
       "  * frq               (frq) float64 112B 22.24 23.04 23.84 ... 56.66 57.3 58.0\n",
       "Data variables: (12/25)\n",
       "    lat               (time, height) float64 279kB nan nan nan ... nan nan nan\n",
       "    lon               (time, height) float64 279kB nan nan nan ... nan nan nan\n",
       "    p                 (time, height) float64 279kB 941.1 940.0 ... 244.7 nan\n",
       "    T                 (time, height) float64 279kB 275.9 275.8 ... 216.1 nan\n",
       "    wind_speed        (time, height) float64 279kB nan nan nan ... nan nan nan\n",
       "    wind_dir          (time, height) float64 279kB nan nan nan ... nan nan nan\n",
       "    ...                ...\n",
       "    doy_sin           (time) float64 2kB -0.4822 -0.4822 ... -0.3735 -0.3575\n",
       "    years_since_1970  (time) float64 2kB 54.89 54.89 54.89 ... 55.91 55.91 55.91\n",
       "    rain_flag         (time) float64 2kB 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0\n",
       "    azimuth_angle     (time) float32 1kB 0.0 0.0 0.0 0.0 ... 0.02 0.02 0.02 0.02\n",
       "    elevation_angle   (time) float32 1kB 90.0 90.0 90.0 ... 89.98 89.98 89.98\n",
       "    old_time          (time) datetime64[ns] 2kB 2024-11-21T10:45:00 ... 2025-...\n",
       "Attributes:\n",
       "    station_id:      03715\n",
       "    station_name:    Oberschleißheim (Lustheim)\n",
       "    station_height:  484\n",
       "    station_lat:     48.2446\n",
       "    station_lon:     11.5525
" ], "text/plain": [ " Size: 3MB\n", "Dimensions: (time: 253, height: 138, frq: 14)\n", "Coordinates:\n", " * time (time) datetime64[ns] 2kB 2024-11-21T10:45:00 ... 2025-...\n", " synop (time) datetime64[ns] 2kB 2024-11-21T12:00:00 ... 2025-...\n", " * height (height) int64 1kB 0 10 25 50 75 ... 9700 9800 9900 10000\n", " * frq (frq) float64 112B 22.24 23.04 23.84 ... 56.66 57.3 58.0\n", "Data variables: (12/25)\n", " lat (time, height) float64 279kB nan nan nan ... nan nan nan\n", " lon (time, height) float64 279kB nan nan nan ... nan nan nan\n", " p (time, height) float64 279kB 941.1 940.0 ... 244.7 nan\n", " T (time, height) float64 279kB 275.9 275.8 ... 216.1 nan\n", " wind_speed (time, height) float64 279kB nan nan nan ... nan nan nan\n", " wind_dir (time, height) float64 279kB nan nan nan ... nan nan nan\n", " ... ...\n", " doy_sin (time) float64 2kB -0.4822 -0.4822 ... -0.3735 -0.3575\n", " years_since_1970 (time) float64 2kB 54.89 54.89 54.89 ... 55.91 55.91 55.91\n", " rain_flag (time) float64 2kB 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0\n", " azimuth_angle (time) float32 1kB 0.0 0.0 0.0 0.0 ... 0.02 0.02 0.02 0.02\n", " elevation_angle (time) float32 1kB 90.0 90.0 90.0 ... 89.98 89.98 89.98\n", " old_time (time) datetime64[ns] 2kB 2024-11-21T10:45:00 ... 2025-...\n", "Attributes:\n", " station_id: 03715\n", " station_name: Oberschleißheim (Lustheim)\n", " station_height: 484\n", " station_lat: 48.2446\n", " station_lon: 11.5525" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds_an_data = xr.load_dataset(f'{DATA_DIR}/sites/{site}/analysis/analysis_data_radiosonde.nc')\n", "\n", "# Only use data with day of month larger than 20. The rest was used to optimize the models.\n", "ds_an_data = ds_an_data.where(ds_an_data['time'].dt.day > 20, drop=True)\n", "\n", "# Select only the closest radiosonde station\n", "ds_an_data = ds_an_data.sel(station='03715', drop=True)\n", "\n", "ds_hatpro = ds_an_data.sel(data_source='hatpro', drop=True)\n", "ds_raso = ds_an_data.sel(data_source='radiosonde', drop=True)\n", "\n", "ds_hatpro" ] }, { "cell_type": "markdown", "id": "bab8af6e", "metadata": {}, "source": [ "The next step is to apply the trained models to the measurement data." ] }, { "cell_type": "code", "execution_count": null, "id": "3942b631", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 9MB\n",
       "Dimensions:           (model: 4, time: 253, height: 138, frq: 14)\n",
       "Coordinates:\n",
       "  * model             (model) object 32B 'RPG' 'NN_opt' 'MLR_opt' 'NN_R17_opt'\n",
       "  * time              (time) datetime64[ns] 2kB 2024-11-21T10:45:00 ... 2025-...\n",
       "    synop             (time) datetime64[ns] 2kB 2024-11-21T12:00:00 ... 2025-...\n",
       "  * height            (height) int64 1kB 0 10 25 50 75 ... 9700 9800 9900 10000\n",
       "  * frq               (frq) float64 112B 22.24 23.04 23.84 ... 56.66 57.3 58.0\n",
       "Data variables: (12/28)\n",
       "    T                 (model, time, height) float64 1MB 275.9 275.8 ... 215.2\n",
       "    rh                (model, time, height) float64 1MB 50.26 50.48 ... 29.83\n",
       "    ah                (model, time, height) float64 1MB 2.893 2.848 ... 0.007431\n",
       "    TD                (model, time, height) float64 1MB 266.4 266.1 ... 206.0\n",
       "    iwv               (model, time) float64 8kB 4.825 9.277 ... 10.61 14.75\n",
       "    lwc               (model, time, height) float64 1MB 0.0 0.0 0.0 ... 0.0 0.0\n",
       "    ...                ...\n",
       "    azimuth_angle     (time) float32 1kB 0.0 0.0 0.0 0.0 ... 0.02 0.02 0.02 0.02\n",
       "    elevation_angle   (time) float32 1kB 90.0 90.0 90.0 ... 89.98 89.98 89.98\n",
       "    old_time          (time) datetime64[ns] 2kB 2024-11-21T10:45:00 ... 2025-...\n",
       "    T_grad            (model, height, time) float64 1MB nan nan nan ... nan nan\n",
       "    lwp_from_lwc      (model, time) float64 8kB nan nan nan nan ... 0.0 0.0 0.0\n",
       "    iwv_from_ah       (model, time) float64 8kB nan nan nan ... 10.43 14.81\n",
       "Attributes:\n",
       "    station_id:      03715\n",
       "    station_name:    Oberschleißheim (Lustheim)\n",
       "    station_height:  484\n",
       "    station_lat:     48.2446\n",
       "    station_lon:     11.5525
" ], "text/plain": [ " Size: 9MB\n", "Dimensions: (model: 4, time: 253, height: 138, frq: 14)\n", "Coordinates:\n", " * model (model) object 32B 'RPG' 'NN_opt' 'MLR_opt' 'NN_R17_opt'\n", " * time (time) datetime64[ns] 2kB 2024-11-21T10:45:00 ... 2025-...\n", " synop (time) datetime64[ns] 2kB 2024-11-21T12:00:00 ... 2025-...\n", " * height (height) int64 1kB 0 10 25 50 75 ... 9700 9800 9900 10000\n", " * frq (frq) float64 112B 22.24 23.04 23.84 ... 56.66 57.3 58.0\n", "Data variables: (12/28)\n", " T (model, time, height) float64 1MB 275.9 275.8 ... 215.2\n", " rh (model, time, height) float64 1MB 50.26 50.48 ... 29.83\n", " ah (model, time, height) float64 1MB 2.893 2.848 ... 0.007431\n", " TD (model, time, height) float64 1MB 266.4 266.1 ... 206.0\n", " iwv (model, time) float64 8kB 4.825 9.277 ... 10.61 14.75\n", " lwc (model, time, height) float64 1MB 0.0 0.0 0.0 ... 0.0 0.0\n", " ... ...\n", " azimuth_angle (time) float32 1kB 0.0 0.0 0.0 0.0 ... 0.02 0.02 0.02 0.02\n", " elevation_angle (time) float32 1kB 90.0 90.0 90.0 ... 89.98 89.98 89.98\n", " old_time (time) datetime64[ns] 2kB 2024-11-21T10:45:00 ... 2025-...\n", " T_grad (model, height, time) float64 1MB nan nan nan ... nan nan\n", " lwp_from_lwc (model, time) float64 8kB nan nan nan nan ... 0.0 0.0 0.0\n", " iwv_from_ah (model, time) float64 8kB nan nan nan ... 10.43 14.81\n", "Attributes:\n", " station_id: 03715\n", " station_name: Oberschleißheim (Lustheim)\n", " station_height: 484\n", " station_lat: 48.2446\n", " station_lon: 11.5525" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pred = run_model_list(model_list, ds_hatpro, device)\n", "\n", "# Select only up to 10 km height for the analysis\n", "pred = pred.sel(height=slice(0, 10000))\n", "\n", "pred = calc_derived_quantities(pred)\n", "\n", "# Add RPG retrievals to the prediction dataset for comparison\n", "ds_hatpro_ret = ds_hatpro[['T', 'rh', 'ah', 'TD', 'iwv', 'lwc', 'lwp', 'p']].expand_dims(model=['RPG'])\n", "\n", "pred = xr.concat([ds_hatpro_ret, pred], dim='model', data_vars='minimal')\n", "\n", "pred" ] }, { "cell_type": "markdown", "id": "fbbfbf3d", "metadata": {}, "source": [ "Now, the predictions can be compared to the radiosonde observations. To do so, the `calculate_errors` function from `openMWR.calc_errors` is used.\n", "This function computes error metrics between two xarray datasets. Here, the root mean square error (RMSE), mean absolute error (MAE), and mean error or bias (ME) are calculated.\n", "These metrics are calculated as a mean over time (`errors_ds_height`) and as a mean over time and height (`errors_ds`)." ] }, { "cell_type": "code", "execution_count": 5, "id": "3580bb12", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 28kB\n",
       "Dimensions:  (model: 4, height: 138, error: 3)\n",
       "Coordinates:\n",
       "  * model    (model) object 32B 'RPG' 'NN_opt' 'MLR_opt' 'NN_R17_opt'\n",
       "  * height   (height) int64 1kB 0 10 25 50 75 100 ... 9600 9700 9800 9900 10000\n",
       "  * error    (error) <U4 48B 'RMSE' 'MAE' 'ME'\n",
       "Data variables:\n",
       "    rh       (error, model, height) float64 13kB 15.34 11.08 ... -7.76 -7.652\n",
       "    T        (error, model, height) float64 13kB 3.979 3.013 ... -0.06381
" ], "text/plain": [ " Size: 28kB\n", "Dimensions: (model: 4, height: 138, error: 3)\n", "Coordinates:\n", " * model (model) object 32B 'RPG' 'NN_opt' 'MLR_opt' 'NN_R17_opt'\n", " * height (height) int64 1kB 0 10 25 50 75 100 ... 9600 9700 9800 9900 10000\n", " * error (error) " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
modelRPGNN_optMLR_optNN_R17_opt
rh17.17868516.99178419.26189617.358225
T1.5199091.5373671.6579981.692248
\n", "
" ], "text/plain": [ "model RPG NN_opt MLR_opt NN_R17_opt\n", "rh 17.178685 16.991784 19.261896 17.358225\n", "T 1.519909 1.537367 1.657998 1.692248" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2026-02-21T12:03:29.519599\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.10.8, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "## MAE:" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
modelRPGNN_optMLR_optNN_R17_opt
rh13.19776312.87116514.87242912.813440
T1.0565641.0681801.1445741.183728
\n", "
" ], "text/plain": [ "model RPG NN_opt MLR_opt NN_R17_opt\n", "rh 13.197763 12.871165 14.872429 12.813440\n", "T 1.056564 1.068180 1.144574 1.183728" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2026-02-21T12:03:29.570682\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.10.8, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "## ME:" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
modelRPGNN_optMLR_optNN_R17_opt
rh-0.263820-4.016367-4.795405-4.326094
T0.1135680.2074800.204071-0.415500
\n", "
" ], "text/plain": [ "model RPG NN_opt MLR_opt NN_R17_opt\n", "rh -0.263820 -4.016367 -4.795405 -4.326094\n", "T 0.113568 0.207480 0.204071 -0.415500" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "## MAME:" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
modelRPGNN_optMLR_optNN_R17_opt
T0.1704460.2369090.2307270.469668
rh4.1699294.0163674.8006294.691033
\n", "
" ], "text/plain": [ "model RPG NN_opt MLR_opt NN_R17_opt\n", "T 0.170446 0.236909 0.230727 0.469668\n", "rh 4.169929 4.016367 4.800629 4.691033" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2026-02-21T12:03:29.627191\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.10.8, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for error_type in error_types:\n", " display(Markdown(f\"## {error_type}:\"))\n", " display(errors_ds.sel(error=error_type, drop=True).to_dataframe().T)\n", " \n", " if error_type == 'ME':\n", " display(Markdown(f\"## MAME:\"))\n", " display(np.abs(errors_ds_height.sel(error=error_type, drop=True)).mean(dim='height')[var].to_dataframe().T)\n", " \n", " plot_err(errors_ds_height.sel(error=error_type), err=error_type)" ] }, { "cell_type": "markdown", "id": "74c872c2", "metadata": {}, "source": [ "## Era5 Data Comparison" ] }, { "cell_type": "markdown", "id": "858e6961", "metadata": {}, "source": [ "The same analysis can be performed using ERA5 data instead of radiosonde observations.\n", "For this purpose, the ERA5 dataset created with the `create_analysis_dataset_from_forward_calc` method from the `openMWR.era5.ERA5Processor` class is used.\n", "The rest of the steps are the same as for the radiosonde comparison." ] }, { "cell_type": "code", "execution_count": 7, "id": "9e284771", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 5MB\n",
       "Dimensions:           (time: 734, height: 138, frq: 14)\n",
       "Coordinates:\n",
       "  * time              (time) datetime64[ns] 6kB 2024-11-21 ... 2025-12-22T22:...\n",
       "  * height            (height) int64 1kB 0 10 25 50 75 ... 9700 9800 9900 10000\n",
       "  * frq               (frq) float64 112B 22.24 23.04 23.84 ... 56.66 57.3 58.0\n",
       "Data variables: (12/20)\n",
       "    p                 (time, height) float64 810kB 943.4 942.2 ... 245.6 nan\n",
       "    rh                (time, height) float64 810kB 72.22 71.34 ... 35.31 nan\n",
       "    lwc               (time, height) float64 810kB 0.0 0.0 0.0 ... 0.0 0.0 nan\n",
       "    T                 (time, height) float64 810kB 275.2 275.1 ... 215.4 nan\n",
       "    ah                (time, height) float64 810kB 3.339 3.302 ... 0.01085 nan\n",
       "    TD                (time, height) float64 810kB 268.2 268.1 ... 208.8 nan\n",
       "    ...                ...\n",
       "    years_since_1970  (time) float64 6kB 54.89 54.89 54.89 ... 55.97 55.97 55.98\n",
       "    rain_flag         (time) float64 6kB 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0\n",
       "    azimuth_angle     (time) float32 3kB 0.0 0.0 0.0 0.0 ... 0.02 0.02 0.02 0.02\n",
       "    elevation_angle   (time) float32 3kB 90.0 90.0 90.0 ... 89.98 89.98 90.0\n",
       "    TB_IR             (time) float32 3kB 242.1 263.2 246.6 ... 271.6 271.6 271.5\n",
       "    old_time          (time) datetime64[ns] 6kB 2024-11-20T23:59:00 ... 2025-...\n",
       "Attributes:\n",
       "    latitude:   48.25\n",
       "    longitude:  11.5
" ], "text/plain": [ " Size: 5MB\n", "Dimensions: (time: 734, height: 138, frq: 14)\n", "Coordinates:\n", " * time (time) datetime64[ns] 6kB 2024-11-21 ... 2025-12-22T22:...\n", " * height (height) int64 1kB 0 10 25 50 75 ... 9700 9800 9900 10000\n", " * frq (frq) float64 112B 22.24 23.04 23.84 ... 56.66 57.3 58.0\n", "Data variables: (12/20)\n", " p (time, height) float64 810kB 943.4 942.2 ... 245.6 nan\n", " rh (time, height) float64 810kB 72.22 71.34 ... 35.31 nan\n", " lwc (time, height) float64 810kB 0.0 0.0 0.0 ... 0.0 0.0 nan\n", " T (time, height) float64 810kB 275.2 275.1 ... 215.4 nan\n", " ah (time, height) float64 810kB 3.339 3.302 ... 0.01085 nan\n", " TD (time, height) float64 810kB 268.2 268.1 ... 208.8 nan\n", " ... ...\n", " years_since_1970 (time) float64 6kB 54.89 54.89 54.89 ... 55.97 55.97 55.98\n", " rain_flag (time) float64 6kB 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0\n", " azimuth_angle (time) float32 3kB 0.0 0.0 0.0 0.0 ... 0.02 0.02 0.02 0.02\n", " elevation_angle (time) float32 3kB 90.0 90.0 90.0 ... 89.98 89.98 90.0\n", " TB_IR (time) float32 3kB 242.1 263.2 246.6 ... 271.6 271.6 271.5\n", " old_time (time) datetime64[ns] 6kB 2024-11-20T23:59:00 ... 2025-...\n", "Attributes:\n", " latitude: 48.25\n", " longitude: 11.5" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds_an_data = xr.load_dataset(f'{DATA_DIR}/sites/{site}/analysis/analysis_data_era5.nc')\n", "\n", "ds_an_data = ds_an_data.where(ds_an_data['time'].dt.day > 20, drop=True)\n", "\n", "ds_hatpro = ds_an_data.sel(data_source='hatpro', drop=True)\n", "ds_raso = ds_an_data.sel(data_source='era5', drop=True)\n", "\n", "ds_hatpro" ] }, { "cell_type": "code", "execution_count": null, "id": "99624949", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 23MB\n",
       "Dimensions:           (model: 4, time: 734, height: 138, frq: 14)\n",
       "Coordinates:\n",
       "  * model             (model) object 32B 'RPG' 'NN_opt' 'MLR_opt' 'NN_R17_opt'\n",
       "  * time              (time) datetime64[ns] 6kB 2024-11-21 ... 2025-12-22T22:...\n",
       "  * height            (height) int64 1kB 0 10 25 50 75 ... 9700 9800 9900 10000\n",
       "  * frq               (frq) float64 112B 22.24 23.04 23.84 ... 56.66 57.3 58.0\n",
       "Data variables: (12/23)\n",
       "    T                 (model, time, height) float64 3MB 275.2 275.1 ... 212.6\n",
       "    rh                (model, time, height) float64 3MB 72.22 71.34 ... 33.35\n",
       "    ah                (model, time, height) float64 3MB 3.339 3.302 ... 0.006\n",
       "    TD                (model, time, height) float64 3MB 268.2 268.1 ... 204.4\n",
       "    iwv               (model, time) float64 23kB 5.215 6.394 ... 6.473 6.457\n",
       "    lwc               (model, time, height) float64 3MB 0.0 0.0 0.0 ... 0.0 0.0\n",
       "    ...                ...\n",
       "    elevation_angle   (time) float32 3kB 90.0 90.0 90.0 ... 89.98 89.98 90.0\n",
       "    TB_IR             (time) float32 3kB 242.1 263.2 246.6 ... 271.6 271.6 271.5\n",
       "    old_time          (time) datetime64[ns] 6kB 2024-11-20T23:59:00 ... 2025-...\n",
       "    T_grad            (model, height, time) float64 3MB nan nan nan ... nan nan\n",
       "    lwp_from_lwc      (model, time) float64 23kB nan nan nan ... 44.08 53.01\n",
       "    iwv_from_ah       (model, time) float64 23kB nan nan nan ... 6.328 6.24 6.25\n",
       "Attributes:\n",
       "    latitude:   48.25\n",
       "    longitude:  11.5
" ], "text/plain": [ " Size: 23MB\n", "Dimensions: (model: 4, time: 734, height: 138, frq: 14)\n", "Coordinates:\n", " * model (model) object 32B 'RPG' 'NN_opt' 'MLR_opt' 'NN_R17_opt'\n", " * time (time) datetime64[ns] 6kB 2024-11-21 ... 2025-12-22T22:...\n", " * height (height) int64 1kB 0 10 25 50 75 ... 9700 9800 9900 10000\n", " * frq (frq) float64 112B 22.24 23.04 23.84 ... 56.66 57.3 58.0\n", "Data variables: (12/23)\n", " T (model, time, height) float64 3MB 275.2 275.1 ... 212.6\n", " rh (model, time, height) float64 3MB 72.22 71.34 ... 33.35\n", " ah (model, time, height) float64 3MB 3.339 3.302 ... 0.006\n", " TD (model, time, height) float64 3MB 268.2 268.1 ... 204.4\n", " iwv (model, time) float64 23kB 5.215 6.394 ... 6.473 6.457\n", " lwc (model, time, height) float64 3MB 0.0 0.0 0.0 ... 0.0 0.0\n", " ... ...\n", " elevation_angle (time) float32 3kB 90.0 90.0 90.0 ... 89.98 89.98 90.0\n", " TB_IR (time) float32 3kB 242.1 263.2 246.6 ... 271.6 271.6 271.5\n", " old_time (time) datetime64[ns] 6kB 2024-11-20T23:59:00 ... 2025-...\n", " T_grad (model, height, time) float64 3MB nan nan nan ... nan nan\n", " lwp_from_lwc (model, time) float64 23kB nan nan nan ... 44.08 53.01\n", " iwv_from_ah (model, time) float64 23kB nan nan nan ... 6.328 6.24 6.25\n", "Attributes:\n", " latitude: 48.25\n", " longitude: 11.5" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pred = run_model_list(model_list, ds_hatpro, device)\n", "\n", "pred = pred.sel(height=slice(0, 10000))\n", "\n", "pred = calc_derived_quantities(pred)\n", "\n", "ds_hatpro_ret = ds_hatpro[['T', 'rh', 'ah', 'TD', 'iwv', 'lwc', 'lwp', 'p']].expand_dims(model=['RPG'])\n", "\n", "pred = xr.concat([ds_hatpro_ret, pred], dim='model', data_vars='minimal')\n", "\n", "pred" ] }, { "cell_type": "code", "execution_count": 9, "id": "bb537998", "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "### RMSE" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
modelRPGNN_optMLR_optNN_R17_opt
rh20.30200722.66765325.67928724.960903
T1.5412761.6121891.7341781.591579
\n", "
" ], "text/plain": [ "model RPG NN_opt MLR_opt NN_R17_opt\n", "rh 20.302007 22.667653 25.679287 24.960903\n", "T 1.541276 1.612189 1.734178 1.591579" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2026-02-21T12:03:29.874866\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.10.8, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "### MAE" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
modelRPGNN_optMLR_optNN_R17_opt
rh15.05357516.32511918.64006317.575728
T1.1275111.1845051.2712921.121801
\n", "
" ], "text/plain": [ "model RPG NN_opt MLR_opt NN_R17_opt\n", "rh 15.053575 16.325119 18.640063 17.575728\n", "T 1.127511 1.184505 1.271292 1.121801" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2026-02-21T12:03:29.927620\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.10.8, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "### ME" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
modelRPGNN_optMLR_optNN_R17_opt
rh-7.412944-11.892634-11.503643-12.415092
T0.5886250.7068650.7392430.138773
\n", "
" ], "text/plain": [ "model RPG NN_opt MLR_opt NN_R17_opt\n", "rh -7.412944 -11.892634 -11.503643 -12.415092\n", "T 0.588625 0.706865 0.739243 0.138773" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "MAME:" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
modelRPGNN_optMLR_optNN_R17_opt
T0.5950940.7068650.7392430.214088
rh7.44224011.89263411.50364312.823779
\n", "
" ], "text/plain": [ "model RPG NN_opt MLR_opt NN_R17_opt\n", "T 0.595094 0.706865 0.739243 0.214088\n", "rh 7.442240 11.892634 11.503643 12.823779" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2026-02-21T12:03:29.984423\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.10.8, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "var = ['T', 'rh']\n", "error_types = ['RMSE', 'MAE', 'ME'] \n", "errors_ds, errors_ds_height = calculate_errors(pred[var], ds_raso[var], error_types = error_types) \n", "\n", "for error_type in error_types:\n", " display(Markdown(f\"### {error_type}\"))\n", " display(errors_ds.sel(error=error_type, drop=True).to_dataframe().T)\n", " if error_type == 'ME':\n", " display(Markdown(f\"MAME:\"))\n", " display(np.abs(errors_ds_height.sel(error=error_type, drop=True)).mean(dim='height')[var].to_dataframe().T)\n", " colors = plot_err(errors_ds_height.sel(error=error_type), err=error_type) #, zero_xlim=False" ] } ], "metadata": { "kernelspec": { "display_name": "venv (3.14.3)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.14.3" } }, "nbformat": 4, "nbformat_minor": 5 }