From 4bf46dbce42c9376e72bb5e63aa6277df0402255 Mon Sep 17 00:00:00 2001 From: Karan Bhanot Date: Thu, 19 Aug 2021 16:15:19 -0400 Subject: [PATCH] Add code and results for the various metrics --- notebooks/Atus Metrics and Plots.ipynb | 1214 +++++++++++++++++++++++ notebooks/Synthetic_Data_Evaluation.Rmd | 120 +++ results/ATUSEquity1.csv | 17 + results/MIMICRaceEquity1.csv | 133 +++ scripts/Equity_metrics.R | 161 +++ scripts/metrics.py | 33 + scripts/sunburst_process.R | 137 +++ scripts/table_process.R | 184 ++++ 8 files changed, 1999 insertions(+) create mode 100644 notebooks/Atus Metrics and Plots.ipynb create mode 100644 notebooks/Synthetic_Data_Evaluation.Rmd create mode 100644 results/ATUSEquity1.csv create mode 100644 results/MIMICRaceEquity1.csv create mode 100644 scripts/Equity_metrics.R create mode 100644 scripts/metrics.py create mode 100644 scripts/sunburst_process.R create mode 100644 scripts/table_process.R diff --git a/notebooks/Atus Metrics and Plots.ipynb b/notebooks/Atus Metrics and Plots.ipynb new file mode 100644 index 0000000..eeaa06e --- /dev/null +++ b/notebooks/Atus Metrics and Plots.ipynb @@ -0,0 +1,1214 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "3e1aa024", + "metadata": {}, + "source": [ + "# American Time Use Survey (ATUS) Metrics and Plots\n", + "\n", + "In this notebook, we use Pearson's Correlation Coefficient (PCC) and Directional Symmetry (DS) based time-series log disparity metric on the datasets. We also draw plots.\n", + "\n", + "## Background\n", + "\n", + "**ATUS dataset:**\n", + "This dataset includes details about how individuals across America spend their time. The average sleep times across several age groups across all days of the week are calculated and shown in a line plot. The real data is replicated in plots and we use synthetic data generation methods to produce line plots. These plots are meant to be evaluated against the plots generated on original data to evaluate how well do synthetic data generation methods work." + ] + }, + { + "cell_type": "markdown", + "id": "591fb5c2", + "metadata": {}, + "source": [ + "## Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "2df982d1", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "%matplotlib inline\n", + "\n", + "import sys\n", + "sys.path.append('../scripts/')\n", + "from metrics import pcc, ds\n", + "\n", + "from IPython.display import display_html\n", + "\n", + "import warnings\n", + "warnings.filterwarnings(\"ignore\")" + ] + }, + { + "cell_type": "markdown", + "id": "0d4f8d69", + "metadata": {}, + "source": [ + "## Import dataset\n", + "\n", + "We import the real and synthetic version of the ATUS dataset for sleep created in the paper [Synthetic Event Time Series Health Data Generation](https://arxiv.org/abs/1911.06411)." + ] + }, + { + "cell_type": "markdown", + "id": "fed02b30", + "metadata": {}, + "source": [ + "### Real data" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "f4abd7cc", + "metadata": {}, + "outputs": [ + { + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TUMONTHTUDIARYDAYTESEXTEAGEhour1_4hour2_5hour3_6hour4_7hour5_8hour6_9...hour21_0hour22_1hour23_2hour24_3hour25_4hour26_5hour27_6hour28_7hour29_8hour30_9
0711[65-74]60.030.00.00.00.00.0...60.060.060.060.060.030.00.00.00.00.0
11272[65-74]60.060.00.00.00.00.0...0.060.060.060.060.060.030.00.00.00.0
2271[35-44]60.030.00.00.00.00.0...60.060.060.060.060.030.00.00.00.00.0
31172[25-34]60.060.060.00.00.00.0...60.060.060.060.060.060.030.00.00.00.0
4822[35-44]60.060.060.00.00.00.0...60.00.060.060.060.060.045.00.00.00.0
\n", + "

5 rows × 34 columns

\n", + "
" + ], + "text/plain": [ + " TUMONTH TUDIARYDAY TESEX TEAGE hour1_4 hour2_5 hour3_6 hour4_7 \\\n", + "0 7 1 1 [65-74] 60.0 30.0 0.0 0.0 \n", + "1 12 7 2 [65-74] 60.0 60.0 0.0 0.0 \n", + "2 2 7 1 [35-44] 60.0 30.0 0.0 0.0 \n", + "3 11 7 2 [25-34] 60.0 60.0 60.0 0.0 \n", + "4 8 2 2 [35-44] 60.0 60.0 60.0 0.0 \n", + "\n", + " hour5_8 hour6_9 ... hour21_0 hour22_1 hour23_2 hour24_3 hour25_4 \\\n", + "0 0.0 0.0 ... 60.0 60.0 60.0 60.0 60.0 \n", + "1 0.0 0.0 ... 0.0 60.0 60.0 60.0 60.0 \n", + "2 0.0 0.0 ... 60.0 60.0 60.0 60.0 60.0 \n", + "3 0.0 0.0 ... 60.0 60.0 60.0 60.0 60.0 \n", + "4 0.0 0.0 ... 60.0 0.0 60.0 60.0 60.0 \n", + "\n", + " hour26_5 hour27_6 hour28_7 hour29_8 hour30_9 \n", + "0 30.0 0.0 0.0 0.0 0.0 \n", + "1 60.0 30.0 0.0 0.0 0.0 \n", + "2 30.0 0.0 0.0 0.0 0.0 \n", + "3 60.0 30.0 0.0 0.0 0.0 \n", + "4 60.0 45.0 0.0 0.0 0.0 \n", + "\n", + "[5 rows x 34 columns]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Load data\n", + "atus_data = pd.read_csv('../data/Atus/atus_train.csv')\n", + "\n", + "# Map age from numbers to actual values\n", + "age_mapper = {0: '[15-24]', 1: '[25-34]', 2: '[35-44]', 3: '[45-54]', 4: '[55-64]', 5: '[65-74]', 6: '75+'}\n", + "atus_data['TEAGE'] = atus_data['TEAGE'].apply(lambda x: age_mapper[x])\n", + "\n", + "# Show first rows\n", + "atus_data.head()" + ] + }, + { + "cell_type": "markdown", + "id": "3ce85b09", + "metadata": {}, + "source": [ + "### Synthetic data" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "ded4768f", + "metadata": {}, + "outputs": [ + { + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TUMONTHTUDIARYDAYTESEXTEAGEhour1_4hour2_5hour3_6hour4_7hour5_8hour6_9...hour21_0hour22_1hour23_2hour24_3hour25_4hour26_5hour27_6hour28_7hour29_8hour30_9
01042[25-34]60.060.030.01.00.00.0...59.060.060.060.060.060.021.07.01.00.0
11072[35-44]60.060.060.060.015.01.0...0.059.060.060.060.060.060.011.00.00.0
2172[55-64]60.060.060.022.00.00.0...60.060.060.060.060.060.058.00.00.00.0
3312[15-24]60.060.058.00.00.00.0...60.060.060.060.060.030.00.00.00.00.0
4742[45-54]60.060.048.08.00.00.0...60.060.058.017.00.00.00.00.00.00.0
\n", + "

5 rows × 34 columns

\n", + "
" + ], + "text/plain": [ + " TUMONTH TUDIARYDAY TESEX TEAGE hour1_4 hour2_5 hour3_6 hour4_7 \\\n", + "0 10 4 2 [25-34] 60.0 60.0 30.0 1.0 \n", + "1 10 7 2 [35-44] 60.0 60.0 60.0 60.0 \n", + "2 1 7 2 [55-64] 60.0 60.0 60.0 22.0 \n", + "3 3 1 2 [15-24] 60.0 60.0 58.0 0.0 \n", + "4 7 4 2 [45-54] 60.0 60.0 48.0 8.0 \n", + "\n", + " hour5_8 hour6_9 ... hour21_0 hour22_1 hour23_2 hour24_3 hour25_4 \\\n", + "0 0.0 0.0 ... 59.0 60.0 60.0 60.0 60.0 \n", + "1 15.0 1.0 ... 0.0 59.0 60.0 60.0 60.0 \n", + "2 0.0 0.0 ... 60.0 60.0 60.0 60.0 60.0 \n", + "3 0.0 0.0 ... 60.0 60.0 60.0 60.0 60.0 \n", + "4 0.0 0.0 ... 60.0 60.0 58.0 17.0 0.0 \n", + "\n", + " hour26_5 hour27_6 hour28_7 hour29_8 hour30_9 \n", + "0 60.0 21.0 7.0 1.0 0.0 \n", + "1 60.0 60.0 11.0 0.0 0.0 \n", + "2 60.0 58.0 0.0 0.0 0.0 \n", + "3 30.0 0.0 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 0.0 0.0 \n", + "\n", + "[5 rows x 34 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Load data\n", + "atus_synth_data = pd.read_csv('../data/Atus/atus_train_synthetic_1.csv')\n", + "\n", + "# Map age from numbers to actual values\n", + "atus_synth_data['TEAGE'] = atus_synth_data['TEAGE'].apply(lambda x: age_mapper[x])\n", + "\n", + "# As the sleep times are not whole numbers, we change them in synthetic data\n", + "atus_synth_data.iloc[:, 4:] = round(atus_synth_data.iloc[:, 4:])\n", + "\n", + "# Show first rows\n", + "atus_synth_data.head()" + ] + }, + { + "cell_type": "markdown", + "id": "4c451e73", + "metadata": {}, + "source": [ + "## Color function\n", + "\n", + "This function colors the pandas based on the defined thresholds." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "630aceae", + "metadata": {}, + "outputs": [], + "source": [ + "def _color_for_fairness(val):\n", + " \"\"\"\n", + " Returns the style for the given value\n", + " - background color\n", + " - text color (if changed)\n", + " \"\"\"\n", + " \n", + " # If background color is darker, change text color to \"white\"\n", + " change_text = False\n", + " \n", + " # Identify background color\n", + " if val < np.log(0.8):\n", + " color = '#d58d70'\n", + " elif ((val >= np.log(0.8)) and (val < np.log(0.9))):\n", + " color = '#eabcad'\n", + " elif ((val >= np.log(0.9)) and (val <= -np.log(0.9))):\n", + " color = '#d4e6e8'\n", + " elif ((val > -np.log(0.9)) and (val <= -np.log(0.8))):\n", + " color = '#a5b0cb'\n", + " else:\n", + " color = '#00205b'\n", + " change_text = True\n", + " \n", + " # Return\n", + " if change_text:\n", + " return 'background-color: {}; color: {}'.format(color, 'white')\n", + " else:\n", + " return 'background-color: {}'.format(color)" + ] + }, + { + "cell_type": "markdown", + "id": "ae767af6", + "metadata": {}, + "source": [ + "# Time metric\n", + "\n", + "In this section we apply the time-series log disparity metric on age groups and gender." + ] + }, + { + "cell_type": "markdown", + "id": "91100996", + "metadata": {}, + "source": [ + "## Age groups metric results" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "4d5db956", + "metadata": {}, + "outputs": [ + { + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PCC DS
[15-24]-0.0251070.000000
[25-34]0.003757-0.405465
[35-44]-0.014916-0.405465
[45-54]-0.019036-0.405465
[55-64]0.0062950.000000
[65-74]-0.074573-0.182322
75+-0.910678-0.693147
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def get_atus_age_err_df(real_data, synth_data):\n", + " \n", + " # Define required lists\n", + " all_real = []\n", + " all_other_real = []\n", + " all_synth = []\n", + " all_other_synth = []\n", + " \n", + " # Stratify by each age-group\n", + " for age_idx in [\"[15-24]\", \"[25-34]\", \"[35-44]\", \"[45-54]\", \"[55-64]\", \"[65-74]\", \"75+\"]:\n", + " for day_idx in [1, 2, 3, 4, 5, 6, 7]:\n", + " # Calculate relevant real and synthetic data\n", + " # Also, calculate all other real and synthetic data for each group\n", + " \n", + " curr_data = real_data[(real_data[\"TEAGE\"] == age_idx) & \n", + " ((real_data[\"TUDIARYDAY\"] == day_idx))]\n", + " all_real.append(np.mean((curr_data.iloc[:, 4:].sum(axis = 1)/60).values))\n", + "\n", + " other_data = real_data[(real_data[\"TEAGE\"] != age_idx) & \n", + " ((real_data[\"TUDIARYDAY\"] == day_idx))]\n", + " all_other_real.append(np.mean((other_data.iloc[:, 4:].sum(axis = 1)/60).values))\n", + "\n", + " curr_data = synth_data[(synth_data[\"TEAGE\"] == age_idx) & \n", + " ((synth_data[\"TUDIARYDAY\"] == day_idx))]\n", + " all_synth.append(np.mean((curr_data.iloc[:, 4:].sum(axis = 1)/60).values))\n", + "\n", + " other_data = synth_data[(synth_data[\"TEAGE\"] != age_idx) & \n", + " ((synth_data[\"TUDIARYDAY\"] == day_idx))]\n", + " all_other_synth.append(np.mean((other_data.iloc[:, 4:].sum(axis = 1)/60).values))\n", + " \n", + " # Calculate PCC and DS values\n", + " pcc_values = []\n", + " ds_values = []\n", + " for i in range(0, 49, 7):\n", + " pcc_values.append(np.log(pcc(all_real[i:i+7], all_synth[i:i+7])/\n", + " pcc(all_other_real[i:i+7], all_other_synth[i:i+7])))\n", + " ds_values.append(np.log(ds(all_real[i:i+7], all_synth[i:i+7])/\n", + " ds(all_other_real[i:i+7], all_other_synth[i:i+7])))\n", + "\n", + " # Create dataframe\n", + " res = pd.DataFrame({\"PCC\": pcc_values, \"DS\": ds_values})\n", + " res.index = [\"[15-24]\", \"[25-34]\", \"[35-44]\", \"[45-54]\", \"[55-64]\", \"[65-74]\", \"75+\"]\n", + " \n", + " # Return\n", + " return res\n", + "\n", + "age_fairness = get_atus_age_err_df(atus_data, atus_synth_data)\n", + "age_fairness.style.applymap(_color_for_fairness)" + ] + }, + { + "cell_type": "markdown", + "id": "449ed8cd", + "metadata": {}, + "source": [ + "## Age groups stratified by gender metric results" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "c64c2587", + "metadata": {}, + "outputs": [ + { + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PCC DS
Male [15-24]-0.045852-0.182322
Male [25-34]-0.006313-0.182322
Male [35-44]-0.030661-0.405465
Male [45-54]-0.052947-0.405465
Male [55-64]-0.023886-0.405465
Male [65-74]-0.0339210.000000
Male 75+-2.175244-inf
Female [15-24]-0.028932-0.182322
Female [25-34]-0.005141-0.182322
Female [35-44]-0.008614-0.405465
Female [45-54]-0.045094-0.405465
Female [55-64]-0.045089-0.182322
Female [65-74]-0.295852-0.405465
Female 75+-0.378053-0.182322
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def get_atus_gender_age_err_df(real_data, synth_data):\n", + " \n", + " # Define required lists\n", + " all_real = []\n", + " all_other_real = []\n", + " all_synth = []\n", + " all_other_synth = []\n", + " \n", + " # Stratify by each gender and age-group\n", + " for gender_idx in [1, 2]:\n", + " for age_idx in [\"[15-24]\", \"[25-34]\", \"[35-44]\", \"[45-54]\", \"[55-64]\", \"[65-74]\", \"75+\"]:\n", + " for day_idx in [1, 2, 3, 4, 5, 6, 7]:\n", + " # Calculate relevant real and synthetic data\n", + " # Also, calculate all other real and synthetic data for each group\n", + " \n", + " curr_data = real_data[(real_data[\"TESEX\"] == gender_idx) & \n", + " (real_data[\"TEAGE\"] == age_idx) & \n", + " ((real_data[\"TUDIARYDAY\"] == day_idx))]\n", + " all_real.append(np.mean((curr_data.iloc[:, 4:].sum(axis = 1)/60).values))\n", + "\n", + " other_data = real_data[((real_data[\"TESEX\"] != gender_idx) |\n", + " (real_data[\"TEAGE\"] != age_idx)) & \n", + " ((real_data[\"TUDIARYDAY\"] == day_idx))]\n", + " all_other_real.append(np.mean((other_data.iloc[:, 4:].sum(axis = 1)/60).values))\n", + "\n", + " curr_data = synth_data[(synth_data[\"TESEX\"] == gender_idx) & \n", + " (synth_data[\"TEAGE\"] == age_idx) & \n", + " ((synth_data[\"TUDIARYDAY\"] == day_idx))]\n", + " all_synth.append(np.mean((curr_data.iloc[:, 4:].sum(axis = 1)/60).values))\n", + "\n", + " other_data = synth_data[((synth_data[\"TESEX\"] != gender_idx) |\n", + " (synth_data[\"TEAGE\"] != age_idx)) & \n", + " ((synth_data[\"TUDIARYDAY\"] == day_idx))]\n", + " all_other_synth.append(np.mean((other_data.iloc[:, 4:].sum(axis = 1)/60).values))\n", + " \n", + " # Calculate PCC and DS values\n", + " pcc_values = []\n", + " ds_values = []\n", + " for i in range(0, 98, 7):\n", + " pcc_values.append(np.log(pcc(all_real[i:i+7], all_synth[i:i+7])/\n", + " pcc(all_other_real[i:i+7], all_other_synth[i:i+7])))\n", + " ds_values.append(np.log(ds(all_real[i:i+7], all_synth[i:i+7])/\n", + " ds(all_other_real[i:i+7], all_other_synth[i:i+7])))\n", + "\n", + " # Create dataframe\n", + " res = pd.DataFrame({\"PCC\": pcc_values, \"DS\": ds_values})\n", + " res.index = [\"Male [15-24]\", \"Male [25-34]\", \"Male [35-44]\", \"Male [45-54]\", \n", + " \"Male [55-64]\", \"Male [65-74]\", \"Male 75+\",\n", + " \"Female [15-24]\", \"Female [25-34]\", \"Female [35-44]\", \"Female [45-54]\", \n", + " \"Female [55-64]\", \"Female [65-74]\", \"Female 75+\"]\n", + " \n", + " # Return\n", + " return res\n", + "\n", + "gender_age_fairness = get_atus_gender_age_err_df(atus_data, atus_synth_data)\n", + "gender_age_fairness.style.applymap(_color_for_fairness)" + ] + }, + { + "cell_type": "markdown", + "id": "983e4d2e", + "metadata": {}, + "source": [ + "## Overall metric results" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "b20f2a5f", + "metadata": {}, + "outputs": [ + { + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PCC DS
[15-24]-0.0251070.000000
[25-34]0.003757-0.405465
[35-44]-0.014916-0.405465
[45-54]-0.019036-0.405465
[55-64]0.0062950.000000
[65-74]-0.074573-0.182322
75+-0.910678-0.693147
      \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PCC DS
Male [15-24]-0.045852-0.182322
Male [25-34]-0.006313-0.182322
Male [35-44]-0.030661-0.405465
Male [45-54]-0.052947-0.405465
Male [55-64]-0.023886-0.405465
Male [65-74]-0.0339210.000000
Male 75+-2.175244-inf
      \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PCC DS
Female [15-24]-0.028932-0.182322
Female [25-34]-0.005141-0.182322
Female [35-44]-0.008614-0.405465
Female [45-54]-0.045094-0.405465
Female [55-64]-0.045089-0.182322
Female [65-74]-0.295852-0.405465
Female 75+-0.378053-0.182322
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Combine all metrics\n", + "total = pd.concat([age_fairness, gender_age_fairness])\n", + "\n", + "# Arrange them side-by-side\n", + "styler = []\n", + "for i in range(0, 21, 7):\n", + " styler.append(total.iloc[i:i+7,:].style.set_table_attributes(\"style='display:inline'\").applymap(_color_for_fairness))\n", + "\n", + "# Show the results together\n", + "display_html(styler[0]._repr_html_() + \"\\xa0\\xa0\\xa0\\xa0\\xa0\\xa0\" + \n", + " styler[1]._repr_html_() + \"\\xa0\\xa0\\xa0\\xa0\\xa0\\xa0\" + \n", + " styler[2]._repr_html_(), raw = True)" + ] + }, + { + "cell_type": "markdown", + "id": "a3ffd80d", + "metadata": {}, + "source": [ + "# Covariate plots\n", + "\n", + "This section generates plots for `age` and `gender` protected attributes in the dataset." + ] + }, + { + "cell_type": "markdown", + "id": "425a9462", + "metadata": {}, + "source": [ + "## Age covariate plot for 15-24 and 75+\n", + "\n", + "We generate two plots, one for the individuals aged `[15-24]` and the other for individuals aged `75+`." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "a240313f", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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IoCSIxEREREREUDJkYiIiIiICKDkSEREREREBFByJCIiIiIiAig5EhERERERAZQciYiIiIiIAEqOREREREREACVHIiIiIiIigJIjERERERERQMmRiIiIiIgIoORIREREREQEUHIkIiIiIiICKDkSEREREREBlByJiIiIiIgASo5EREREREQAJUciIiIiIiKAkiMRERERERFAyZGIiIiIiAig5EhERERERARQciQiIiIiIgIoORIREREREQGUHImIiIiIiABKjkRERERERAAlRyIiIiIiIkAmJkfbt28nODg4xXM//fQTPXr0SLV9ly5dCA4OJjg4mJEjR2ZWWCIiIoD6KRERuZVDZhx0+vTpLFmyBFdX1+Tndu/ezfz58zEM45b2cXFxGIZBSEhIZoQjIiKSgvopERFJTaaMHPn6+jJ58uTkxxcuXGDSpEm8+uqrqbbfu3cvMTExDBw4kMcee4xt27ZlRlgiIiKA+ikREUldpowctWnThmPHjgGQlJTEqFGjGDlyJM7Ozqm2d3FxYdCgQXTr1o2jR4/y+OOP8/vvv+PgkCnhiYhIHqd+SkREUpPpV/Vdu3YRFhbGm2++SVxcHAcPHmTcuHGMGjUquY2/vz9+fn5YLBb8/f3x8vLizJkzFCtWLLPDExGRPE79lIiIXJfpyVG1atX45ZdfADh27BgvvPBCig4HYP78+ezfv58333yTU6dOERUVReHChTM7NBEREfVTIiKSzKalvIcPH87x48fp2rUrV65coVevXjz//POMHz9eUxVERMTm1E+JiOQtFiO1sjw5RFBQEAsXLrR1GCIieZquxWnT70ZExPbu5lqsTWBFRERERERQciQiIiIiIgIoORIREREREQGUHImIiIiIiABKjkRERERERAAlRyIiIiIiIoCSIxEREREREUDJkYiIiIiICKDkSEREREREBFByJCIiIiIiAig5EhERERERAZQciYiIiIiIAEqOREREREREACVHIiIiIiIiADjYOgAREbGNxVsjeX/pPo5fjKG4lysvtylP55olbB2WiIiIzSg5EhHJgxZvjWTkwh3EJCQBEHkxhpELdwAoQRIRkTxL0+pERPKg95fuS06MrotJSOL9pftsFJGIiIjtKTkSEcmDjl+MuavnRURE8gIlRyIieVDR/C6pPl/cyzWLIxEREck+lByJiORBdUsXuOU5V0d7Xm5T3gbRiIiIZA8qyCAiksfEJ1r558gFyhZ2IybBqmp1IiIi1yg5EhHJY5ZsP87Jy7F8O6AuLcr72DocERGRbEPT6kRE8hDDMJgeepgKRT1oHljY1uGIiIhkK0qORETykJX7z7Dv1BUeb1oGi8Vi63BERESyFSVHIiJ5yLRVhynq6ULH6sVtHYqIiEi2o+RIRCSP+PfYRdYdPsfAJqVxctDlX0RE5L/UO4qI5BFfhB7Gw9mBXvV8bR2KiIhItqTkSEQkDwg/F81vO07Qu4EvHi6Otg5HREQkW1JyJCKSB3y15jD2dhYGNva3dSgiIiLZlpIjEZFc7sLVeH7YdIxONUpQxNPF1uGIiIhkW0qORERyuZD1YcQkJDGkWRlbhyIiIpKtKTkSEcnFYhOS+O7vo7QsX5jAIh62DkdERCRbU3IkIpKLzd98jHNX43mieYCtQxEREcn2Mi052r59O8HBwSme++mnn+jRo8ctba1WK6+//jo9evQgODiYsLCwzApLRCTPSLIafLn6MNVL5qe+v7etw8l21E+JiMh/ZUpyNH36dF577TXi4uKSn9u9ezfz58/HMIxb2v/555/Ex8czd+5cXnzxRSZMmJAZYYmI5Cl/7D7J0XPRDGkWgMVisXU42Yr6KRERSU2mJEe+vr5Mnjw5+fGFCxeYNGkSr776aqrtN2/eTNOmTQGoUaMGO3fuzIywRETyDMMw+CL0ML7e+Whbpaitw8l21E+JiEhqMiU5atOmDQ4ODgAkJSUxatQoRo4ciZubW6rto6KicHd3T35sb29PYmJiZoQmIpInbAq7wNbwiwxu6o+9nUaN/kv9lIiIpCbTCzLs2rWLsLAw3nzzTV544QUOHjzIuHHjUrRxd3fn6tWryY+tVmtypyUiInfvi1WHKJDPkW61S9k6lGxP/ZSIiFyX6Vf2atWq8csvvwBw7NgxXnjhBUaNGpWiTa1atVixYgXt27dn27ZtBAYGZnZYIiK51sHTV/hzz2mea1UOVyd7W4eT7amfEhGR62xaynv48OEcP36c1q1b4+TkRM+ePXnnnXcYOXKkLcMSEcnRpocewdnBjsca+tk6lBxP/ZSISN5iMVIry5NDBAUFsXDhQluHISKSbZy+HEuTd1fQvW5JxnaumiXn1LU4bfrdiIjY3t1ci7UJrIhILvLt30dJsFoZ3KSMrUMRERHJcZQciYjkElFxicxcH0bbykUpXSj1qmsiIiKSNiVHIiK5xJx/wrkcm8iQZncwarTmIzgSmvK5I6Hm8yIiInmUkiMRkVwgIcnK12uOUM/fm5q+BdJ/Q4laMK8/7F4ChmEmRvP6m8+LiIjkUdqkQUQkF/jl3xMcvxTL252r3Nkb/JtBy1HwQzBU6QqHV0C3b83nRURE8iiNHImI5HCGYfBF6GHK+rjTsrzPnb4Jdi4Ax3ywcz7UGaTESERE8jwlRyIiOdyag2fZc+IyQ5qWwc7Ocmdv2vcrhK0FiwWaDYdNX926BklERCSPUXIkIpLDfbHqMD4eznSqWfzO3pCUAL++BBZ76DELHhhlTqmb118JkoiI5GlKjkREcrCdkZdYc/AsAxr74+xgf2dv2vQ1XD5uJkUBLc3n/JuZCVLklkyLVUREJLtTQQYRkRxs+urDuDnZ07u+7529IeYirJwA/s2hyQspX/NvpnVHIiKSp2nkSEQkhzp2IZqf/z1Br3q+5Hd1vLM3rf4AYi7AQ2PN9UYiIiKSTMmRiEgO9fWao1iAgU387+wNF8Jgw1So0RuKVcvU2ERERHIiJUciIjnQpegE5mwMp2P14hT3cr2zN/31llmE4YHXMjc4ERGRHErJkYhIDjRzQxjR8UkMaVbmzt5wbJO5r1GjZ8DzDqvaiYiI5DFKjkREcpjYhCS+WXuUZoGFqVjMM/03GAYsHQXuRaDxc5kfoIiISA6VJ6vVLd4ayftL93H8YgzFvVx5uU15OtcsYeuwRETuyOKtkZyNiuOJOx012rMEItZDx0/A2T1zgxMREcnB8lxytHhrJCMX7iAmIQmAyIsxjFy4A0AJkohke1arwbTVh6lc3JNGAQXTf0NiPPzxBvhUgpp9Mz9AERGRHCzPTat7f+m+5MToupiEJN5fus9GEYmI3Lm/9p7m8JmrDGlWBsudlOLe+CVcOAIPvQ12d7hJrIiISB6V55Kj4xdj7up5EZHsZFroIUp4ufJw1WLpN44+D6vehYAHoOyDmR+ciIhIDpfnkqO0St7ecSlcEREb2Rx2gY1HLzC4qT8O9ndw+V79AcRdNjd8FRERkXTlueTo5TblcXVMObXE1dGel9uUt1FEIiJ3ZlroIfK7OtK9Tqn0G58/DBu+gBp9oEjlzA9OREQkF8hzyVHnmiV4J6gqJW4aKXqlnarViUj2dvhMFMt2nyK4gR9uzndQS+fPt8DeSRu+ioiI3IU8V60OzASpc80ShJ27SouJK7lwNcHWIYmI3NaXa47gaG9Hv0al028cvgF2L4YWr4JH0cwOTUREJNfIcyNHN/Mr6EbzwMLM/iechCSrrcMREUnVmStxzN98jEdrlaCwh/PtGxsGLBsFHsWg0dNZE6CIiEgukaeTI4DgBn6cvhLHH7tP2ToUEZFUzVh3lIQkK4Ob3sGmr7sWwbGN5nQ6J7fMD05ERCQXyfPJUYvyPpTwciVkXZitQxERuUV0fCIh68NoXbEIAYXdb984MQ7+fBOKVIHqvbIkPhERkdwkzydH9nYW+jTwZd3hcxw8fcXW4YiIpPDDxgguRifwRPM7GDX6ZxpcDDNLd2vDVxERkbuW55MjgO51SuFkb8fM9eG2DkVEJFlikpUv1xyhtl8Bavt5375x9HkIfR/KPQQBLbMmQBERkVzmjpIjq9VKUlISmzZtIj4+PrNjynKF3J1pX7UoCzYf42pcoq3DEREB4LedJzl2IYYhze5g1GjVuxB3BVqPyfzAsqHc3k+JiEjWSLeU97hx4wgICOD48ePs2rWLQoUK8e6772ZFbFkquKEfi7cd58dtx+ld39fW4YhIHmcYBtNCD1OmkButKxa5feNzh2Djl1CrH/hUzJoAs5G80k+JiEjmS3fkaMeOHfTs2ZOtW7fy1VdfcfLkyayIK8vV8i1AxWKezFh3FMMwbB2OiORx6w6dY0fkJR5vVgY7O8vtG//xOji4QMtXsya4bCav9FMiIpL50k2OrFYrO3fupGTJksTHx3P16tWsiCvLWSwWghv4sffkFbaEX7B1OCKSx30RephC7s50qVni9g3D/oa9P0OTYeDukyWxZTd5pZ8SEZHMl25y1LlzZ9566y0GDhzI+++/T48ePbIiLpvoXLM4Hs4OzFBZbxGxob0nL7Nq/xn6N/LDxfE2VeesVlg6CjyKQ4P/ZV2A2Uxe6qdERCRzpbvmKCYmhnnz5gEwatSoOz7w9u3bmThxIiEhIRw8eJDRo0djGAalS5dm7NixODikPHWXLl1wdzf38ChZsiTvvPPO3fwcGSKfkwOP1i7JrA1hjO5QiULu6exELyKSCaaFHiafkz19G/jdvuGuhXB8C3SeCk75sia4bCgv9VMiIpK50h05WrVqFUlJSXd10OnTp/Paa68RFxcHwKRJk3jhhReYM2cOACtWrEjRPi4uDsMwCAkJISQkxKYdTt8GfiQkGczdGGGzGEQk7zpxKYYl247TvU4pvPI5pd0wIRb+fAuKVoNqeXukJK/1UyIiknnSHTm6cOECTZs2pWTJklgsFiwWS3LnkRZfX18mT57M8OHDAZg8eTL29vbEx8dz5syZ5Dtv1+3du5eYmBgGDhxIYmIiL7zwAjVq1Lj3n+o+lPVxp1FAQb7fEM6TzQOwT28htIhIBvp6zREMYFAT/9s33DAFLoVD58/ALm9vWZfX+ikREck86SZHU6dOveuDtmnThmPHjiU/tre3JzIykgEDBuDu7k6FChVStHdxcWHQoEF069aNo0eP8vjjj/P777/fMqUhqwQ38OOpWVtYsfc0D1ZKp4SuiEgGuRybwOx/Ini4ajFKed9mmtzVs7B6EgS2A/9mWRdgNpUX+ykREckc6V7VFy1adMtzTz/99F2fqESJEixbtox58+YxYcKEFHtQ+Pv74+fnh8Viwd/fHy8vL86cOUOxYsXu+jwZ4cFKRSji6UzI+jAlRyKSZb7fEE5UXGL6m76unADxV/Pshq//lRf7KRERyRzpzsUoVKgQhQoVomDBgpw6dYoTJ07c9UmefPJJjh49CoCbmxt2/5kCMn/+fCZMmADAqVOniIqKonDhwnd9noziaG9Hr3q+rNp/hrBzKgkrIpkvPtHKN2uP0LhsQaqUyJ92w7MHYNPXUGcAFA7MugCzsbzYT4mISOZId+SoZ8+eKR4PHjz4rk8yZMgQRowYgaOjI66urowdOxaA4cOHM2zYMLp27crIkSPp1asXFouF8ePH23yqQq96vkxefpBZG8J5tX3e23FeRLLWj9siOXU5jve6Vr99wz9eB8d80GJk1gSWA+TVfkpERDJeulf2I0eOJH9/5swZjh8/fkcHLlmyJD/88AMAtWrVSnVx7HvvvZf8/QcffHBHx80qRTxdaFO5CD9siuCF1oG332tEROQ+WK0G01cfpkJRD5qVK5R2wyOrYd+v0OoNcLtNuzwmr/ZTIiKS8dJNjl5//fXk752dnXnllVcyNaDspG8DP37dcZKf/z1B19olbR2OiORSK/efZv+pKD7sUR2LJY0KmVYrLBsF+UtBg6eyNsBsLi/3UyIikrHSTY5CQkK4cOECERERlCxZEm9v76yIK1toWKYgAYXdCFkfpuRIRDLNF6sOUzy/Cx2qFU+70Y4f4MR2CJoOjq5ZF1wOkJf7KRERyVjpFmT47bff6NmzJ1OnTqVHjx78+OOPWRFXtmCxWAhu4Mf2iIv8e+yircMRkVxoe8RFNhw5z8Am/jjap3FJToiBv8ZA8ZpQpWvWBpgD5OV+SkREMla6I0fffvstCxcuxM3NjaioKPr160enTp2yIrZsIah2Sd79fR8z14fxXlcvW4cjIrnMtNDDeLg40LOeb9qN1n0GlyPNUaM8vuFravJ6PyUiIhkn3V7WYrHg5uYGgLu7O87OzpkeVHbi6eJI55ol+HHbcS5FJ9g6HBHJRcLPRfPbzhP0qe+Hu3Ma96qiTsOaD6FCByjdOGsDzCHyej8lIiIZJ92Ro1KlSjFhwgTq1KnDpk2b8PW9zd3NXKpvA19m/xPOvM0RDG6azuaMIiJ36Ms1h7G3szCgcem0G618BxJj4cG3siyunEb9lIiIZJR0R47eeecdSpUqxd9//02pUqV4++23syKubKVy8fzU9ivAzPVhWK2GrcMRkVzg/NV4ftgUQZeaJSji6ZJ6o9N7YfO3UGcQFCqbpfHlJOqnREQko6Q5crRx48bk7wMDAwkMNHdi37ZtG3Xr1s38yDLLmo+gRC3wb3bjuSOhELkFmgxL822PNfTjuTnbWHPwLM0CtSu6iNyfGeuOEptgZUiz24xG//E6OHlAc5WmTk2u7adERMRm0kyOZs+enfz9hg0baNCgAYZhYLFYcnanU6IWzOsP3b41E6QjoTce30bbKkUp6OZEyPowJUcicl9i4pOYsS6MVhV8KOvjkXqjwyvhwFJoPQbcCmZpfDlFru2nRETEZtJMjiZNmpT8fXBwcO7ZGdy/mZkIze4FFTvAgT9uJEq34exgT4+6pZi66hCRF2Mo4aV9RkTk3szfcozzV+PTHjWyJsHS18DLF+o9kbXB5SC5tp8SERGbuaOasGnu2J5T+TcD9yKwfQ6UeyjdxOi63vV9MYDZG8IzNz4RybWSrAZfrj5M9VJe1PNPY7PS7XPg1A548E1wTGM9kqSQ6/opERGxiby5YcaRUIi5AK7e5oeQzd/d0dtKFshHqwo+zNkYTnyiNZODFJHcaOmuk4Sdi+aJZmVS/0AffxWWvw0l6kDloKwPUEREJA9Lc1rdBx98kNxxR0REpJi+8MILL2R+ZJnl+hqj7t9BAX+Y1gJ+eg4cXaFa93Tf3reBH3/uOc3vu07ySPXimR6uiOQehmHwRehh/Armo03loqk3WvcZXDlhTvfVaMht5dp+SkREbCbN5KhMmRtz4Z999tksCSZLRG5Jucao/y8w/QH47RUo0wLcfW779mblCuPrnY+Z68KUHInIXfnnyHm2R1zk7c5VsLdLJfG5ctKsqFnxEfBtkOXx5TS5tp8SERGbSTM56tKlS1bGkXX+W67bpwI8thhmdIKZj5rJkotnmm+3s7PQt4Ev43/dy96Tl6lQNO22IiI3mxZ6GG83J7rVLpl6gxXjICkeWmvD1zuRa/spERGxmby55ui/StWD7jPg9G6Y0xsSYm/bvFvtUjg52DFzfVgWBSgiOd2BU1f4a+9pHmvoh4uj/a0NTu2CrTOh3hDwvs3eRyIiIpJplBxdV641dPocjq6GhY+bpXTTUMDNiY7VirNoSyRXYhOyMEgRyammrz6Mi6MdjzUsnXqDZaPB2ROavZSlcYmIiMgNaU6ruy4qKorQ0FDi4+OTn+vcuXNmxmQ71XtA9DlYOhJ+eRE6fJjmgujghn4s2HKMxVsjCU7rw46ICHDqciyLtkbSq54v3m5OtzY4+Ccc+gvajId8aZT3ljTlqX5KREQyVbrJ0dChQ/Hx8aFYsWJAHthLouFQuHoa1nxoFmdo+WqqzaqXzE/VEvkJWR9G3wZ+uf/3IiL37Ju1R0myGgxuksp0OWsSLHsdCpSGuoOzPLbcIM/1UyIikmnSTY4Mw2DixIlZEUv20eoNuHoGVr0L+QpB/SG3NLFYLAQ38GP4gn/558h56pcpaINARSS7i4pLZNaGMNpVKYZvwXy3Ntg6E07vgm7fgYNz1geYC+TJfkpERDJFumuOypcvz/bt24mPj0/+yvUsFujwMZR/GH4bDjsXpNqsY/XieLo4EKLCDCKShjn/hHMlNpEhzVIZNYqLMivUlaoPlTplfXC5RJ7sp0REJFOkO3L0zz//sHz58uTHFouFv/76K1ODyhbsHaDrVxASBAufANcCEPBAiiauTvZ0q1OK7/4+yukrsfh4uNgoWBHJjhKSrHy15gj1/b2pXsrr1gZ/fwJRp6DHLG34eh/ybD8lIiIZLt3kaMmSJVkRR/bk6Aq9ZsO3D8OcvtD/JyhRO0WTPvV9+WrNEeb8E8GzrcrZKFARyY5+2n6cE5diGdelyq0vXj4Oaz+BykFQqm7WB5eL5Ol+SkREMlSaydGYMWN4/fXX6dGjxy2LW+fMmZPpgWUbrl7QdwF89RDM7AqDlkGhG0lQmcLuNC1XiO83hDO0RQAO9qqOLiLmOphpoYcJLOJOi0CfWxssHwdGEjz4RtYHl0uonxIRkYyWZnI0dOhQACZNmpRlwWRbHkUheBF83QZCupgJkmfx5JeDG/gxJGQzf+45TdsqRW0YqIhkF6EHzrL35BXe71oNO7v/TJk7uQO2zYJGT5tV6uSeqJ8SEZGMlmZyVKhQIQBKlCiRZcFkawUDzBGkbx421yEN+DV5P5IHKvhQPL8LM9eHKTkSEQCmhR6iiKcznWr85xpqGLDsNXNUuumLNoktt1A/JSIiGU1zwO5GserQ63s4fwhm94T4aAAc7O3oXd+XNQfPcuhMlI2DFBFb2xl5ibUHzzGgsT9ODv+5zB74Aw6vhOYjzEIvIiIikm2kmxzt2LEjK+LIOfybwaNfwbGNMK8/JCUA0L1uKRztLcxaH27b+ETE5qaFHsbd2YHe9X1TvpCUCH+MBu8AqDPQNsHlQuqnREQko6SbHH399dd0796dmTNncvny5ayIKfur9Ag8PAkOLIUfnwarFR8PF9pWKca8zRFExyfaOkIRsZGI89H8suMEveqVwtPFMeWLW2fAmb3Q+i1wcLJNgLmQ+ikREcko6SZHH374IdOnT8disfDcc8/x4osvsmHDhqyILXurMwBavgb/zjHvBGMWZrgSm8hP24/bODgRsZWv1hzBAgxs4p/yhbgrsGI8+DaCCh1sEltupX5KREQyyh2tOTp79izHjx/nwoULFChQgKVLl/LSSy9ldmzZX7OXoN4TsO5TWPsxdUsXoHwRD2asC8MwDFtHJyJZ7GJ0PHM3RvBIjeIUy++a8sU1H8HVM9BmrDZ8zQTqp0REJCOkuwlst27dcHFxoXv37jz33HM4OZlTQQYNGpTpwWV7Fgu0nQDRZ+GP17HkK0jfhk0ZvXgn2yIuUtNXi61F8pKZ68OISUhiSLMyKV+4dMy8iVK12y0bScv9Uz8lIiIZJd2Ro9GjRxMSEkLHjh1xcnLin3/+AeCrr7667fu2b99OcHAwAAcPHqRXr1707NmTESNGkJiYck2O1WpN3sgvODiYsLCwe/15sp6dHXSeCgEPwJJn6eq+Azcne0LW56CfQUTuW2xCEt/+HUbzwMJUKOqZ8sXlY80S3q1et01wuZz6KRERyShpJkebNm1izpw5DB8+nLlz5zJ37ly+//57xowZk+5Bp0+fzmuvvUZcXBxgbtD3wgsvJO9YvmLFihTt//zzT+Lj45k7dy4vvvgiEyZMuJ+fKes5OEH3ECheA9fFgxgWeI6f/z3B+avxto5MRLLIoq2RnI2K44n/jhod3wbbZ0ODp8DLN9X3yr1RPyUiIhktzeTI09OTs2fPEh8fz5kzZzhz5gwXLlzg5ZdfTvegvr6+TJ48Ofnx5MmTqVu3bvKx3N3dU7TfvHkzTZs2BaBGjRrs3LnzXn8e23F2h97zIH8pBoaPoEzSUeZtirB1VCKSBaxWg+mhh6laIj8NAwreeOH6hq/5CkLTF2wXYC6lfkpERDJammuOAgMDCQwMpHv37vj4+NzVQdu0acOxY8eSH9vb2xMZGcmAAQNwd3enQoUKKdpHRUWl6Ijs7e1JTEzEwSHdJVHZi1tBCF6I/Vdt+D7xPZ5c58XjTctgZ6fF1yK52R97TnH47FUm96qJ5eZiC/t/h6Orof1EcMlvuwBzKfVTIiKS0dIcOXr22WcBCAoKokmTJim+7kWJEiVYtmwZvXr1umU6gru7O1evXk1+bLVac26H4+ULwQtxt09iQvSb/L1jr60jEpFMNi30MCULuNKuStEbTyYlwLLRULAc1O5vs9hyM/VTIiKS0dJMjj755BMAlixZwpo1a1J83a0nn3ySo0ePAuDm5oadXcrT1qpVi9DQUAC2bdtGYGDgXZ8jW/GpiKXPDxS3O0/JX4IhVpsSiuRWm8POsznsAoOb+ONgf9O1bfO3cO4AtB4D9o5pvl/unfopERHJaOne9ho8eDClSpWie/fuNG7c+J5OMmTIEEaMGIGjoyOurq6MHTsWgOHDhzNs2DBat27N2rVr6dmzJ4ZhMH78+Hs6T3biWLoBP1V8l0d2v0jszF649F8IDs62DktEMtgXqw7jlc+R7nVL3Xgy9hKsfAdKN4Xy7WwXXB6hfkpERDKKxbiD3Up37NjBwoUL+ffff3nwwQd56qmnsiK2dAUFBbFw4UJbh5Gm4xdjmPj+W0xynAKVOkHXb8DO3tZhiUgGOXQmigcnreLplmV58aHyN174801Y8yEMWQXFa9gqvCyTHa7F6qdERCQtd3MtTnefI4By5cpRo0YNvLy82LRp030Fl5cU93LlaoWufGDpB7t/hF9fMqtXiUiu8OXqwzja29GvUekbT14Mh3WfQ7WeeSIxyi7UT4mISEZId1rdyJEj2b59O23atOGtt96iZMmSWRFXrhHcoDR9d7WhYxUHAjd9BW4+0HKkrcMSkft05kocC7ZE0rV2SQq53zRl9q8xYLFAq9G2Cy6PUT8lIiIZJd3kqHXr1owbN+6WxalyZxoFFKRMITdGXApiYc04WDUB3ApBvcdtHZqI3Ifv/j5KQpKVx5vetOlr5GbYMQ+avgj59QE9q6ifEhGRjJJmcvT5558zdOhQfv75Z3755ZcUr33wwQeZHlhuYWdnoU8DP97+eTc7HxlDlejz8OvL5qaQVYJsHZ6I3IOrcYmErA/joUpF8C/kZj5pGLD0NXArDE2et22AeYT6KRERyWhpJkcPPPAAAD179syyYHKrrrVK8v7SvczaGMk7Xb+GkC6wcAi4FoCAlrYOT0Tu0g+bIrgUk8CQZgE3ntz7C4T/DR0+BGcP2wWXh6ifEhGRjJbmHIRy5coRHx/PjBkzqFmzJjVq1KBatWp8+umnWRlfrpA/nyOdqpdg8dbjXEp0gF5zoFAgzO0LkVtsHZ6I3IXEJCtfrj5C3dIFqO1X4NqT8fDH61C4AtR8zLYB5iHqp0REJKOlOXK0YMECpk6dytmzZ2nbti0AdnZ21K5dO8uCy02CG/oxd1MEC7ccY0BjfwheCF+1hlldYeAyKFTW1iGKyB34ZccJIi/G8OYjlW88uelrOH8Ies8D+3SXckoGUT8lIiIZLc1evHv37nTv3p358+fTtWtXAOLj43Fycsqy4HKTKiXyU6OUFyHrw+jfqDQWj6IQvBi+esicZjdoGXgWs3WYInIbhmEwLfQwAYXdaFXBx3wy5qJZaMW/OZRrbdP48hr1UyIiktHSLe2TlJTEu+++C8CTTz7J4sWLMzumXCu4gR+Hz1xl3aFz5hMFA6DvAoi5ADODzD9FJNv6+9A5dh2/zONNy2BnZzGfXD3RTJDajDNLeEuWUz8lIiIZJd3kaM6cObz44osAfPHFF8yePTvTg8qtHq5WDK98joSsD7vxZPEa0HMWnDsI3/eE+GibxSciqVu8NZLGE5bT58sN2FnA/npidOEobPgCavSBolVtGmNepn5KREQySrrJkZ2dHQ4O5uw7R0dHLLozes9cHO3pUacUy3af4uSl2BsvlGkOQdMhYgPMHwBJCbYLUkRSWLw1kpELdxB5MQYAqwGv/7iLxVsj4c+3wM4BHhhl4yjzNvVTIiKSUdJdOdyqVSt69+5NtWrV2LVrV3LpVLk3vev7Mm31YWb/E87zrQNvvFC5M0R/AL+8AEuehc6fa4qOSDbw/tJ9xCQkpXguJiGJX39bQuf4hdD8FfAsbqPoBNRPiYhIxkk3ORo6dCgtW7bkyJEjdO7cmQIFCmRFXLmWX0E3mgcWZvY/4Tz9QFkc7W8avKs7CK6ehZXjwa0QPPS27QIVEQCOXxsxSslgSOzX4FkEGj2b5TFJSuqnREQko6Q7rQ6gYsWKeHt789lnnxEUFJTZMeV6wQ38OH0ljj92n7r1xebDoe7j8PcnsPaTrA9ORJKtOXA21QHcdnb/UMduP7QcBc7uWR+Y3EL9lIiIZITbJkfR0dHMmjWLDh068Nxzz9GmTRtWrFiRVbHlWi3K+1DCy5UZ647e+qLFAu3eg8pB8Mdo2PZ9lscnktclJFmZ8Ntegr/eQCF3Z5wdblwqHUlkpOMcLnmUg5p9bRilgPopERHJWGkmR2+//TbdunXj9OnTfPrpp1StWpUOHTpo/4gMYG9noU8DX9YfPs+BU1dubWBnB12mQpkW8OPTsO/3LI9RJK8KO3eVrlP+ZuqqQ/Ss68uql1vy7qPVKOHligV4xn0FvpZT5O80AezsbR1unqZ+SkREMlqaydHmzZupXLky1atXx9fXV9V/MliPOqVwsrdj5s1lvW/m4Aw9ZkKxajCvH4Svz9oARfKghVuO0f7j1Rw5e5WpfWvxTlBVXJ3s6VyzBGtHPMCR1xvyrMMiCGgFZR+0dbh5nvopERHJaGkmR4sXL6Znz5788ccftG3blqNHj3Lo0KGsjC1XK+juzMPVirFgSyRX4xJTb+TsAX3mQ/6S8H13OLU7a4MUySOuxCbw/NxtvPDDdioXz89vw5rRtkox88U1H8GRUPP70IkQd9msLrnmIxtFK9epnxIRkYx222p1tWrVolatWkRFRbFkyRJefvllABYuXJglweV2fRv4sWhrJIu3RdKnvl/qjdwKQfAi+OohmBkEA5dCgTTaishd2xZxkWdnb+XYhWiefzCQpx8oe2OTV4AStWBef2gzHv6ZZo4Y/fkmdPvWRhHLzdRPiYhIRkq3lDeAu7s7vXv3pnfv3uzerdGLjFLL14tKxTwJWRdG73q3mRLi5Qt9F8I3bW8kSG6FsjZYkVzGajWYGnqIScv2U8TThblPNKRuae9bG/o3MxOhmY+aj49thO4zzOcl21A/JSIiGeGOSnnfrFKlSpkRR55ksVgIbujH3pNX2Bx24faNi1SC3j/ApUiY1RXiUinkICJ35NTlWIK/3sB7v++jTeWi/Pps09QTo+suHYOkeLAmmKX2lRhla+qnRETkXt11ciQZq1ON4ng4OxCSVmGGm/k2gO7fwYl/YU4fSIzL/ABFcpm/9pyi3cer2RJ2kXcfrcqnvWuSP59j2m84sw9+GgZ2DtD0Jdj01Y01SCIiIpKrpJscbdmyhU6dOtGkSROCgoI0XSGD5XNy4NHaJfl1xwnORt1BshPYBjp9BkdWwaInwJqU+UGK5AKxCUm8uWQXg77bRFFPF356pgk96qZT4SwhBmZ1M0eNHv0KWo02p9jN668EKRtRPyUiIhkl3eRo7NixfPDBB6xZs4YJEyYwZsyYrIgrT+nbwI+EJIO5GyPu7A01esFDY2HXIvjtFTCMzA1QJIc7cOoKnT9by7d/H2VgY38W/a8RZX3c03/j7yPgYhg8+IZZoQ5urEGK3JKZIctdUD8lIiIZJd2CDB4eHpQtWxaAwMBAXFxcMj2ovKasjzuNAgry/YZwnmwekLJSVloaPQNXz8Daj8GtMLR4JfMDFclhDMNg9j8RjPl5F25ODnzTvy4tK/jc2Zt3zIfN30KT582vm/k307qjbET9lIiIZJR0k6OCBQsyatQoGjRowK5du7BarcydOxeAHj16ZHqAeUVwAz+emrWFFXtP82ClInf2pgffgqtnYeV4s3pd3UGZG6RIDnIxOp4RC3bw+66TNC1XiA+6VcfH8w4/NJ87ZK4zKlUfWo7K1Djl/qmfEhGRjJJuclSmTBkAwsLCcHd3p169epw5cybTA8trHqxUhCKezoSsD7vz5MhigY6fQPQ5+OUFiDoNLUfeeP1IqDn1p8mwTIlZJLvacPgcw+Zu42xUHK+2r8DgJmWwu5MRWTALncwfAHb25joj+9sUa5BsQf2UiIhklHSTo6effpq///6biIgIqlevjr+/P87OzlkRW57iaG9Hr3q+fPTnAcLOXcWvoNudvdHeAbp+A1+2glUTwNkNGj1rJkbz+mujSslTEpOsfLL8IJ8uP4Cvdz4WPNWIaiW97u4gf7wOJ7ZDz9ngVSpT4pSMpX5KREQySrrJ0aRJkzh58iSHDh3CycmJadOmMWnSpKyILc/pVc+XycsPMmtDOK+2r3jnb3TKBwN+hS+aw7LRcGY/7PvVTIy0LkLyiGMXohk2Zxubwi7waK2SvNWpMu7Od7TP9Q17foYNU6HBUKjQPnMClQynfkpERDJKutXqNm/ezHvvvUe+fPno0qULx44dy4q48qQini60qVyEHzZFEJtwlyW6XQvAwKXgnB+2hkDFjkqMJM/4+d/jtPt4NXtPXuHjnjX4oHv1u0+MLobDj0OheE1zPZ/kGOqnREQko6SbHCUlJREXF4fFYiEpKQk7O+0bm5n6NvDjYnQCP20/fvdvPncA7OzAyQM2fwdbv8/4AEWykej4RF6Z/y9Pf7+VgMLu/PpsUzrVKHH3B0pKgPmDzLL4Xb8GB6eMD1YyjfopERHJKOneWu3Xrx9BQUGcP3+ebt260b9//ywIK+9qWKYgAYXdmLk+jG517mK9w/U1Rt1ngEdxcw3Skv+Zi8qrq1qT5D47Iy/x7JytHDl7laEtAni+dSCO9vf4oXj5WDj2j7l+z7tMxgYqmU79lIiIZJR0k6N27drRqFEjwsLCKFmyJN7e3lkRV55lsVgIbuDHmz/tZnvERaqX8rqzN0ZuSbnGaMBv8NVD8Ntw8GukheWSaxiGwddrj/Lub3sp4ObIrEH1aVS20L0f8MCfsPYjqDMQqgRlWJySddRPiYhIRkk3OTpw4ABvvPEGly9f5pFHHqFcuXK0bNky3QNv376diRMnEhISwp49e3j77bext7fHycmJd999l0KFUn6Y6dKlC+7u5o71JUuW5J133rnHHynnC6pdkveW7mPm+rA7T47+W667SCXo/zN89wjMeAT6/wqexTI6VJEsdTYqjpfmbWflvjM8WLEI73WthrfbfUyBu3wCFg2BIlWgzfiMC1SylPopERHJKOnOQRk7dizvvPMOBQoUoGvXrkyePDndg06fPp3XXnuNuLg4AMaNG8fo0aMJCQmhdevWTJ8+PUX7uLg4DMMgJCSEkJCQPN/heLo40rlmCZZsP87F6Ph7P1DxGtB3gbn/0YxO5oaxIjlU6P4ztP1oNX8fOseYTpWZ/ljt+0uMrEmwYDAkxJjT6RxdMy5YyVLqp0REJKPc0QR9Pz8/LBYL3t7euLmlv/+Or69vis5p0qRJVKxolqZOSkq6Zf+JvXv3EhMTw8CBA3nsscfYtm3bXfwIuVPf+n7EJVqZv/k+qy6Vqgu955qVuGZ0hpgLGRKfSFaJT7Qy/tc9PPb1P3i7ObLk6cY81rA0FssdbuqallXvQdgaeHgSFA7MmGDFZtRPiYhIRkg3OcqfPz9z5swhJiaGX375BU9Pz3QP2qZNGxwcbszY8/HxAWDLli3MnDnzlsWyLi4uDBo0iK+++oq33nqLl156icTExLv8UXKXSsU9qeNXgJnrw7Bajfs7WOkm0HMWnN0HMx+F2MsZE6RIJjty9iqPTvmbaaGH6VPflx//14QKRdO/BqXr8CpY9S5U7w01et3/8cSm1E+JiEhGSTc5Gj9+PMeOHaNAgQLs3LmTcePG3dOJfv31V9544w2mTZt2y2JZf39/HnnkESwWC/7+/nh5eXHmzJl7Ok9uEtzQj6PnollzMAOmw5VtZVayO7Edvu8O8Vfv/5gimcQwDOZvPsbDn6wm/Hw0U/vWZlyXqrg62d//waPOwMLHoVA5aP/+/R9PbE79lIiIZJQ0CzIcOXIk+ftHH300+fsLFy7g5eV1Vyf58ccfmTt3LiEhIam+d/78+ezfv58333yTU6dOERUVReHChe/qHLlR2ypFKejmRMj6MJoFZsDvo3w7ePRLmD8QZveC3j+Ao8v9H1ckA12OTeC1RTtZsv049fy9+ahHDYp7ZdB6IKvVLMAQewn6LgRn94w5rtiE+ikREcloaSZHr7/+eqrPWywWZsyYcccnSEpKYty4cRQrVoxnnnkGgLp16/Lss88yfPhwhg0bRteuXRk5ciS9evXCYrEwfvz4FNMd8ipnB3t61C3F1FWHiLwYQ4mM+IBYuQskxsGiJ+GHx6DHTG14KdnGlvALPDdnK8cvxvJi60CGtiyLvd19ri262dqP4NBy6PARFK2ScccVm1A/JSIiGc1iGMYdLWi5fPkydnZ2yWVMs4OgoCAWLlxo6zAy1bEL0TR9bwX/a1GWl9qUz7gDb/oGfh4GFR8xK3XZq5MX20myGkxddYhJf+ynqKcLn/SqQW2/DN6rJnw9fNMeKnWCrl/D/RZ0kGTZ5VqsfkpERFJzN9fiNNcc7dq1i86dO5OQkMAff/xBmzZtePTRR1m+fHmGBSrpK1kgH60q+DBnYzjxidaMO3CdAdB2AuxZAoufNMsai9jAyUux9P1yA+8v3Ue7KkX59bmmGZ8YRZ+H+YPAyxc6fqzEKJdQPyUiIhktzeTovffeY8KECTg6OvLhhx8yffp0FixYwLRp07IyPgH6NvDjbFQ8v+86mbEHbvAUtHoDdswzR5GsGZh8idyBP3afou3HoWyLuMh7j1Zjcq+a5Hd1zNiTGAb8+D+IOgXdvgGXDKh2J9mC+ikREcloac6lslqtVKhQgVOnThETE0OVKub8fDu7O9oaSTJQs3KF8fXOx8x1YTxSvXjGHrzpC+YmmKHvgYMLtHtPd9Ul08UmJDH+1z3MWBdG5eKefNKrJgGFM2kq1IapsO9XaPsuFK+ZOecQm1A/lcOs+QhK1AL/ZjeeOxIKkVugyTBbRSUikkKaPcj1haarV6+mYcOGACQkJHD1qkpAZzU7Owt9G/jyz9Hz7D2ZCXsUtXwVGj4N/0yDP14377SLZJL9p67Q6dO1zFgXxuAm/iwc2ijzEqPILbBsNJR/GOo/kTnnEJtRP5XDlKgF8/qbCRGYf87rbz4vIpJNpDly1LBhQ3r27MnJkyeZMmUK4eHhjBkzhvbt22dlfHJNt9qlmLhsPyHrwhjXpWrGHtxigYfGQmIs/P0JOLlBixEZew7J8wzDYOaGcMb+vBsPFwe+HVCXFuV9Mu+EsZdg/gDwKAqdPtWIaC6kfioHsCbBxXA4f9j88m1sbkYe8AAc2wjdvk05kiQiYmNpJkdDhgyhVatWuLu7U6RIEcLDw+nRowetW7fOyvjkmgJuTnSsVpxFWyMZ0a4CHi4ZvC7DYoF270NCLKx8x5xip2kOkkEuXI3nlQX/smz3KZoFFuaDbtUp7OGceSc0DPjpObgYAQN/h3wZXOBBsgX1U9mENQkuRZjJz7lDKf+8cBSsCTfaOuYDe2fY/zsUKA0F/G0VtYhIqm5bvzkgICD5e19fX3x9fTM9IElbcEM/Fmw5xqKtkTzWsHTGn8DODh75xBxB+vMNcHTVVCS5b+sOneP5uds4dzWO1x6uyMDG/thl5N5Fqdn8DexaBA++CaXqZe65xKbUT2URaxJcOnZtBOgQnDt84/sLRyEp/kZbB1fwLgM+FaDCw1AwwHzsHQBn95sjur4PwsE/4dO60O5dqPWYRndFJFvQ5jY5SPWS+alaIj8h68IIbuCHJTM6Ejt76DLVTJB+G26OINXul/HnkVxp8dZI3l+6j+MXYyjm5ULlYp78ufc0pQu6sfCxxlQtmT/zgzi5E34bAQGtoNFzmX8+kdzCaoXLkdeSn0M3psKdOwQXjvwnAXIxE55CgVC+nZn4eJcxEyGPYqknOkdCzcTo+lS67T/Aj0/BT8+aNzMemQxepbLsxxURSY2SoxzEYrEQ3NCP4fP/ZcOR8zQoUzBzTmTvaG6SOaePOTXJwQWq98icc0musXhrJCMX7iAmwdwz6/jFWI5fjKVe6QJ8M6Aebs5ZcLmJizIXeLsWgC5fmKOhInKD1QpXjl9Lfq5Pgbs2AnT+CCTF3Wjr4GJOeytUDgLbpBwB8ih29/+/IrekXGNUvTu4F4F/voDDK+HzhvDQ21C7v0aRRMRmlBzlMB2rFWfcL3sIWR+WeckRgIMz9AiBWd3MTWIdnKFy58w7n+R47y/dl5wY3SzyYmzWJEYAv75kfsh7bAm4F86ac4pkN1YrXDmR9ghQYuyNtvbO4O1vJjzlWv9nBKh4xt5gSG0da0Bz8+vCUfjxaXPPvd2Lr40iaYqkiGQ9JUc5jKuTPd1ql+Tbv49y+nIsPp4umXcyR1foNcesLLRgkPk4sE3mnU9ytOMXY+7q+Qy37XvYPhtajAT/pllzTpHMcCf7ARmGmQClGAG6nggdgcSb/t/ZO5kjQAUDoGyrlCNAniWyxwhrgdLmTY3N35hbSnzeEFqPgToDNYokIllKyVEO1KeBH1+uOcKcjRE826pc5p7M2R36/AAzOsHcYOg9FwJaZu45JcdJTLLi6mRPdPytI0fFvVwzP4Az++CXF6F0U2j2cuafTyQzXd8PqOs35pqeXQthxXgo1wbm9r1RDOGWBKi0mfAEPHAt+bk2AuRZwlxPmt3Z2UHdQVD2QVjyDPzywrVRpE+hgJ+toxORPELJUQ7kX8iNpuUK8f2GcIa2CMDBPpPv+rnkh74L4buOMLsXBC8Ev0aZe07JMaLiEnn6+y1ExyfhYGch0XpjE2FXR3teblM+cwNIiDE/SDrmg6DpOeNDoMjt+Dcz1+bM6gqJN60B2rPETIAKBkCZFlCwzI0RoPwlc8+//QJ+8NiP5ijSstHX1iKNgdoDs8coV15wJ6OXIrmUrjI5VHADP05ejuXPPaez5oT5vCF4sVlJaFY3OLYpa84r2dqpy7H0+GIdofvPMK5LFSZ2q04JL1csQAkvV94JqkrnmiUyN4jfR8Dp3RD0BXgWy9xziWQV/2ZQtZv5fdVu8Nx2eO0UPLPJHMFvOx7qDjZHiQr45Z7E6DqLxZxSN3QdlKprjgzPeMRcmySZ7/ro5ZFQ8/GRUPNxiVq2jEokS2jkKId6oIIPxfO7MHN9GG2rFM2ak7oXNueEf9MOZgZBv5+hWLWsObdkO3tPXmbANxu5FJPAV/3q0rKCD0DmJ0M32zEfNn8LTZ43p+KI5BZHQmHfb9BsOGz6ytwHqEBpW0eV9bx8zRtzW76Dpa/B542g9VtQZ5BGkTKTfzOz4ufsnuDlZ+5x1XNWypEkkVxKV5YcysHejt71fVlz8CyHzkRl3Yk9i0G/JeDkASGd4fSerDu3ZBtrDpyl25R1JFkNfniiYXJilKXOHYKfhkGp+tByVNafXySzXL9L3+1beGCU+efNd/HzGovFLO89dB341jerUn7X0Sw8IRkv7oo5rW7xUIi/ao7Mx12GtZ/AiX9tHZ1IplNylIN1r1sKR3sLs9aHZ+2JvXzNBMnO0SzUcO5Q1p5fbOqHTRH0/+Yfinu5svh/jalSIgs2dv2vxDiYP9CcSvToV+beXCK5xX/3A7q+Bilyiy2jsj2vUub610cmw8l/YUoj2DDNLF0u9y/6vFn448Mq8Ocb4FkcnD2h8fPmms6wv+GLpjBvgPp9ydWUHOVgPh4utK1SjHmbI4iOT8zakxcMMBfMWhPhu0fgQljWnl+ynGEYTFq2j+Hz/6VBmYLMe6ph1lSiS80fb8CJbdB5ivmBSSQ3aTLs1ulL/s20EB7MUaRaj5mjSH6N4LeX4bsOZvU+uTdXTsKy18ykaNW7ULoJPPwBXIowp9K1ftNc5+bgDFW7w/7f4dO6sORZuBRp6+hFMpySoxwuuIEfV2IT+Wn78aw/uU8FM0GKv2IulL1sgxgkS8QnWnnxh+18svwg3WqX5JsBdfF0sdFozZ6fYcMUaDAUKrS3TQwiYlv5S0Kf+dDpMzi5A6Y0hvVTNYp0Ny6Ewc8vwEfVYN1nUOFheGqdmRDFRd06etn9OyhS2SwOUnewubfcJzVh6Shz1Ekko6356NbpxEdCzeczkZKjHK5u6QKUL+LBjHVhGIaR/hsyWtGq0HcRXD1njiBFZVH1PMkyl6ITeOzrDSzcGsmLrQN5r2s1HDO7fHxaLobDj0OhWA148E3bxCAi2YPFAjX7wtD14NcYfn8Fvn1YU77Sc2Y/LHrSTGy2zIDqPeGZzfDodChSyWxzu9FLdx9o/575niqPwvrPzQRr5bvmeiWRjGKjqolKjnI4i8VC34Z+7Dp+ma0RF20TRMna0GceXI6EGZ11BykXiTgfzaNT/2Zz2AU+7FGdZ1qVw2Kr3eqTEmD+IPPOcLdvzCkeIiL5S5h9UKfP4dQucxRp3ecaRfqv49vMzdw/qwe7FkP9J8xRoEc+MffLulsF/KDLFHO0qUxzWDkePq5h/u4TYjM4eMmTSjeFekPMAmDzBt4oVJPJVROVHOUCXWqWwM3JnpnrbLjux68h9JoN5w5CSBeIuWi7WCRD/HvsIl0+/5tTl2P5bmA9utQsaduAlo+FY//ce0cuIrmXxQI1+8D/1psfnJaOhG/baxQJIGwdzHwUpjWHw6ug6Yvw/E5o+46ZWN4vnwrmVLzBy81pd0tHwuTasCUEkrJ4PbTkHmf2m58nV74Drt6wa4FZwj8LyskrOcoF3J0dCKpVkp//PcH5q/G2C6RMC+gx07xzN6ubOWdZcqQ/d5+ixxfrcXawY+FTjWgUUMi2AR34E9Z+BLUHQJUg28YiItmXZ3GzeEDnqWYJ6imNzPU01iRbR5a1DAMO/gnftIdv2pqjRq1eh+d3QKvR4JYJ1/SStc1Kto/9aE69W/I0TGkIu3804xG5E3FXYNlo89/O8S0c9O/DxatxfJLYhQuhU1mzbGGmh6DkKJfo28CP+CQrLd5fgf+IX2g8YTmLt9qgikzgQ9D1a4jcbG4elxCT9THIffnu76MMCdlEuSLuLPpfI8oV8bBtQJdPwKIh4FPZvNMpInI7FgvU6AVDN5g37Za+am5efvagrSPLfFYr7F4C01qYo0UXjkLbd2HYDnPEyCULtl4o0wIeX27eLMUCPzwG01vCoeVKkiRthgH/zoPJdeDvT6B6L9ZXHYP34SU8Ff8MkxK7MTT+GSqtfTbTEyQlR7nEnhOXsbPA5dhEDCDyYgwjF+6wTYJU6RFzZ+2ja2BuX3NPGsn2rFaDsT/v5o0lu3iggg9zhjTAx8PFxkElwYLBZpLd7VtwtFHpcBHJeTyLQa85Zn90Zi9MbQx/T86do0hJibB9rnm3/YdgiL0EHT+BZ7dBgyfBKV/WxmOxQMWOZsn1zlPg6llzitR3HSFiY9bGItnfyZ3mKOfCwRiexTjR7RcW+45k7YYN/C/hWdZZKwOwzlqZ/yU8y/Z/VmRqOA6ZenTJMu8v3Yf1PzdkYhKSGP3jTqLjkyjs4YyPhzOFPZwp5O6Mk0Mm58XVukFirDmsPm+AWQJUG3VmW7EJSQybs43fd52kX0M/Xu9YGXs7GxVeuNmq9yBsjTlFpnCgraMRkZzGYjGrsZVpAT8NM/fz2f2jWbwhN1xTEmJh+/dmaeOLYeBTydwYu1JnsM8GH/Hs7KFGb7Oq3aZvIPR9+OpBKP8wPPDajep4kjfFXCTuz7E4bfmKWHsP5hR8gU9PNuBcyCVgG9Dhlress1ZmfVRl/peJYWWD/zmSEY5fTH362pXYRF5dtOOW573yOVLY3TlF0pT85e6S/H2BfI73Xp2sVrB5x/+3l2HhEHj0S/NCKdnK2ag4Hp+xiW0RF3nt4YoMauJvu4p0Nzu8ytyQsHpvc4qMiMi98ihqFg3aMQ9+fRmmNjE/nDf8X87sl+KvmsnG35Mh6iSUqA1tJ0BgW7DLhpOCHJzNEayafWH9FHPa1JRGUK0HtBwJBUrbOkLJAklWg4Ono9gadg77f2fT+vgUPKyXmZH0IJNiuuGTryitKnlRo1QBavp6Mei7jRy/eGvlw8zegF7JUS5R3MuVyFQSpOL5XZj/VCPOXIkzv6Likr8/fSWWM1fi2Bx+gdOX44hLvLXsqaO9hULu15OmGwmUTyrJlKtTKh1M/SGQGAN/vG5OiXrk0+x54c6jDp+Jov83Gzl1OZYpfWrRtkoxW4dkijoDCx+HQuWg/fu2jkZEcgOLBap1B//m8PPz8Mdo2LMkZ40ixVyAf6abCUbMebPUcdAX5s+UHW5qpcfZHZq/DHUHwZoP4Z9psHMB1O4PzV4GjyK2jlAy0LmoOLZFXGRr+EW2Rlxge8Ql/OP387bjN9SwO8R+58r8WulVylSqT2hJL/K7ppxhNLxNBUYu3EFMwo2psK6O9rzcpnymxq3kKJd4uU35VP8BDW9bgeJerulm2YZhEBWXeFPidGsydeJSLNuPXeLc1bhU11S6Ozvg4+FMIY//JlNB1K16Fv9tnxBtOOL8yIfY3+Emoou3RvL+0n0cvxhDcS9XXm5Tns41M6D0qLDx6Hken7EJO4uF2UMaUMu3gK1DMlmtZgGG2EvQd6HZmYqIZBSPImbp6Z0L4NeXzFGklq9Co2ey7yhS1Gmz6t7GryD+ijlC1PRFKFXP1pHdm3ze8NDb0OApc/r0pq9h2yyo/yQ0fg5cvWwdodyl+EQre05cZmv4BbZGXGRbxEXCzkUDYG9noX4RK98Umkudcz+RlK8QxkNTCazek8DbJPXXP+9l9edAJUe5xP3+A7JYLHi4OOLh4kiZwrf/MJqYZOV8dPyN0ahrSdTpyzeSqT3HLxN6JY4rcdf3OKjPKw4deWr7t3y1+RRTnAdR2NMl5SiUe8rpfRuPnOOtn3YTk2COaF0vMnHzzyv35qftx3nxh+2ULODKNwPq4lfQzdYh3bD2I7OqUYePoGgVW0cjIrmRxQJVu5ojL7+8AH++cWMUyaeCraO74WKEOXVuy3dmcaPKXaDpC1C0qq0jyxiexaHjR2ZiumI8rJkEm76CxsPMRCmrC0nIHTEMgxOXYs0RoWvJ0I7IS8Rfm4FUxNOZWr4F6FPflxolPKlxehFOq8aZZbob/g+H5q+Ai+cdnatzzRJZ/plPyVEuklX/gBzs7fDxcLmjSmYx8Umcjbo2he9yLfZs9GBQ+Pf4F/The7dgzlyJ48CpK5y5EkfifytKpHa8hCTeX7pPydE9MgyDqasO8+7ve6lbugDTgutQwM3J1mHdEL7B3Oy1cpA5zUJEJDN5FDFLTu9cYK5F+qIptBgJjZ61bUGDc4fMRGH7HPNx9Z7Q+HkoVNZ2MWWmggHQ9StoMgz+ehv+egs2TIXmw6HmY+CQjfqpPCgmPokdkZfMROjaFLlTl81KxM4OdlQtkZ9+Df2o6WuuFSqW/9pspfD18Gs/OLnD3Ly13XvgU9GGP8mdUXIkmcrVyZ5S3vko5X3t7k+Vz+EnRx7Y8h0PPOALzV4CzDLSl2ISUkzjGzZ3W6rHjLwYQ3yiNfMr7uUyiUlWXl+yi+83hNOxenHe71oNF8dsNIUk+jzMHwhepaDjxzlj/ryI5HzXR5H8m5mjSH+9BXt+gs6fZ/0HuZM7YfUHsHsx2DtBnUHmqIpXqayNw1aKVoU+P0DYOvhrDPzyojly1uJV8+8ou057zEUMw+DI2avJSdDW8IvsPXmFpGs3sP0K5qNhmYLJiVCFop63fh67csocjd0+GzxLmFtxVOqcY/p1JUeStSwW6PChWeZ7+dtmkYaG/8POzkIBNycKuDkReG3T0feX7ku1yARAy4krebJ5GbrVKZW9PuBnU1Fxifxv1hZW7T/DUy0CePmh8thlh1Ld1xkG/Pg/iDoFg5bd8XC7iEiGcfeB7iGwa5G5FumLZtBiBDR6LvNHkSI2wuqJsP93cPIwR64a/s+MKS/yawgDfoWDf5rJ6qIh5pTrVq+b661yyIfsnOBSTALbbyqasC3iIhejEwBzLXmNUl4MbRFAjVJe1CjlRUF357QPlpRgFtlY8Q4kxZnr4pq+CE7ZaOr+Hci0/+3bt29n4sSJhISEsGfPHt5++23s7e1xcnLi3XffpVChQsltrVYrb775Jvv27cPJyYmxY8fi5+eXWaGJrdnZm/O6E2LMncsdXMzKNf+RepEJO4Ib+rHp6AVG/7iLT5YfZEjTMvSu74ubs3L91Jy8FMvAbzey79QVxnepSu/6vrYO6VYbpsK+X81StCVq2ToaySPUT8ktLBaoEmSuRfr1RXP0Ys9PZp+V0XvyGAYcWQWhE+HoanAtAC1HQb3Hze/zOosFyrWGgFawexEsHweze0LJevDgG1C6ia0jzFbupIBVktVg/6krKdYKHTwdBZi/7kAfD9pWLkpNXy9q+hYgoLD7ne95eHgV/Dbc3HC5bGto9645XTIHypRPk9OnT2fJkiW4uppzDseNG8fo0aOpWLEic+bMYfr06YwcOTK5/Z9//kl8fDxz585l27ZtTJgwgSlTpmRGaJJd2DuYG9X9EGxOY3B0NTeKu8ntikwYhsG6w+f4dPlBxv26h89XHmRgY38ea1T6llKQednek5cZ8M1GLsck8GW/OrQsnw3vQkZugWWjoXx7cwGuSBZQPyW35V4Yus8wR5F+eQmmNTfXvzQedv8bmlut5gjR6g8gchO4F4WHxpnrLFWd81Z2duYmshUfMSvarXwXvn3YTJpavQ7Fa9g6QptbvDUyxc3k6wWsLscmUNTTha0RZjL077FLRMebbbzdnKhZyovONYpT07cA1Urmx8PlHv5tXzpmbq68axF4+UGvOTl+dC9TkiNfX18mT57M8OHDAZg0aRI+PuaHsqSkJJydUw7Jbd68maZNmwJQo0YNdu7cmRlhSXbj4ATdvoPZPcwpVQ7O5gXwJmkVmbBYLDQKKESjgEJsDrvAZysO8sEf+5kWeph+jUozsIk/3tmp0IANrD5whqdmbsHN2Z4fnmxI5eL5bR3SrWIvwfwB4F4EOn2Woy+mkrOon5I7UrnLtVGkl8xiMXt+gs5ToEjluz+WNcn8ALl6EpzeZX6Q7PAh1Ohj9n9ye/aOZgJZrYe519OaSWbSWqmzuaFvoXK2jtBm3l+6L8UsGzALWL3+4y4AHOwsVC7uSbfaJZPXCvl657u/Dd8T42Ddp+bIp2E1Rz0bPWPe7M7hMiU5atOmDceOHUt+fL3D2bJlCzNnzmTWrFkp2kdFReHufuNuib29PYmJiTg4aJpUrufoAj2/h5ldYeEQc4pdhYfv6hC1/Qrwdf+67Iy8xOcrD/LZyoN8teYIfer7MqRZGXw806+ql9v8sDGCVxftoKyPO1/3r5vpu0nfE8OAn54zS9UO+M3c90Iki6ifkjvmVujGgvJfXoQvmkPzV8zKancyipQYD//OMTc9PX8YCleALtPMm4G2rIiXUzm6QuNnoXY/+PtTc/+nPT+Zs09ajID8JW0dYZZJTLKy8eiFNNdnAyx4yrw5mqHrsw/8YU6hO38YKnSANuOhQO6ZZpxl/yt//fVXpkyZwrRp0/D2TvkhyN3dnatXryY/tlqt6nDyEic36D0XQrrAvP7QazaUffCuD1OlRH4+71Obg6ev8PmKQ3zz91FmrA+jR51SPNG8DCUL5P79EgzDYNIf+5m8/CBNyxXisz618LyXYfKssPkb8y7qg2+Cb31bRyOifkpur3JncxTpt5dhxVhzX6TOU9Lejy0+GrbMgL8/gcuRUKyGWTa8/MPmVDG5Py754YFRUG+IOUVx01fw7w9Qd7C5F5RbofSPkQPFJiSx+sBZlu46yV97TnHhWvGE1JTwcqW2XwbeeDx/xFwrvu9XKFgW+i64p89r2V2WXNl//PFH5s6dS0hICF5eXre8XqtWLVasWEH79u3Ztm0bgYGBWRGWZCcuntB3PnzXEeb0gT7zwb/pPR2qrI8Hk3rU4LkHyzF11SHmbAxn9j/hdKlZgqdaBKS7yW1OFZeYxIgFO1i0NZLudUoyrktVHO2zaQd8cif8NsKcM97oOVtHI6J+Su6MW0Ho+vW1UaQXYFoLszBA42ch4AGzTewlWDrK3DspIRr8GsMjn5jXO00dznjuhaHdBGg41FyPtGGKuWluw6fNin+5oPrpxeh4lu89zbJdp1i1/wwxCUl4uDjQqoIPbSoX5XJMAm/+tPs/BazseblN+YwJID7arBa45iOwc4AH34IGQ3Pt/lOZnhwlJSUxbtw4ihUrxjPPPANA3bp1efbZZxk+fDjDhg2jdevWrF27lp49e2IYBuPHj8/ssCQ7ci0AwYvNhZbf94DHFkOpevd8OL+CbrwTVI1nHijHtNDDzP4nnAVbjvFwteL8r2UAFYrm/AvmdZeiE3hi5ibWHz7Pi60DefqBsvc3lzgzxUWZI4SuBaDLF7qDKjanfkruWqVHzKTot+GwYx4cCYXWb0PMeVg/BRKuQvHa0GacWZZaMp+XL3T+zExUl4+FVRPMstJNXzRHkxxz1hT7E5diWLbrFMt2n2T94fMkWQ2KeDrTtXZJ2lQuSv0y3ilugDo72qdbre6uGQbs/Rl+fxUuhUOVrvDQ2+BZ/D5/uuzNYhiGYesg7lVQUBALFy60dRiS0a6chG/awdWz0G8JFK+ZIYc9cyWOr9YcIWTdUa7GJ9G6UhGeblmW6qW8MuT4thJxPpoB324k7NxV3utajS41s/l860VPwr9z4bEl9zw6KNmLrsVp0+8mD9jzs1lUKPai+djeySxjXGegTcPK8yK3mKXYD68wNyJt/gpEn4OSdcwNf687Emq2bTLMZqGCOS3+4Okolu0+xdJdJ/n32CUAAgq70aZyUR6qXJRqJfJn3R6FZw+Yyf+h5eBTCdq/n6PLp9/NtVgTpiX78ShqfnCe2gS+7WBuCnq9MtB9XMQKezgzol0Fnmxehm/WHuWbtUf4Y/cpmgUW5umWZannn/MKAmyPuMig7zYSn2hlxsD6NAwoaOuQbm/b9+aO2S1GKjESuY072bNEsomKHcCvESx83Ny0tPEwJUbZQYla5gyUI6Hw51vw07PmiMfqSdBjFgQ0N1+b198suGEDVqvB1oiLLNt9kj92neLwWXNdY41SXgxvW56HKhWlrE8WLwWIi4LQ92Dd52bxi7bvmiNveah4SN75SSVn8SoF7d6HxU+Yo0iD/4IrJzLkIuaVz4nnWwcyuKk/M9eH8+Xqw3T/Yh31/L155oGyNClbKPtOSbvJH7tP8ezsrRR0d2LOkAaU9fGwdUi3d2afWempdFNo9rKtoxHJttLaswRQgpRdndoJx7dCs+FmYQD/pilHJ8R2/JvB4D/NIgJ/vQ2Xj8OsLhDY3tx8t9uMLP27ik+0su7wOZbuOskfu09x5kocDnYWGgYUZEATf1pXLELR/DaYAmgY5jq5Za+Zn7dq9DELJrlnw/0RM5mSI8m+qncHayL8OBSmNgUjCcq1gcjN5sXNoyh4FDP3yHHJf9cLXT1cHHmqRQD9G5Vm9j/hTAs9TPBX/1C9lBdPtyzLgxV9sm2S9O3aI7z1826qlsjPV/3qUtgjm++RkRBjJraO+SBoOthlYElRkVwmrT1L3l+6T8lRdnTz6IN/MzMxuvmx2J7FYm4TEtjWXCP268uw9yfztTk9oXB58KkMRSqBT0Xze3efDCugERWXyMp9ZkGFFXtPcyUukXxO9rQoX5g2lYvSoryPbTewP7ULfh0OYWugWHVzA+T7WPOd0yk5kuytZm849o9Z9tnVG46sunFBu5mD641k6XZ/prL7uKuTPQOb+NOngS8LNkcyZdVBHp+xiQpFPXj6gbK0q1IM+6ya45uOJKvB+F/38NWaIzxYsQif9KpBPqcc8N/495Fwejf0WQCexWwdjUi2djyNPUvSel5sLHJLykTIv5n5OHKLkqPsxs7enFpn7wg1g83tJAJamevFDiyDbTNvtHX1Nqf0+1xLmIpUNveousPqd2euxPHnnlMs23WStQfPEZ9kpaCbE+2rFqNNlSI0CiiUsXsP3YuYi7DyWuEKF09zU+Ja/fL8Dcwc8KlK8rQjoeZeEtenKvScBcVrQdQpc9j3ysmb/rz2dWI77P/dLKH6X04e15KlWxMnZ4+i9C5XlO7V67Nk9wU+W3GQp7/fSpnC+xnaoiydahS3aWnsmPgkhs3dytJdp+jfqDSjO1TKNknbbe1cYCa3jYdBudy3H4JIRivu5Zrqpo72dhb+2H0qW49q50mprYH1b6bEKDv67yhfte4pH189a46inN4Dp3fBqd2wdaZZffC6/L4pR5h8KkKhQHBwIuzcVZbtMgsqbA6/gGFAKW9XHmvox0OVi1Lbr0D26LetVnP9759vmD9znQHwwGhtxn6NkiPJvtKbqlAwIO33GgbEXflP8vSfPyM2mH8mxaV4qwMQ5JKfLh7FOOvrzfaLLuxf5M6nv/tQq3JFGtaojJNXCXM6n8M9TGdb85G5UPQuquWcjYpj8Heb2H7sIqM7VGJQE/+7P68tnD8MS56DkvXggddsHY1IjvBym/Ip1hwBONpbyO/iwOMzNlHL14vhbSvQoEw2L8Aikt2kN8rnVgjKNDe/rrNazTLWp/dcS5x2m98f/NOc+g8kWeyJsJRgR0JxLlp9qeYVSPvGtWlYqxYViuXPXjczjm81pxUe2wgl65r7ShavYeuoshUlR5J93c9UBYvFHCJ28YTCt9ms0TAg5kKqI1GWKycofOUkrVzDeSDxFHYJCbAN8+u6fAVvGoEqCu43j0pde97dxxzCv65ErZRJXjrVcg6diWLANxs5dTmWKX1q0bZKDpmWlhgH8waYw/Ndv0r5OxCRNF1fV/TfanUPVyvGvE3H+Piv/fSctp5mgYUZ3qY8VUrkt3HEIjnEvYzy2dlBgdLmV/l2JCZZ2Xj0An/uiGDf7q14Rx2kgl049dxO0cIpnI6x6+EqsAnY7gY+Fa5Nzat0bcSpsrlxbVaLPm+WNt/8rZkEdp4C1Xpqr8FUKDmS7CsrpipYLOYwcj5vc2g8tSaAxWrFiD7Htj17WbpuK+dPhVPa6TLN8idS3u0qjtGnzeH3qFNm4Yj/HsGtcMqpfGUfgtk9zT8P/QUPjAIXLzh7EJzymeUzHd34J/wKQ2Zuxt5iYc6QBtT0LZBxP3tm++MNOLENen5vbs4nInesc80SqRZf6F3fl6BaJZix7iifrzxEh8lreLhqMV54KJCAwllc8lckj4iJT2L1gTMs232Kv/ac4kJ0As4OdjQtV5UmlR+kVQUfCrpfm0kSdwVO7zWn5V0fbdr3K2wNuXHAfIWuJUrXk6Zr65lSWRd936xJZkK0/G2IvQwNnoIWI8xCVpIqJUcid8LODot7YWrWLUzNuk3ZdPQ8n644yHv7zuDp4kD/RqUZ0NifAq725vzdtKbyXTlhDmlfPQMYsHuRefzfXkn1tLUMO9ZYXHDJ547DIjez2ttNyROOrtce3/R1y+vX/kzx+rUvB5eMu2t083TBPT/DhilQ4RFzIzkRyTAujvYMaRZAz3q+TA89zFdrjvD7rpN0q12S5x4sR7H8rrYOUSTHuxgdz197TrNs90lC958lJiEJTxcHWlUsQpvKRWharjBuzql8jHb2gFJ1za+bRZ1OuZ7p9B7YMiPl+mgvv5tGmK59FSp37zMvIv4xt9A4+S/4NTE3ci1S6d6OlYcoORK5B3VKe/PtgHrsOHaJT1cc4JPlB/lyzRGCG/gxqKk/PsWL3P4Ah5bD/IFQ8RHYvRiavAAFy0JCNEZ8NGv3hPP33gjKetnRvkJ+HIxYsxx2QrT5FR9tVplJiDafj79q/vmf9VN3xPF2yZbrrQnV7RKuucHmos7lb4N3AISvhfqP38uvWETS4eniyIsPleexhqX5bMVBvt8QzsKtkTzWwI+hLcvi7eZk6xBFsp3bbbB8/GIMf+w2CypsOHKeJKtBUU8XutUpyUOVilK/jPe9F2Zy9zG/AlreeM5qhYtHr40w7b62nmm3WTnv+iwUO0czQfpv0pS/1I2bm/9dyxx1GhY9ac5M8SgOXb+GykEZVpo8t7MYhmHYOoh7FRQUxMKFC20dhgj7Tl7h85UH+Wn7cRzt7ehZtxRDmgdQwiuVO7j/LTRx0+NE3yaM/nEXs/8Jp2P14rzftdrdlfpMSoTEGDN5up443ZxQJUTfmlAlXPvzTl/nDi4Zdk5mwtQjRBWb8gBdi9OWlb+bYxei+ejPAyzccox8Tg4MburP4KZlcE/t7rZIHvTfDZYBnB3saFXBh2MXY/j32CUAyvq481ClIrSpXJSqJfJjl9UV5hLjzFkXp3ffNNq0Gy5F3Gjj5H6tYl4lsHeGf+fAI5/ClePm2qKEaKj8KDzySeZM18th7uZarORIJAMdPXuVKSsPsWDLMSwWeLRWSZ5qEYBfQbcbjdKoVhcXvokhh5qwav8ZhrYI4KWHymf9BTk9hgGJN41ipUiorj3ePgf2/WKWX39glK0jliyga3HabPG7OXDqChOX7WPprlN4uznxv5Zl6VPf1/Z7qojYWOMJy1Mtkw9Q09eLhyoV5aHKRbLv+r3YS/9Zz7Tb/D7mQsp2do7wyGSo0cs2cWZDd3Mt1u0kkQxUupAb73atxjOtyjIt9DBzNkbww6YIHqlenP+1LEu5Ih6pFpo46V2PAUss7D91lneCqtKrXjYtYGCxXJtO5wqksh/CkVCIWH9jXyr/pho5Esli5Yp48EVwHbZFXOT9pXt5++fdfLX6MMMeDCSoVgkcbLhfm4gthJ27SuiBs2kmRhZg0dDGWRvUvXDJD771za/rDMMsBnVqF/w9GQ6vMD9nKDG6Z0qORDJByQL5GNOpCk+3LMuXa44wc30Yi7cdp23lojz9QFkOno5KnvNc2MOZuMQkEpMMvupXhxblfWwd/r1Jb18qEclSNUp5MWtwA9YcOMv7S/cyfMG/fBF6iJceKk/bKkWz194rIhkoKi6RdYfOEbr/DKEHzhB2zix6YG9nIcl664Sp4qlNgc8pLBazCu7Z/WbhheSbk9qI+F4pORLJRD6eLrzaviJPNg/gm7VH+Pbvo/y+6yR2Frh+fT59xSyi8FKbwJybGMH97UslIpmmSblCNC7bmKW7TjJx2X6emrWFaiXzM7xNBZqUK2Tr8ETum9VqsOv4ZUIPnGHV/jNsCbtAotUgn5M9DcsUZGBjf5oFFmZb+AVeXbQzxZojV0d7Xm5T3obRZwDdnMxQSo5EsoC3mxMvPlSex5uVocmE5VyOTbylzewNETzdspwNossgWbEvlYjcE4vFQtsqxWhdqSgLtxzjoz8P0PerDTQKKMjLbcrnrD3URIDTl2MJPXCW0P1nWHPwLOevxgNQubgnjzcrQ7NyhantVwAnhxvTSP0LuWGxWNKsVpdj6eZkhlJyJJKFPF0cuZJKYgRmCVERkcxkb2ehW51SPFKjOLPWh/PZioN0+fxvHqpUhJfalCewiIetQxRJVWxCEpuOXiD0wBlC959h78krABRyd6ZFYGGaBRamcdlCFPZwvu1x0tpgOUfTzckMpeRIJIsV93JNdVFojp7zLCI5irODPQOb+NO9bim+XnOE6aGHaftRKF1qlmTYg+Uo5Z3P1iFKHmcYBofORLFqvzk6tOHIOWITrDjZ21GndAFGtKtAs3KFqVDUI/tVdpUcTcmRSBZ7uU35W/ZZyBVznkUkx3F3duDZVuUIbuDHlFWH+O7voyzZHkmf+n78r2XZdO/Ci2SkS9EJrDloJkOrD5zh+KVYAMoUdqNnXV+aBRaiQZmC5HPSx1fJPPrXJZLFrg/n57o5zyKSYxVwc+LV9hUZ0Lg0n/x1gJD1YfywKYJBTfx5vFkZPF0cbR2i5EKJSVa2H7vIqv1nWX3gDNsjLmI1wMPFgSZlC/FMq8I0LVeIkgU0kilZR8mRiA3kyjnPIpLjFcvvyjtB1Xi8aRkm/bGfycsPErI+jKeaB9CvUWltJCv37diFaEKvJUNrD57lcmwidhaoXsqLZx4oR7PAQlQv6aX9uMRmlByJiIhICmUKu/Np71o82fwS7y/dxzu/7eXrtUd4tlU5utcphaM+uModio5PZP3hc4TuP0vogTMcPnMVgGL5XWhXpdi1QgoF8crnZONIRUxKjkRERCRVVUrk57uB9dhw+BzvLd3HqEU7mR56mBceKk+HqsW0EF5uYRgGu09cZvW1Mtubjl4gPsmKi6MdDcoUpE99P5oHFiKgsLs2IpZsScmRiIiI3Fb9MgWZ/2RDlu89zftL9/Hs7K1MXXmIl9uUp0X5wvqQm8edjYpjzbVkKPTAWc5GmZubVyjqQf/GpWlWrjB1ShfQtEzJEZQciYiISLosFgutKhahZXkflmw/zqQ/9jPg243ULV2A4W0rULe0t61DlAy0eGtkmoWD4hOtbA67sefQruOXAXPD8yZlC9EssDDNyhXCx9PFlj+CyD1RciQiIiJ3zM7OQueaJWhftRhzN0XwyV8H6DZ1HQ9U8OGlh8pTqbinrUOU+7R4a2SKLSciL8bwyoJ/CT1whkvRCaw7fI7o+CQc7CzU8ivAy23K06xcYSoX99RUS8nxlByJiIjIXXNysCO4gR9da5Xk27+PMmXlQR6evJqO1YrzQutAShdys3WIcg9iE5IY/+ueFHvxAcQlWlm4JRK/gvl4tFZJmgUWpmFAQdyd9VFSchf9ixYREZF75upkz1MtAuhd35dpoYf4es1Rft1xgh51S/Fsq3IU0dSqbMVqNTgTFUfE+WjCb/o6dj6G8PPRnLwcm+Z7LcCql1tmXbAiNqDkSERERO5bfldHXm5TgX6NSvPp8oPM/iecBVuO0a9RaZ5qHqBSzVnoalwiEReiCT9nJj4R56OJuBCT/H1cojW5rcUCRT1dKOWdj8ZlC+HrnY9v/z7CheiEW45b3Ms1K38MEZtQciQiIiIZxsfDhTGdqjC4SRk+/HM/00IP8/2GcJ5sHkBhdyc+/utgqov85c4lJlk5cSmWiAvRN40AxZhJ0Plozl2NT9He3dkBX+98BBR2o2X5wvh656PUta8SXq63VJHzK5gvxZojAFdHe15uUz5Lfj4RW1JyJCIiIhnOt2A+PuxRgyeal2Hi0v28v3RfitcjL8YwYuG/GFaDLrVL2ijK7MkwDC7FJBBxbapb8tS3C+afkRdiSLQaye3t7SyU8HLF1zsfD1UuQinvfPhe+ypVIB9e+Rzvqtz69YQ1rWp1IrmZkiMRERHJNBWKevJlvzrUGftn8v4318UmWHl+3nZe+3Enbs4OuDs74ObsgJuzffL37imed8Dd2f6m7//7uj3ODlm/l87tyl6nJS4xicgLMSmmu928DuhKbGKK9t5uTpTyzkfVEvl5uGqxG8mPdz6K5XfBwd4uQ3+mzjVLKBmSPEnJkYiIiGS6c/9JjG7Ws54vV+MSiYpL5GpcIlfjkjh+MTb5cVRcYop1MrfjaG8xEyWna4mTy01JlZNDiiTM3dnefN3pvwmYmWi5OTmkW5o6tbLXIxfuwDAMGpcrRMS16W7Xk57rSdCJy7EYNwZ/cHKwo1QBc/Sntl+BG1PfCuSjlLcrHi6Od/Tzi8j9ydTkaPv27UycOJGQkBAA/vjjD37//Xc++OCDW9qOHTuWLVu24OZmlv78/PPP8fDwyMzwREQkj1M/lXWKe7kSeTHmludLeLkyukOldN+fkGQlOi6JqPgbCVNUbGLKpCo+KUVCdf3PSzEJHL8Yk+L5m2al3Zabk32ao1puzg4s2Xb8lrLXMQlJvPDDdv57iiKezvh656NBmYI3pr4VNBMgHw9n7REkkg1kWnI0ffp0lixZgqurWdlk7NixrFmzhooVK6bafteuXXz55Zd4e2uHbRERyXzqp7LWy23K39cif0d7O/LnsyN/vvsfQTEMg9gEq5lgpZJMXY1LupGA/ef166NaV29K0lI9B/DWI5WvjQC5UrJAvlsKH4hI9pNpyZGvry+TJ09m+PDhANSqVYsHH3yQuXPn3tLWarUSFhbG66+/ztmzZ+natStdu3bNrNBERETUT2Wx7LTI32Kx4Opkj6uTPYU9nO/rWI0nLE9zRKxfo9L3dWwRyXqZlhy1adOGY8eOJT9u3749GzZsSLVtdHQ0ffv2ZcCAASQlJfHYY49RpUoVKlSokFnhiYhIHqd+KuvlxkX+9zsiJiLZS8aWNrlHrq6uPPbYY7i6uuLu7k6DBg3Yu3evrcMSEREB1E9J2jrXLME7QVUp4eWKBXPE6J2gqrkuCRTJK7JFcnT06FF69epFUlISCQkJbNmyhcqVK9s6LBEREUD9lNxe55olWDviAY5MeJi1Ix5QYiSSg9m0lPc333yDr68vrVq1olOnTnTv3h1HR0c6depEuXLlbBmaiIiI+ikRkTzGYhjGHRazzH6CgoJYuHChrcMQEcnTdC1Om343IiK2dzfX4mwxrU5ERERERMTWlByJiIiIiIig5EhERERERARQciQiIiIiIgIoORIREREREQGUHImIiIiIiABKjkRERERERAAlRyIiIiIiIoCSIxEREREREUDJkYiIiIiICKDkSEREREREBFByJCIiIiIiAig5EhERERERAZQciYiIiIiIAEqOREREREREACVHIiIiIiIigJIjERERERERQMmRiIiIiIgIoORIREREREQEUHIkIiIiIiICKDkSEREREREBlByJiIiIiIgASo5EREREREQAJUciIiIiIiKAkiMRERERERFAyZGIiIiIiAig5EhERERERARQciQiIiIiIgIoORIREREREQGUHImIiIiIiABKjkRERERERAAlRyIiIiIiIoCSIxERERERESCTk6Pt27cTHByc/PiPP/7gxRdfTLXtDz/8QFBQEN27d2fFihWZGZaIiAigfkpERFJyyKwDT58+nSVLluDq6grA2LFjWbNmDRUrVryl7ZkzZwgJCWHBggXExcXRu3dvGjdujJOTU2aFJyIieZz6KRER+a9MGzny9fVl8uTJyY9r1arFm2++mWrbf//9f3t3H1fz/f9x/FGELo7rxJQpTOa2hI1o62ubmWy5TVMJhzYXs+937OYyjO8Xc5Gl2XBLbCxOlqv13dhovr42DTfR2JcNRS7LVoYIq6jz+6Ob89OUKRddeN5vNze3c87nvD+v9/lcvHqd9/t8Pgdo3749NWrUwGAw0KxZM44cOfKgQhMREVGeEhGR2zywkaOXX36ZtLQ0y+NevXqRmJhY7LJXrlzBYDBYHtvb23PlypW/XEd6ejr+/v73HqyIiJRZenp6eYdQJspTIiKPhtLkqQdWHJWGg4MDV69etTy+evVqkSRUkpKSmIiIyP2kPCUi8mioEFer8/Dw4McffyQ3N5fs7GxSU1N54oknyjssERERQHlKRORRUa4jR5999hnNmjXjxRdfxGg00r9/f8xmM6NHj6ZmzZrlGZqIiIjylIjII8bKbDabyzsIERERERGR8lYhptWJiIiIiIiUNxVHIiIiIiIiVPLiaOnSpYSEhDBw4ECMRiM///xzmdtKTU0tcpf08pCYmEjr1q355ptvijzv5+fHxIkTy9xubGxskXt5PExhYWEYjUZ69uxJt27dMBqNjBo16r61n5ubywsvvHDf2rtp8ODBHDhwAIC8vDw6duzIp59+anndaDRy+PDhO7bxoPaphISEe9of/qy4beTl5cXo0aPv2zpudb/jL6u0tDQ6dOiA0Wi0/Fu0aFGRZUaPHk1eXl6R5ypK/KU5/61Zs4br16+XaT3e3t5lDVGoenkKql6uUp5SnvqzinKeV566O/c7T1WIS3mXxbFjx9i2bRuxsbFYWVlx+PBhQkND2bBhQ3mHdk/c3Nz45ptveOWVVwBITk7mjz/+KOeoyu7mwRkXF8fx48cZN25cOUd0d7y9vUlKSrJcoerZZ59l+/btDB06lNzcXNLT03F3dy/vMO+L4rZRYmIiq1evLufIHryWLVtiMplKfH3+/PkPMZq7V9rz35IlS3jttdcebpBSZfMUVK1cpTxV8SlPKU89TJW2ODIYDJw9e5b169fj4+NDmzZtWL9+PUajkWnTptGiRQtiY2P5/fff6dOnD2PHjqVx48acOXOGp556iunTp5OZmcm4ceMwm804Ojpa2o6Pj2fVqlXcuHEDKysrFi1aRHR0NE5OTgwYMIBLly7xxhtvEBcXd9/75e7uzokTJ8jOzsZgMLBhwwb8/Pz49ddf2bBhAytWrKBGjRo0b96cGTNmsHHjRrZv305OTg6nT59m2LBh+Pv7k5SUxOzZs6lduzbVqlXD09MTgIiICH7++WeysrJwd3dnzpw59OvXj/fff59WrVqxfft2vvvuuxLvEn8/TJw4kV69euHj40NCQgKbNm0iLCyMzZs3Ex0djbW1NR07dmTcuHH8+OOPzJ07l+rVq2Nra8vHH3+MlZUV48aN4/LlyzRr1szS7p49e1i0aBFms5mrV68SERHBnj17OHnyJKGhoeTn5/Paa6+xfv36v7zKVNeuXYmMjOTNN99k+/btBAQEMG/ePLKzs/nll1/o1KkT8fHxt8Vb0j7l5+dHp06dSE5OxsrKisjISAwGAxERESQlJVFQUEBISAi+vr6sWrWKL7/8Emtra5566immTJlCamoqkydPxtbWFltbW+rUqQNATEwMW7Zs4Y8//qBevXosWrSISZMm4efnR7du3UhNTWXu3LksXbq01Nvp1KlTDB06lAsXLvD8888zcuTIEo+vt99+m7p16+Lj44OdnV2FiL8sEhMTmTdvHjY2NgQGBrJgwQI2b95MWlpahYq/pPNfccdAUlIS586dY/To0QwePJjVq1dbkqm3tzc7d+5k4sSJZGVlkZWVxeLFiwkPD+fYsWO4uLhYvpFMSUkhLCyM/Px8Ll68yLRp07h27Rpr165lwYIFAPTr14+PP/4YJyen+9rfyqqq5imo+rlKeUp5qrzP8yVRnnrwearSTqtzcnJi8eLF7Nu3j6CgIHr27Ml3331X4vInT55k1qxZrFu3joSEBM6dO0dUVBSvvvoqJpOJ7t27F1l26dKlxMbG0rJlS3bs2EFAQABffvklAF9//TV+fn4PrG89evRgy5YtmM1mDhw4QPv27cnKymLhwoWsWLGC2NhYDAYDa9asAQrv3L5kyRIWL15s2bmnT59OREQE0dHRODs7W5arXbs2n332GV988QU//fQTGRkZBAQE8O9//xuAL774goCAgAfWt5Lc7F90dDSxsbFkZGSwc+dOtm7diq+vLzExMQQHB3P58mVWr17NE088wapVq+jXr5+ljaNHjxIeHo7JZKJHjx7Ex8fzyiuv8N///pf8/Hx++OEHOnfufFeX333yySc5fvw4ZrOZvXv30qlTJ7p06cKuXbvYs2cP3t7excZb0j519epVXnnlFWJiYmjUqBEJCQls376dtLQ0YmNjWblyJVFRUVy+fJm4uDimTp3KmjVrcHNz48aNG3zwwQeMGjWK6Oho2rdvD0BBQQFZWVlER0ezbt068vPzOXjwYJHtuX79evr27VumbZKbm0tkZCSrVq0iJibmjsueO3eOZcuWMWzYsAoT/904duxYkekKGRkZ5Obm8vnnnxf5BquixV/S+a+4YyAgIABHR8e//HbRy8uL1atXk5iYSG5uLmvXrmXs2LGW0YBjx44RGhrKihUrLNvZ29ublJQULl26xNGjR6lXr54Ko1tU5TwFj16uUp5SnlKeunuVOU9V2pGjU6dO4eDgwJw5cwA4ePAgw4YNK/ItyK1XKW/WrBkODg4AODo6kpuby8mTJwkMDASgQ4cOxMbGAtCgQQNCQ0Oxt7fn+PHjeHp64uLigr29PceOHWPjxo1ERkY+sL75+fkxbdo0XFxcePrpp4HCHbxly5aWPjzzzDPs2LGDdu3aWYbNmzRpYqmef//9d1xdXS19O336NDVr1uTChQuMGTMGOzs7rl27xvXr1/H19cXf358hQ4aQkZFB27ZtH1jf/uzmNjp9+jQXLlxg+PDhQOFJ+vTp04wYMYKoqCgGDx6Mk5MTHh4enDx5kr/97W8AtGvXjurVC3djJycnZs2ahZ2dHRkZGXTo0AEHBwfLZxUXF8ff//73u4rL2toad3d3EhIScHR0pEaNGvj4+PD9999z5MgRunXrVmy8Je1TUJjIoHA75ebmcvbsWX755RfLfO8bN26Qnp7OnDlzWL58OR988AGenp6YzWZOnjyJh4eHpd3jx49jbW2NjY2NZXv+9ttv3Lhxg86dOzNz5kwuXLjAzp07GTNmTJm2TatWrahRowaA5TO+1a3Hl7Ozs2XZihL/3fjzdIXExETLcXOrihZ/See/0NDQ246BO7l1G97s9619feyxx2jSpAkAjRo1IjIyklq1anH16lUcHBywsrKid+/efP3116SlpT3QPxAqo6qcp+DRyVXKU8pTylOlV5nzVKUdOUpOTmbGjBmWE6yrqyu1a9embt26nDt3DoBDhw5ZlreysrqtjRYtWrB//36gcKMBZGdns2DBAubPn8/MmTOpWbOmZcMEBgYSGRmJk5MT9evXf2B9c3Fx4dq1a5hMJnr37m2JPzU1lWvXrgGFQ/M3d5Li+ubk5ERqamqRviUkJPDrr7/y4YcfMmbMGHJycjCbzdjZ2dG5c2dmzZplWd+DVKNGjdu2kbOzM02aNGH58uWYTCYGDhyIp6cnGzZsoE+fPphMJlq1asXatWtp0aIFP/30k+X9N27cAGDq1KnMnj2bsLAwGjVqVGS7rVu3jvPnz5dq/rW3tzdLlizhueeeA6Bjx44cOnSIgoKCEuMtbp+66c/byc3Njc6dO2MymVixYgW+vr64uLiwdu1apk+fTkxMDIcPH2b//v1F2r35g8YjR46wdetWPvroI6ZOnUpBQQFms9lyIpg5cybe3t7Y2NjcdZ/vFC8Uv+2gMEnfVFHiL6tb+3JTRYu/pPPf7Nmziz0GrKysKCgooGbNmpbtl56ezqVLlyxt3tzeLVu2tBxfGRkZZGRkADBr1ixGjRrF3LlzeeKJJyxtv/7668THx7N3717LH4NSqCrnKajauUp5qpDylPJUWVXmPFVpR4569OhBamoqffv2xc7ODrPZzIQJE7CxsWH69Ok89thjNGrU6I5tvP3224wfP55NmzZZhvMdHBzo0KEDQUFBVK9endq1a5OZmQlA9+7dmTFjBuHh4Q+8f7169eKrr77C1dWVM2fOUK9ePV599VUGDRqEtbU1zZo1Y9y4cbddLeimGTNmMGHCBBwcHLC3t6dOnTp4eHgQGRnJgAEDsLKywsXFhczMTFxcXAgMDKR///4P9LdGNwUEBDB58mQ2btxI8+bNAahfvz4hISEYjUby8/Np2rQpvr6+5OXlMWXKFGxtbbG2tmbGjBk0atSICRMmEBwcjJubm+Wg7t27NwMGDMDW1paGDRtatlu7du04deoUAwYMKFWcXbt2ZcqUKXzwwQdA4QnXYDDQpk2bEuMtbp8qyQsvvMCePXvo378/165do3v37jg4ONC6dWv69++Pvb09Tk5OtGvXjokTJxIaGsqyZcuoX78+NWvW5PHHH8fW1tYyZcPR0dHSZ39/f7p168ZXX31Vqj7/lUGDBv3l8VWR4y+rihZ/See/vXv3FnsMPP300wwfPpzly5djMBgICAigRYsWxe6jL774Ijt37iQgIIDHHnuMevXqAYXH17vvvkvt2rVp3LgxFy9eBAr/uLW3t8fT07PYb24fZVU9T0HVzVXKU4WUp5SnyqpS5ymz3LVr166Z/f39zfn5+eUdyn33v//9zzx+/PjyDuOByM/PNwcGBpqzs7PLO5SH5rfffjMPGjSovMMoM8VfuQwfPtx88uTJ8g5DzFU7T5nNVTdXKU9VPoq/cilNnqq00+oetn379hEYGMiwYcOKHc6szGJiYvjnP/951/OcK5MzZ87Qp08fevXqZZkDX9Vt2bKFoUOH3tf7dDxMir/yyMnJwd/fHzc3Nx5//PHyDueRV5XzFFTdXKU8Vfko/sqjLHnKymy+5ZdOIiIiIiIij6iq99WSiIiIiIhIGag4EhERERERQcWRiIiIiIgIoOJIHgGJiYl06dIFo9HIwIED6devH5s2bXpo6w8PD8fPz4/ExETLc1lZWWzcuBEovPxmQkJCqdpMSkpi2LBhlsdLliyhU6dOlntpJCYmlvpHywsXLixyM0AREXk4lKfujvKUPAy6KYU8Ery8vJg/fz5QeJdwo9GIq6srbdq0eeDrjo+P56uvvipyFaLk5GS2bduGn59fmdps164dycnJFBQUYG1tzY4dO/Dy8mLfvn106tSJxMREy00BRUSk4lOeEqkYNHIkjxx7e3uCgoKIj48nPz+f9957jyFDhuDn58f8+fMpKCjgpZdeIisrC4DPP/+cTz75hC1bthAQEEBwcDDvvvsuBQUFRdo9dOgQwcHBDBw4kCFDhnD27FkWLVpEZmYmb731Fjk5OZZlo6Ki2L17N2vWrAFgzZo1DBo0CH9/fw4cOACAyWQiKCiIfv36sXLlyiLrsrGx4cknnyQ5OZnLly9TUFBAr169+P777wHYu3cvzz33HNnZ2YwaNQqj0YjRaCQ5ORmAzZs3ExQURHBwMPPmzSvS9qlTp+jbty9Hjhy5b5+5iIjcPeUp5SkpPyqO5JHUoEEDLl68yK+//oqnpyfLli1j/fr1rF69Gmtra/z8/Cx3dN+wYQN9+vTh66+/ZsiQIcTGxvL8889z5cqVIm1OmTKFf/7zn8TExBAcHExYWBjvvPMOjo6OLF++nFq1almWHTFiBF5eXgQFBQHQtm1bVq5cycCBA4mLi+PYsWNs2rSJzz//nFWrVrF161aOHz9eZH1du3YlKSmJHTt20LVrV7y9vdm1axe5ublcvnwZZ2dnoqKi8PLywmQy8f777zNt2jSysrJYuHAh0dHRxMbGkpGRwc6dOwE4ceIEY8eOZd68ebi7uz/ITSAiInegPKU8JeVD0+rkkXT27FkaN25M3bp1OXjwILt378bBwYG8vDwAXn/9dcaMGcMzzzxDw4YNadiwIZMmTWLJkiXExMTg5uZG9+7di7SZmZlpmf7wzDPPEBERcdfxtG3bFoCGDRuSk5NDSkoKZ8+eJSQkBIBLly5x6tQp3NzcLO/x9vZmwYIF2NnZMWDAAAwGAwaDgR9++IFOnToBkJKSwu7du9m8ebOlndOnT3PhwgWGDx8OFE7fOH36NAAJCQlUr16datWqlfYjFRGR+0h5SnlKyodGjuSRc+XKFdatW0fPnj2Ji4vDYDAQERHBm2++SU5ODmazmaZNm2IwGIiKiqJv375A4ZSCkSNHEhMTA8B//vOfIu02atTIMsS/d+9emjdvXmIM1tbWRaY7WFlZFXndzc2Nli1bsnLlSkwmE/7+/rRu3brIMi1atCAzM5OUlBRL0nr22WdZtmyZZR63m5sbISEhmEwmPvroI3r37o2zszNNmjRh+fLlmEwmBg4ciKenJwCDBw9m0qRJhIaGkp+fX8pPVkRE7gflKeUpKT8aOZJHwu7duzEajVhbW5Ofn8/IkSNxc3MjPz+fsWPH8tNPP1GjRg0ef/xxMjMzcXJyIjAwkJkzZxIeHg6Ah4cHb731Fvb29tjZ2dGtW7ci65g5cybvv/8+ZrOZatWqMXv27BLjadasGSkpKURHRxf7uru7O126dCE4OJi8vDw8PDxwcnK6bbnmzZtjNpstScvHx4fIyEjLN3IjRozgvffeY+3atVy5coV33nmH+vXrExISgtFoJD8/n6ZNm+Lr62tp09vbm2+//ZZPPvmEESNGlOZjFhGRMlKeUp6SisHKbDabyzsIkYpo8+bNpKSk8O6775Z3KCIiIrdRnhK5/zRyJFKMDz/8kMTERKKioso7FBERkdsoT4k8GBo5EhERERERQRdkEBERERERAVQciYiIiIiIACqOREREREREABVHIiIiIiIigIojERERERERQMWRiIiIiIgIoOJIREREREQEUHEkIiIiIiICqDgSEREREREBVByJiIiIiIgAKo5EREREREQAFUciIiIiIiKAiiMRERERERFAxZGIiIiIiAgA1cs7ABERuTvXr18nLS2NnJyc8g5FKqlatWrh7OyMjY1NeYciIlIhWZnNZnN5ByEiIn/txIkTGAwGGjRogJWVVXmHI5WM2Wzm/PnzZGdn4+rqWt7hiIhUSJpWJyJSSeTk5KgwkjKzsrKiQYMGGnkUEbkDFUciIpWICiO5F9p/RETuTMWRiEgV9eX+dLzDtuE68Ru8w7bx5f70e24zMTGRLl26YDQaMRqN+Pv7M2rUKPLy8u66jbS0NAIDA+85llLb8RGcSCj63ImEwufvwdKlSwkJCWHgwIEYjUZ+/vnnUr1/zZo1XL9+ncTEREaPHn3X74uJiQEgISGBNWvWlGqdIiJSPBVHIiJV0Jf705kUd5D0rD8wA+lZfzAp7uB9KZC8vLwwmUyYTCbi4uKwsbFh27Zt9x70g9a0A6wL+f8C6URC4eOmHcrc5LFjx9i2bRufffYZMTExTJ48mcmTJ5eqjSVLllBQUFDqdS9evBgAHx8fgoKCSv1+ERG5na5WJyJSCX3xYxprk86U+Pr+01nk5Rf9g/uP6/lMWH+A2D2ni31P4NMuvN7RuVRx5OXlkZmZSZ06dYiIiCApKYmCggJCQkLw9fVlz549LFq0CLPZzNWrV4mIiHhwV0r7KRb2x9x5GUMTMPUp/D/7V3B0h+/nFv4rTvuB4BlccnMGA2fPnmX9+vX4+PjQpk0bVq1aRffu3fn222+pVq0a4eHhtG3bltjYWNzd3Tl69ChXrlzh448/ZteuXZw7d47Ro0czePBgTp06xdChQ7lw4QLPP/88I0eOJDk5mZkzZwJQt25dZs+eTUxMDJcuXWLatGl4eHhw/Phxxo0bR2RkJFu3biU/P5/g4GD69etX1k9TROSRpJEjEZEq6M+F0V89Xxq7d+/GaDTSq1cv/P39eemll8jLyyMtLY3Y2FhWrlxJVFQUly9f5ujRo4SHh2MymejRowfx8fH3vP57UqtuYWF06Uzh/7Xq3lNzTk5OLF68mH379hEUFETPnj3ZtWsXHTt2ZMeOHeTn55OQkED37t0B8PDwIDo6Gm9vb7755hsCAgJwdHRk/vz5AOTm5hIZGcmqVass0+amTp3Kv/71L0wmEz4+Pnz66ae8/fbb1KlTh2nTplliOXToEAkJCaxbt45169Zx8uRJdEFaEZHS0ciRiEgl9HpH5zuO8niHbSM964/bnm9a15Y1b3W5p3V7eXkxf/58Ll68yJtvvomzszMpKSn88ssvGI1GAG7cuEF6ejpOTk7MmjULOzs7MjIy6NCh7FPY/pJn8B1HeYD/n0rnMwGSlkG3UHD1KfMqT506hYODA3PmzAHg4MGDDBs2jIULFxITE0NBQQFdu3alRo0aADz55JMANG7cmN9///229lq1amVZtnr1whSdmprK9OnTgcJ7XTVv3rz4rp04gYeHB9WqVaNatWpMnDixzP0SEXlUaeRIRKQKGv9ya2xtqhV5ztamGuNfbn3f1lGvXj3Cw8OZMmUKDRs2pHPnzphMJlasWIGvry8uLi5MnTqV2bNnExYWRqNGjcp3JONmYRQQDS+8V/j/rb9BKoPk5GRmzJhhuSCFq6srtWvXxt3dnTNnzrB+/Xr69u17xzasrKwsvzkq7mpyrq6uzJ07F5PJxPjx4+nWrRvAbZ+lm5sbhw4doqCggOvXr/PGG2+U6kIZIiKikSMRkSrptfZNAQj/NpmzWX/wWF1bxr/c2vL8/dKyZUuMRiPfffcdTZo0oX///ly7do3u3bvj4OBA7969GTBgALa2tjRs2JDMzMz7uv5SSd9XWBDdHCly9Sl8nL6vzKNHPXr0IDU1lb59+2JnZ4fZbGbChAkYDAb8/PyIj4+nVatWd2zj6aefZvjw4fzjH/8o9vVp06YRGhrKjRs3sLKyYtasWQC0aNGCcePG0bVrVwDatGnDc889R3BwMAUFBQQHB1tGoURE5O5YmTUhWUSkUjh8+DBt2rQp7zDkLn366afUrVv3L0eOHjbtRyIiJdPIkYiIyH02ceJEMjMziYqKKu9QRESkFFQciYiI3GdhYWHlHYKIiJSBLsggIiIiIiKCiiMRkUpFPxOVe6H9R0TkzlQciYhUErVq1eL8+fP6A1fKxGw2c/78eWrVqlXeoYiIVFi6Wp2ISCVx/fp10tLSyMnJKe9QpJKqVasWzs7O2NjYlHcoIiIVkoojERERERERNK1OREREREQEUHEkIiIiIiICqDgSEREREREBVByJiIiIiIgAKo5EREREREQA+D+nwJV56TUuUAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def plot_atus_age(real_data, synth_data):\n", + " \n", + " # Define style\n", + " sns.set_style('white') \n", + " days = ['Sunday', 'Sunday', 'Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']\n", + " \n", + " # Define required lists\n", + " real_avgs = []\n", + " synth_avgs = []\n", + " \n", + " # Calculate the relevant real and synthetic data\n", + " for age_idx in [\"[15-24]\", \"75+\"]:\n", + " for day_idx in [1, 2, 3, 4, 5, 6, 7]:\n", + " \n", + " curr_data = real_data[(real_data[\"TEAGE\"] == age_idx) & \n", + " ((real_data[\"TUDIARYDAY\"] == day_idx))]\n", + " real_avgs.append(np.mean((curr_data.iloc[:, 4:].sum(axis = 1)/60).values))\n", + " \n", + " curr_data = synth_data[(synth_data[\"TEAGE\"] == age_idx) & \n", + " ((synth_data[\"TUDIARYDAY\"] == day_idx))]\n", + " synth_avgs.append(np.mean((curr_data.iloc[:, 4:].sum(axis = 1)/60).values))\n", + "\n", + " # Create two sub-figures\n", + " fig, ax = plt.subplots(1, 2)\n", + " plt.rcParams[\"figure.figsize\"] = (14, 6)\n", + " \n", + " # Create first plot\n", + " ax[0].plot(real_avgs[:7], label = \"Real\", marker = \"o\")\n", + " ax[0].plot(synth_avgs[:7], label = \"Synthetic\", marker = \"x\")\n", + " ax[0].set_yticks([11, 11.5, 12, 12.5, 13, 13.5, 14, 14.5, 15])\n", + " ax[0].set_xticklabels(days)\n", + " ax[0].set_xlabel('Days of the Week')\n", + " ax[0].set_ylabel('Sleep Activity in Hours')\n", + " ax[0].set_title(\"Average sleep time for\\nYoungsters (15-24 year olds)\")\n", + " \n", + " # Create second plot\n", + " ax[1].plot(real_avgs[7:], label = \"Real\", marker = \"o\")\n", + " ax[1].plot(synth_avgs[7:], label = \"Synthetic\", marker = \"x\")\n", + " ax[1].set_yticks([11, 11.5, 12, 12.5, 13, 13.5, 14, 14.5, 15])\n", + " ax[1].set_xticklabels(days)\n", + " ax[1].set_xlabel('Days of the Week')\n", + " ax[1].set_ylabel('Sleep Activity in Hours')\n", + " ax[1].set_title(\"Average sleep time for\\nElderly (75+ year olds)\")\n", + " \n", + " # Plot the figures\n", + " ax.flatten()[-2].legend(loc = 'upper center', bbox_to_anchor = (1.1, -0.12), ncol = 12)\n", + "\n", + "plot_atus_age(atus_data, atus_synth_data)" + ] + }, + { + "cell_type": "markdown", + "id": "3ef2e3de", + "metadata": {}, + "source": [ + "## Gender covariate plot for Males and Females\n", + "\n", + "We generate the covariate plots males and females. The difference is not as pronounced as seen in the age groups above." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "a7168101", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0cAAAGfCAYAAACUSKnoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAACehElEQVR4nOzddVyV5//H8dc5tFIiWIRigN09Y9bcnM7uuXL13W/d+67DzXWn277bLJwbMxdO3azZ3a0gGBiA0pxz//64J4qCoMI5xPv5ePAA7vzAUa7zua/r+lwWwzAMREREREREyjmrswMQEREREREpCZQciYiIiIiIoORIREREREQEUHIkIiIiIiICKDkSEREREREBlByJiIiIiIgASo6kGGRlZdGpUyfGjh3r7FCuWnR0NPfcc49D7nXHHXdw8uRJAO666y727NlTLPf5/PPPufbaa3nmmWeu+BpPP/00kZGRLF++PNf2Q4cOUb9+fV555ZVLnn/o0CFatGhxxfcXESkMtUdXpjS1Rx9//DHt27enf//+uT42b95chJFeTO1Y2eXq7ACk7Pnzzz+JjIxk69at7N27lzp16jg7pFJh2bJlOV9PmDCh2O7z008/8c4779C6deuruk6NGjWYNWsWHTp0yNk2Y8YMKleufLUhiogUCbVHV6a0tUd9+vThhRdeKKKopLxTciRFburUqfTp04eaNWvy/fff89JLL9GtWzc++eQTmjRpAsAjjzxCmzZtGDVqFJ9//jnz5s3DbrcTHBzMiy++SNWqVRkzZgx+fn7s27ePkSNH0qRJE95++20yMzNJSEigY8eOvP7664D5RO2rr77C09OT9u3b88MPP7Bt2zaAfK9/voSEBJ566ilOnToFQNeuXXn44YdzHXP69GnGjRvHrl27yMrKokOHDjz55JO4urqyd+9exo0bR2JiIjabjTFjxjBkyBBWrlzJW2+9RdWqVYmNjcXT05Px48df1ECffWp266238tVXXzF69Gg+/PBDUlNTee+996hSpQq7d+/Gy8uLBx54gIkTJ7J//36uu+46/vvf/wKwcOFCPv/8c7KysvD09OSpp5666KnWww8/zNGjR3n22Wd56KGHaNmyJS+99BJxcXEYhsGAAQO48847OXToEKNHj6ZOnTrExcUxceJEqlSpkutaffr04aeffiIjIwMPDw8AfvvtN264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IVq1asXKlSsJDAzkgw8+IC4ujoCAAN566608f3+9evVi1KhRfPbZZ5f9u69Xrx6vvPIKjz76KIZh4Orqyueff57rSWde3nnnHV555RWio6PJzMykX79+DBo0iLi4uELfu3///owaNYrnn38+1/ZLvWZnhzBA/q+Rq6sr//3vf3n88cdxdXXFYrHw+uuvX/SkT0TkQmqPymd7dKHC/s7zo3asfLIYF/YNipQysbGxzJw5k/vuuw+r1cq8efOYMGFCrid2zrJy5UpeffXVXI2aiIiUTWqPREo/9RxJqVetWjWOHTtGv379cHFxwcfHJ88ymyIiIsVJ7ZFI6aeeIxEREREREYqx52jjxo288847TJw4ke3bt/Pqq6/i4uKCu7s7b775JoGBgbmOHzhwIN7e3oBZKvKNN94ortBERETUTomIyEWKJTmaMGECs2bNypmEOG7cOJ5//nkaNGhAVFQUEyZMyFmBGSAjIwPDMJg4cWJxhCMiIpKL2ikREclLsZTyDgsLy1n0DOC9996jQYMGANhsNjw8PHIdv2PHDtLS0rjjjju45ZZb2LBhQ3GEJSIiAqidEhGRvBVLz1Hv3r05dOhQzvdnF/5at24dkyZNyqljf5anpydjx45l6NChHDhwgLvuuovff/+9wAW/2rVrR3BwcNH/ACIiUmhxcXGsXLnS2WFcFrVTIiLlx+W0Uw6rVvfrr7/y+eef89VXXxEQEJBrX3h4ODVr1sRisRAeHo6/vz8JCQlUr179ktcMDg4mOjq6OMMWEZECDBo0yNkhFAm1UyIiZdPltFPFMqzuQjNnzmTSpElMnDgx16JZZ/300085i3IdPXqUM2fOEBQU5IjQRERE1E6JiAjggOTIZrMxbtw4UlJSeOCBBxgzZgwfffQRAE8++STx8fEMGTKE06dPM3LkSB555BFef/31AocqiIiIFAW1UyIiclapXudo0KBBGq4gIuJk+lucP/1uRESc73L+FjtkWJ2IiIiIiEhJp+RIREREREQEJUciIiIiIiKAkiMRERERERFAyZGIiIiIiAig5EhERERERARQciQiIiIiIgIoORIREREREQGUHImIiIiIiABKjkRERERERAAlRyIiIiIiIoCSIxEREREREUDJkYiIiIiICACuzg5AREScY8b6ON7+YyfxiWnU8Pfiid6RDGgR7OywREREnEbJkYhI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RESKnZIjEUdy84Tuz5oFGyYNhrg14F0Nmg0/V17bvaKzoxQREREpl4qxvrCI5CvlGGSnQadHwZ4FdXtC3R5KjEREREScSMmRiKPtXwzTb4Oh30HPF83P028zt4uIiIiI0yg5EnG0uHVmQnS2Wl14F/P7uHXOjEpERESk3Cu2OUcbN27knXfeYeLEiRw8eJCnn34ai8VCvXr1ePHFF7Faz+VlhmHQpUsXatWqBUDz5s157LHHiis0Eec6W677fOFdcpf2FhGHUFslIiLnK5bkaMKECcyaNQsvLy8A3njjDR5++GHatWvHCy+8wIIFC+jVq1fO8TExMTRq1IgvvviiOMIRERG5iNoqERG5ULEMqwsLC+Pjjz/O+X7r1q20bdsWgC5duvDPP//kOn7r1q0cPXqUMWPGcNddd7Fv377iCEtERCSH2ioREblQsSRHvXv3xtX1XKeUYRhYLBYAKlasyOnTp3MdHxQUxN13383EiRO55557eOKJJ4ojLBERkRxqq0RE5EIOWefo/DHbKSkp+Pr65trfuHFjXFxcAGjdujXHjh3L1UiJiIgUN7VVIiLikGp1DRs2ZOXKlQAsXryY1q1b59r/ySef8P333wOwY8cOqlevrsZGREQcSm2ViIg4JDl66qmn+Pjjjxk+fDhZWVn07t0bgDvuuIPMzEzuvvtuVq9ezc0338wbb7zBG2+84YiwREREcqitEhERi2EYhrODuFKDBg0iOjra2WGIiJRr+lucP/1uRESc73L+FmsRWBEREREREZQciYiIiIiIAEqOREREREREACVHIiIiIiIigJIjERERERERQMmRiIiIiIgIoORIREREREQEUHIkIiIiIiICKDkSEREREREBlByJiIiIiIgASo5EREREREQAJUciIiIiIiKAkiMRERERERFAyZGIiIiIiAig5EhERERERARQciQiIiIiIgIoORIREREREQGUHImIiIiIiABKjkRERERERAAlRyIiIiIiIoCSIxEREREREUDJkYiIiIiICKDkSEREREREBFByJCIiIiIiAig5EhERERERAZQciYiIiIiIAEqOREREREREACVHIiIiIiIigJIjERERERERQMmRiIiIiIgIoORIREREREQEUHIkIiIiIiICKDkSEREREREBlByJiIiIiIgASo5EREREREQAJUciIiIiIiKAkiMRERER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iIyMtH0jN3z4cN5++23WrFnD5cuXefPNN6lZsyYhISEYjUbMZjMNGjTA19fX1qa3tzdffPEFH374IcOHD7+bt1lERIpJeUp5Sh4OBqvVai3tIEQeRps2bSIlJYVRo0aVdigiIiK/ozwlcv9p5EikEO+99x5JSUlERUWVdigiIiK/ozwlUjI0ciQiIiIiIoIuyCAiIiIiIgKoOBIREREREQFUHImIiIiIiAAqjkRERERERAAVRyIiIiIiIoCKIxEREREREUDFkYiIiIiICKDiSEREREREBFBxJCIiIiIiAqg4EhERERERAVQciYiIiIiIACqOREREREREABVHIiIiIiIigIojERERERERACqWdgAiInJnrl+/Tnp6Ojk5OaUdipRRVatWxdXVlUqVKpV2KCIiDyWD1Wq1lnYQIiLyx44fP46zszO1atXCYDCUdjhSxlitVs6ePculS5dwd3cv7XBERB5KOq1ORKSMyMnJUWEkxWYwGKhVq5ZGHkVEbkPFkYhIGaLCSO6Fth8RkdvTb45ERMqpT77LIPyLZE5nX+Px6vaMf6kZPZ9pUNphlZ7t70OD1uDu87/njidCxj54/m+lFZWIiDxENHIkIlIOffJdBpPiD5CRfQ0rkJF9jUnxB/jku4x7ajcpKYkOHTpgNBoxGo34+/szcuRI8vLy7riN9PR0AgMD7ymOYmnQGtaG5BdEkP/v2pD85+/BkiVLCAkJITg4GKPRyI8//nhXr4+Li+P69eskJSUxevToO35dbGwsAImJicTFxd3VMkVEpHAaORIRKYM+/jadNXtPFTn9u5PZ5JktBZ67dt3MhHU/YNp9stDXBD7rxqttXP9w2e3bt2fevHm2x2PHjmXr1q1069btDqMvIftN8F3s7edxrg8xvfL/vfQz1PGEr+fk/xXmmWBoFVRkc0ePHmXr1q2YTCYMBgOHDx8mNDSU9evX33HYixcvpmfPnnc8/02LFi0iODgYHx+fP55ZRETuiIojEZFy6LeF0R89X+zl5OWRlZXFY489RkREBHv37sVisRASEoKvry+7d+9m4cKFWK1Wrly5QkREROleRrpq9fzC6MIpeMwt//E9cHZ25vTp06xbtw4fHx+aN2/OypUr6dKlC1988QUVKlQgPDycFi1aYDKZ8PT05MiRI1y+fJkPPviAnTt3cubMGUaPHs3AgQNJS0tjyJAhnDt3jhdeeIERI0aQnJzM9OnTAahevTozZ84kNjaWCxcuEBYWhpeXF8eOHWPcuHFERkayZcsWzGYzQUFB9O3b997fMxGRR4iKIxGRMujVNq63HeXxnr2VjOxrv3u+QXV74l7vcE/L3rVrF0ajkbNnz2JnZ0dgYCB5eXmkp6djMpnIzc0lMDAQb29vjhw5Qnh4OC4uLkRFRZGQkICfn989Lb9IrYJuO8oD/O9UOp8JsHcpdA4t+Buku+Ti4sKiRYuIjY3ln//8J1WrVmX06NG0adOG7du38/zzz5OYmMioUaMwmUx4eXnx9ttvM2/ePD7//HOGDRvGokWLmDdvHvv37yc3N5fIyEjMZjOdO3dmxIgRTJkyhZkzZ9KkSRPWrl3LRx99xOjRo4mNjSUsLIz4+HgADh06RGJiImvXrsVsNvPee+9htVp1EQYRkbug4khEpBwa/1IzJsUf4Np1s+05+0oVGP9Ss3tu++ZpdefPn2fQoEG4urqSkpLCwYMHMRqNANy4cYOMjAxcXFyYMWMGDg4OZGZm0rr1vf2+557cLIwCovMLIvdOBR8XQ1paGk5OTsyaNQuAAwcOMHToUBYsWEBsbCwWi4WOHTtSuXJlAJ566ikA6tWrx6+//vq79po2bWqbt2LF/BSdmprK1KlTgfwbATdq1Kjw7h0/jpeXFxUqVKBChQpMnDixWH0SEXmU6YIMIiLlUM9nGjDL/2kaVLfHQP6I0Sz/p+/r1epq1KhBeHg4kydPpnbt2rRr146YmBiWL1+Or68vbm5utlGP2bNnU7duXUr1vuMZ+woWQu4++Y8z9hW7yeTkZKZNm2a7IIW7uzvVqlXD09OTU6dOsW7dOnr37n3bNgwGAxaLxfb/33J3d2fOnDnExMQwfvx4OnfuDPC799LDw4NDhw5hsVi4fv06r7322l1dKENERDRyJCJSbvV8pkGJX7q7SZMmGI1GvvrqK+rXr0+/fv24evUqXbp0wcnJiR49etC/f3/s7e2pXbs2WVlZJRrPbRV2uW53n3s6ra5r166kpqbSu3dvHBwcsFqtTJgwAWdnZ/z8/EhISKBp06a3bePZZ59l2LBh/PWvfy10elhYGKGhody4cQODwcCMGTMAaNy4MePGjaNjx44ANG/enE6dOhEUFITFYiEoKMg2CiUiInfGYC3Vr/FEROROHT58mObNm5d2GHKHPvroI6pXr/6HI0cPmrYjEZGiaeRIRETkPps4cSJZWVlERUWVdigiInIXVByJiIjcZ7Nnzy7tEEREpBh0QQYRkTJEZ0LLvdD2IyJyeyqORETKiKpVq3L27Fl9wJVisVqtnD17lqpVq5Z2KCIiDy1dkEFEpIy4fv066enp5OTklHYoUkZVrVoVV1dXKlWqVNqhiIg8lFQciYiIiIiIoNPqREREREREABVHIiIiIiIigIojERERERERQMWRiIiIiIgIoOJIREREREQEgP8Hpa2GymBT4lMAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def plot_atus_gender(real_data, synth_data):\n", + " \n", + " # Define style\n", + " sns.set_style('white') \n", + " days = ['Sunday', 'Sunday', 'Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']\n", + " \n", + " # Define required lists\n", + " real_avgs = []\n", + " synth_avgs = []\n", + " \n", + " # Calculate the relevant real and synthetic data\n", + " for gender_idx in [1, 2]:\n", + " for day_idx in [1, 2, 3, 4, 5, 6, 7]:\n", + " \n", + " curr_data = real_data[(real_data[\"TESEX\"] == gender_idx) & \n", + " ((real_data[\"TUDIARYDAY\"] == day_idx))]\n", + " real_avgs.append(np.mean((curr_data.iloc[:, 4:].sum(axis = 1)/60).values))\n", + " \n", + " curr_data = synth_data[(synth_data[\"TESEX\"] == gender_idx) & \n", + " ((synth_data[\"TUDIARYDAY\"] == day_idx))]\n", + " synth_avgs.append(np.mean((curr_data.iloc[:, 4:].sum(axis = 1)/60).values))\n", + "\n", + " # Create two sub-figures\n", + " fig, ax = plt.subplots(1, 2)\n", + " plt.rcParams[\"figure.figsize\"] = (14, 6)\n", + " \n", + " # Create first plot\n", + " ax[0].plot(real_avgs[:7], label = \"Real\", marker = \"o\")\n", + " ax[0].plot(synth_avgs[:7], label = \"Synthetic\", marker = \"x\")\n", + " ax[0].set_yticks([10, 10.5, 11, 11.5, 12, 12.5])\n", + " ax[0].set_xticklabels(days)\n", + " ax[0].set_xlabel('Days of the Week')\n", + " ax[0].set_ylabel('Sleep Activity in Hours')\n", + " ax[0].set_title(\"Average sleep time for Males\")\n", + " \n", + " # Create second plot\n", + " ax[1].plot(real_avgs[7:], label = \"Real\", marker = \"o\")\n", + " ax[1].plot(synth_avgs[7:], label = \"Synthetic\", marker = \"x\")\n", + " ax[1].set_yticks([10, 10.5, 11, 11.5, 12, 12.5])\n", + " ax[1].set_xticklabels(days)\n", + " ax[1].set_xlabel('Days of the Week')\n", + " ax[1].set_ylabel('Sleep Activity in Hours')\n", + " ax[1].set_title(\"Average sleep time for Females\")\n", + " \n", + " # Plot the figures\n", + " ax.flatten()[-2].legend(loc = 'upper center', bbox_to_anchor = (1.1, -0.12), ncol = 12)\n", + "\n", + "plot_atus_gender(atus_data, atus_synth_data)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 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.9.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/Synthetic_Data_Evaluation.Rmd b/notebooks/Synthetic_Data_Evaluation.Rmd new file mode 100644 index 0000000..e675d9f --- /dev/null +++ b/notebooks/Synthetic_Data_Evaluation.Rmd @@ -0,0 +1,120 @@ +--- +title: "R Notebook" +output: html_notebook +--- +```{r} +source("../scripts/Equity_metrics.R") +source("../scripts/sunburst_process.R") +source("../scripts/table_process.R") +library(plotly) +library(formattable) +``` + + +Read in the datasets +```{r} +ATUSreference<-read.csv(file = "../data/Atus/atus_train.csv") +ATUSsynthetic<-read.csv(file = "../data/Atus/atus_train_synthetic.csv") + +MIMICRacereference<-read.csv(file = "../data/Mimic/mimic_3.csv") +MIMICRacesynthetic<-read.csv(file = "../data/Mimic/mimic_3_synthetic.csv") +``` + + +Preprocess the ATUS data +```{r} +ATUSreference_processed<-ATUSreference %>% + group_by(TESEX, TEAGE) %>% + summarise(background_n = n()) +colnames(ATUSreference_processed)<-c("Gender","Age","background_n") + +ATUSsynthetic_processed<-ATUSsynthetic %>% + group_by(TESEX, TEAGE) %>% + summarise(background_n = n()) +colnames(ATUSsynthetic_processed)<-c("Gender","Age","user_n") + + +ATUSreference_processed<-ATUSreference_processed %>% mutate(Gender=recode(Gender, + `1`="Male", + `2`="Female"), + Age=recode(Age, + `0`="15-24", + `1`="25-34", + `2`="35-44", + `3`="45-54", + `4`="55-64", + `5`="65-74", + `6`="75+")) + +ATUSsynthetic_processed<-ATUSsynthetic_processed %>% mutate(Gender=recode(Gender, + `1`="Male", + `2`="Female"), + Age=recode(Age, + `0`="15-24", + `1`="25-34", + `2`="35-44", + `3`="45-54", + `4`="55-64", + `5`="65-74", + `6`="75+")) + +``` + +Preprocess the MIMIC data +```{r} +MIMICRacereference_processed<-MIMICRacereference %>% + group_by(GENDER,AGE,ETHNICITY,mortality_withinthirtydays) %>% + summarise(background_n = n()) +colnames(MIMICRacereference_processed)<-c("Gender","Age","Ethnicity","Mortality","background_n") + +MIMICRacesynthetic_processed<-MIMICRacesynthetic %>% + group_by(GENDER,AGE, ETHNICITY, mortality_withinthirtydays) %>% + summarise(background_n = n()) +colnames(MIMICRacesynthetic_processed)<-c("Gender","Age","Ethnicity","Mortality","user_n") + + +MIMICRacereference_processed$Mortality<-as.factor(MIMICRacereference_processed$Mortality) +MIMICRacesynthetic_processed$Mortality<-as.factor(MIMICRacesynthetic_processed$Mortality) + + +MIMICRacereference_processed<-MIMICRacereference_processed %>% mutate(Gender=recode(Gender, + `M`="Male", + `F`="Female"), + Mortality =recode(Mortality, + `0`="Alive", + `1`="Died")) + +MIMICRacesynthetic_processed<-MIMICRacesynthetic_processed %>% mutate(Gender=recode(Gender, + `M`="Male", + `F`="Female"), + Mortality =recode(Mortality, + `0`="Alive", + `1`="Died")) +``` + + +Evaluation on ATUS data +```{r} +test_sunburst2(ATUSreference_processed,c("Gender","Age"),ATUSsynthetic_processed, "ATUSEquity1.csv", sig_t = 0.05,lower_t = -log(0.9), upper_t = -log(0.8) ) +``` + +Evaluation on MIMIC data +```{r} +test_sunburst2(MIMICRacereference_processed,c("Mortality","Ethnicity","Age","Gender"),MIMICRacesynthetic_processed,"MIMICRaceEquity1.csv", sig_t = 0.05,lower_t = -log(0.9), upper_t = -log(0.8)) +``` + +Tables for ATUS and MIMIC with significance threshold =0.05, lower metric threshold = -log(0.9), upper metric threshold = -log(0.8), metric = log disparity +```{r} +generate_table(0.05,-log(0.9),-log(0.8), "LDI", "ATUS") +generate_table(0.05,-log(0.9),-log(0.8), "LDI", "MIMIC") +``` + + + + + + + + + + diff --git a/results/ATUSEquity1.csv b/results/ATUSEquity1.csv new file mode 100644 index 0000000..ec7e74f --- /dev/null +++ b/results/ATUSEquity1.csv @@ -0,0 +1,17 @@ +"","ids","labels","parents","Observed_Rate","Ideal_Rate","EquityColors","EquityLable","EquityValue","Observed_Number","Trial_Number" +"1","Female - 15-24","15-24","Female",0.066,0.0637,"#d4e6e8","Equitable(p)",0.0382,1980,30000 +"2","Female - 25-34","25-34","Female",0.1,0.0986,"#d4e6e8","Equitable(p)",0.0189,3010,30000 +"3","Female - 35-44","35-44","Female",0.131,0.123,"#d4e6e8","Equitable",0.0659,3916,30000 +"4","Female - 45-54","45-54","Female",0.101,0.103,"#d4e6e8","Equitable(p)",-0.0175,3029,30000 +"5","Female - 55-64","55-64","Female",0.0743,0.0766,"#d4e6e8","Equitable(p)",-0.0319,2230,30000 +"6","Female - 65-74","65-74","Female",0.0565,0.0546,"#d4e6e8","Equitable(p)",0.0348,1694,30000 +"7","Female - 75+","75+","Female",0.0445,0.0504,"#eabcad","Underrepresented",-0.13,1335,30000 +"8","Female","Female","",0.573,0.57,"#d4e6e8","Equitable(p)",0.014,17194,30000 +"9","Male - 15-24","15-24","Male",0.0514,0.0554,"#d4e6e8","Equitable(p)",-0.0784,1543,30000 +"10","Male - 25-34","25-34","Male",0.0782,0.0688,"#a5b0cb","Overrepresented",0.138,2346,30000 +"11","Male - 35-44","35-44","Male",0.0995,0.099,"#d4e6e8","Equitable(p)",0.00525,2985,30000 +"12","Male - 45-54","45-54","Male",0.0788,0.0816,"#d4e6e8","Equitable(p)",-0.0389,2363,30000 +"13","Male - 55-64","55-64","Male",0.0559,0.0584,"#d4e6e8","Equitable(p)",-0.0478,1676,30000 +"14","Male - 65-74","65-74","Male",0.0373,0.0399,"#d4e6e8","Equitable(p)",-0.0692,1119,30000 +"15","Male - 75+","75+","Male",0.0258,0.0271,"#d4e6e8","Equitable(p)",-0.0502,774,30000 +"16","Male","Male","",0.427,0.43,"#d4e6e8","Equitable(p)",-0.014,12806,30000 diff --git a/results/MIMICRaceEquity1.csv b/results/MIMICRaceEquity1.csv new file mode 100644 index 0000000..b9bfc42 --- /dev/null +++ b/results/MIMICRaceEquity1.csv @@ -0,0 +1,133 @@ +"","ids","labels","parents","Observed_Rate","Ideal_Rate","EquityColors","EquityLable","EquityValue","Observed_Number","Trial_Number" +"1","Alive - Asian - <=45 - Female","Female","Alive - Asian - <=45",0.00374,0.00334,"#d4e6e8","Equitable(p)",0.114,374,1e+05 +"2","Alive - Asian - <=45 - Male","Male","Alive - Asian - <=45",0.0036,0.00174,"#00205b","Highly Overrepresented",0.728,360,1e+05 +"3","Alive - Asian - <=45","<=45","Alive - Asian",0.00734,0.00508,"#00205b","Highly Overrepresented",0.37,734,1e+05 +"4","Alive - Asian - 46-65 - Female","Female","Alive - Asian - 46-65",0.00462,0.00312,"#00205b","Highly Overrepresented",0.394,462,1e+05 +"5","Alive - Asian - 46-65 - Male","Male","Alive - Asian - 46-65",0.00578,0.00479,"#d4e6e8","Equitable(p)",0.189,578,1e+05 +"6","Alive - Asian - 46-65","46-65","Alive - Asian",0.0104,0.00791,"#00205b","Highly Overrepresented",0.276,1040,1e+05 +"7","Alive - Asian - 66-80 - Female","Female","Alive - Asian - 66-80",0.00345,0.00312,"#d4e6e8","Equitable(p)",0.101,345,1e+05 +"8","Alive - Asian - 66-80 - Male","Male","Alive - Asian - 66-80",0.00351,0.00356,"#d4e6e8","Equitable(p)",-0.013,351,1e+05 +"9","Alive - Asian - 66-80","66-80","Alive - Asian",0.00696,0.00668,"#d4e6e8","Equitable(p)",0.0419,696,1e+05 +"10","Alive - Asian - 81+ - Female","Female","Alive - Asian - 81+",0.00332,0.00203,"#00205b","Highly Overrepresented",0.492,332,1e+05 +"11","Alive - Asian - 81+ - Male","Male","Alive - Asian - 81+",0.00246,0.00196,"#d4e6e8","Equitable(p)",0.228,246,1e+05 +"12","Alive - Asian - 81+","81+","Alive - Asian",0.00578,0.00399,"#00205b","Highly Overrepresented",0.372,578,1e+05 +"13","Alive - Asian","Asian","Alive",0.0305,0.0237,"#00205b","Highly Overrepresented",0.26,3048,1e+05 +"14","Alive - Black - <=45 - Female","Female","Alive - Black - <=45",0.00515,0.0132,"#d58570","Highly Underrepresented",-0.95,515,1e+05 +"15","Alive - Black - <=45 - Male","Male","Alive - Black - <=45",0.00489,0.00835,"#d58570","Highly Underrepresented",-0.538,489,1e+05 +"16","Alive - Black - <=45","<=45","Alive - Black",0.01,0.0216,"#d58570","Highly Underrepresented",-0.776,1004,1e+05 +"17","Alive - Black - 46-65 - Female","Female","Alive - Black - 46-65",0.00978,0.0165,"#d58570","Highly Underrepresented",-0.533,978,1e+05 +"18","Alive - Black - 46-65 - Male","Male","Alive - Black - 46-65",0.0121,0.0181,"#d58570","Highly Underrepresented",-0.405,1213,1e+05 +"19","Alive - Black - 46-65","46-65","Alive - Black",0.0219,0.0346,"#d58570","Highly Underrepresented",-0.47,2191,1e+05 +"20","Alive - Black - 66-80 - Female","Female","Alive - Black - 66-80",0.00704,0.0132,"#d58570","Highly Underrepresented",-0.635,704,1e+05 +"21","Alive - Black - 66-80 - Male","Male","Alive - Black - 66-80",0.00639,0.00951,"#d58570","Highly Underrepresented",-0.4,639,1e+05 +"22","Alive - Black - 66-80","66-80","Alive - Black",0.0134,0.0227,"#d58570","Highly Underrepresented",-0.535,1343,1e+05 +"23","Alive - Black - 81+ - Female","Female","Alive - Black - 81+",0.00589,0.00595,"#d4e6e8","Equitable(p)",-0.0103,589,1e+05 +"24","Alive - Black - 81+ - Male","Male","Alive - Black - 81+",0.00552,0.00377,"#00205b","Highly Overrepresented",0.382,552,1e+05 +"25","Alive - Black - 81+","81+","Alive - Black",0.0114,0.00972,"#d4e6e8","Equitable(p)",0.162,1141,1e+05 +"26","Alive - Black","Black","Alive",0.0568,0.0886,"#d58570","Highly Underrepresented",-0.479,5679,1e+05 +"27","Alive","Alive","",0.875,0.847,"#00205b","Highly Overrepresented",0.232,87468,1e+05 +"28","Alive - Other - <=45 - Female","Female","Alive - Other - <=45",0.00632,0.009,"#d58570","Highly Underrepresented",-0.356,632,1e+05 +"29","Alive - Other - <=45 - Male","Male","Alive - Other - <=45",0.00588,0.011,"#d58570","Highly Underrepresented",-0.628,588,1e+05 +"30","Alive - Other - <=45","<=45","Alive - Other",0.0122,0.02,"#d58570","Highly Underrepresented",-0.5,1220,1e+05 +"31","Alive - Other - 46-65 - Female","Female","Alive - Other - 46-65",0.00946,0.01,"#d4e6e8","Equitable(p)",-0.0575,946,1e+05 +"32","Alive - Other - 46-65 - Male","Male","Alive - Other - 46-65",0.0122,0.0144,"#eabcad","Underrepresented",-0.173,1218,1e+05 +"33","Alive - Other - 46-65","46-65","Alive - Other",0.0216,0.0245,"#d4e6e8","Equitable(p)",-0.125,2164,1e+05 +"34","Alive - Other - 66-80 - Female","Female","Alive - Other - 66-80",0.00694,0.00537,"#d4e6e8","Equitable(p)",0.258,694,1e+05 +"35","Alive - Other - 66-80 - Male","Male","Alive - Other - 66-80",0.00665,0.00697,"#d4e6e8","Equitable(p)",-0.0468,665,1e+05 +"36","Alive - Other - 66-80","66-80","Alive - Other",0.0136,0.0123,"#d4e6e8","Equitable(p)",0.098,1359,1e+05 +"37","Alive - Other - 81+ - Female","Female","Alive - Other - 81+",0.00618,0.00247,"#00205b","Highly Overrepresented",0.922,618,1e+05 +"38","Alive - Other - 81+ - Male","Male","Alive - Other - 81+",0.0054,0.00174,"#00205b","Highly Overrepresented",1.14,540,1e+05 +"39","Alive - Other - 81+","81+","Alive - Other",0.0116,0.00421,"#00205b","Highly Overrepresented",1.02,1158,1e+05 +"40","Alive - Other","Other","Alive",0.059,0.061,"#d4e6e8","Equitable(p)",-0.0345,5901,1e+05 +"41","Alive - Unknown - <=45 - Female","Female","Alive - Unknown - <=45",0.00604,0.00617,"#d4e6e8","Equitable(p)",-0.0212,604,1e+05 +"42","Alive - Unknown - <=45 - Male","Male","Alive - Unknown - <=45",0.00546,0.00784,"#d58570","Highly Underrepresented",-0.364,546,1e+05 +"43","Alive - Unknown - <=45","<=45","Alive - Unknown",0.0115,0.014,"#eabcad","Underrepresented",-0.2,1150,1e+05 +"44","Alive - Unknown - 46-65 - Female","Female","Alive - Unknown - 46-65",0.0105,0.0098,"#d4e6e8","Equitable(p)",0.0681,1048,1e+05 +"45","Alive - Unknown - 46-65 - Male","Male","Alive - Unknown - 46-65",0.0136,0.012,"#d4e6e8","Equitable(p)",0.124,1362,1e+05 +"46","Alive - Unknown - 46-65","46-65","Alive - Unknown",0.0241,0.0218,"#d4e6e8","Equitable(p)",0.101,2410,1e+05 +"47","Alive - Unknown - 66-80 - Female","Female","Alive - Unknown - 66-80",0.00724,0.00958,"#d58570","Highly Underrepresented",-0.282,724,1e+05 +"48","Alive - Unknown - 66-80 - Male","Male","Alive - Unknown - 66-80",0.00668,0.0113,"#d58570","Highly Underrepresented",-0.532,668,1e+05 +"49","Alive - Unknown - 66-80","66-80","Alive - Unknown",0.0139,0.0209,"#d58570","Highly Underrepresented",-0.414,1392,1e+05 +"50","Alive - Unknown - 81+ - Female","Female","Alive - Unknown - 81+",0.007,0.00697,"#d4e6e8","Equitable(p)",0.00481,700,1e+05 +"51","Alive - Unknown - 81+ - Male","Male","Alive - Unknown - 81+",0.00548,0.00501,"#d4e6e8","Equitable(p)",0.0907,548,1e+05 +"52","Alive - Unknown - 81+","81+","Alive - Unknown",0.0125,0.012,"#d4e6e8","Equitable(p)",0.0419,1248,1e+05 +"53","Alive - Unknown","Unknown","Alive",0.062,0.0687,"#eabcad","Underrepresented",-0.11,6200,1e+05 +"54","Alive - White - <=45 - Female","Female","Alive - White - <=45",0.0514,0.0485,"#d4e6e8","Equitable(p)",0.0609,5144,1e+05 +"55","Alive - White - <=45 - Male","Male","Alive - White - <=45",0.0494,0.0557,"#eabcad","Underrepresented",-0.126,4945,1e+05 +"56","Alive - White - <=45","<=45","Alive - White",0.101,0.104,"#d4e6e8","Equitable(p)",-0.0368,10089,1e+05 +"57","Alive - White - 46-65 - Female","Female","Alive - White - 46-65",0.104,0.0909,"#a5b0cb","Overrepresented",0.153,10440,1e+05 +"58","Alive - White - 46-65 - Male","Male","Alive - White - 46-65",0.135,0.119,"#a5b0cb","Overrepresented",0.143,13520,1e+05 +"59","Alive - White - 46-65","46-65","Alive - White",0.24,0.21,"#a5b0cb","Overrepresented",0.169,23960,1e+05 +"60","Alive - White - 66-80 - Female","Female","Alive - White - 66-80",0.0891,0.0809,"#a5b0cb","Overrepresented",0.106,8912,1e+05 +"61","Alive - White - 66-80 - Male","Male","Alive - White - 66-80",0.0849,0.0869,"#d4e6e8","Equitable(p)",-0.0258,8491,1e+05 +"62","Alive - White - 66-80","66-80","Alive - White",0.174,0.168,"#d4e6e8","Equitable(p)",0.0436,17403,1e+05 +"63","Alive - White - 81+ - Female","Female","Alive - White - 81+",0.0814,0.0718,"#a5b0cb","Overrepresented",0.136,8140,1e+05 +"64","Alive - White - 81+ - Male","Male","Alive - White - 81+",0.0705,0.0509,"#00205b","Highly Overrepresented",0.345,7048,1e+05 +"65","Alive - White - 81+","81+","Alive - White",0.152,0.123,"#00205b","Highly Overrepresented",0.247,15188,1e+05 +"66","Alive - White","White","Alive",0.666,0.605,"#00205b","Highly Overrepresented",0.265,66640,1e+05 +"67","Died - Asian - <=45 - Female","Female","Died - Asian - <=45",0.00049,0.000145,"#00205b","Highly Overrepresented",1.22,49,1e+05 +"68","Died - Asian - <=45 - Male","Male","Died - Asian - <=45",0.00037,0.000218,"#00205b","Highly Overrepresented",0.531,37,1e+05 +"69","Died - Asian - <=45","<=45","Died - Asian",0.00086,0.000363,"#d4e6e8","Equitable(p)",0.863,86,1e+05 +"70","Died - Asian - 46-65 - Female","Female","Died - Asian - 46-65",0.00062,0.000435,"#d4e6e8","Equitable(p)",0.354,62,1e+05 +"71","Died - Asian - 46-65 - Male","Male","Died - Asian - 46-65",9e-04,0.000435,"#d4e6e8","Equitable(p)",0.727,90,1e+05 +"72","Died - Asian - 46-65","46-65","Died - Asian",0.00152,0.000871,"#d4e6e8","Equitable(p)",0.558,152,1e+05 +"73","Died - Asian - 66-80 - Female","Female","Died - Asian - 66-80",0.00056,0.000508,"#d4e6e8","Equitable(p)",0.0975,56,1e+05 +"74","Died - Asian - 66-80 - Male","Male","Died - Asian - 66-80",0.00051,0.000943,"#d4e6e8","Equitable(p)",-0.616,51,1e+05 +"75","Died - Asian - 66-80","66-80","Died - Asian",0.00107,0.00145,"#d4e6e8","Equitable(p)",-0.305,107,1e+05 +"76","Died - Asian - 81+ - Female","Female","Died - Asian - 81+",0.00069,0.000653,"#d4e6e8","Equitable(p)",0.055,69,1e+05 +"77","Died - Asian - 81+ - Male","Male","Died - Asian - 81+",0.00055,0.000943,"#d4e6e8","Equitable(p)",-0.54,55,1e+05 +"78","Died - Asian - 81+","81+","Died - Asian",0.00124,0.0016,"#d4e6e8","Equitable(p)",-0.253,124,1e+05 +"79","Died - Asian","Asian","Died",0.00469,0.00428,"#d4e6e8","Equitable(p)",0.0915,469,1e+05 +"80","Died - Black - <=45 - Female","Female","Died - Black - <=45",0.00044,0.000508,"#d4e6e8","Equitable(p)",-0.144,44,1e+05 +"81","Died - Black - <=45 - Male","Male","Died - Black - <=45",0.00036,0.000653,"#d4e6e8","Equitable(p)",-0.596,36,1e+05 +"82","Died - Black - <=45","<=45","Died - Black",8e-04,0.00116,"#d4e6e8","Equitable(p)",-0.373,80,1e+05 +"83","Died - Black - 46-65 - Female","Female","Died - Black - 46-65",0.00099,0.00138,"#d4e6e8","Equitable(p)",-0.332,99,1e+05 +"84","Died - Black - 46-65 - Male","Male","Died - Black - 46-65",0.00142,0.00174,"#d4e6e8","Equitable(p)",-0.205,142,1e+05 +"85","Died - Black - 46-65","46-65","Died - Black",0.00241,0.00312,"#d4e6e8","Equitable(p)",-0.259,241,1e+05 +"86","Died - Black - 66-80 - Female","Female","Died - Black - 66-80",0.0011,0.00232,"#d58570","Highly Underrepresented",-0.748,110,1e+05 +"87","Died - Black - 66-80 - Male","Male","Died - Black - 66-80",0.00116,0.000943,"#d4e6e8","Equitable(p)",0.207,116,1e+05 +"88","Died - Black - 66-80","66-80","Died - Black",0.00226,0.00327,"#d58570","Highly Underrepresented",-0.369,226,1e+05 +"89","Died - Black - 81+ - Female","Female","Died - Black - 81+",0.00122,0.00138,"#d4e6e8","Equitable(p)",-0.123,122,1e+05 +"90","Died - Black - 81+ - Male","Male","Died - Black - 81+",0.00092,0.000871,"#d4e6e8","Equitable(p)",0.055,92,1e+05 +"91","Died - Black - 81+","81+","Died - Black",0.00214,0.00225,"#d4e6e8","Equitable(p)",-0.0501,214,1e+05 +"92","Died - Black","Black","Died",0.00761,0.0098,"#d58570","Highly Underrepresented",-0.255,761,1e+05 +"93","Died","Died","",0.125,0.153,"#d58570","Highly Underrepresented",-0.232,12532,1e+05 +"94","Died - Other - <=45 - Female","Female","Died - Other - <=45",0.00068,0.000363,"#d4e6e8","Equitable(p)",0.628,68,1e+05 +"95","Died - Other - <=45 - Male","Male","Died - Other - <=45",0.00057,0.000508,"#d4e6e8","Equitable(p)",0.115,57,1e+05 +"96","Died - Other - <=45","<=45","Died - Other",0.00125,0.000871,"#d4e6e8","Equitable(p)",0.362,125,1e+05 +"97","Died - Other - 46-65 - Female","Female","Died - Other - 46-65",0.00128,0.000871,"#d4e6e8","Equitable(p)",0.386,128,1e+05 +"98","Died - Other - 46-65 - Male","Male","Died - Other - 46-65",0.00138,0.00181,"#d4e6e8","Equitable(p)",-0.274,138,1e+05 +"99","Died - Other - 46-65","46-65","Died - Other",0.00266,0.00269,"#d4e6e8","Equitable(p)",-0.0094,266,1e+05 +"100","Died - Other - 66-80 - Female","Female","Died - Other - 66-80",0.00144,0.00123,"#d4e6e8","Equitable(p)",0.155,144,1e+05 +"101","Died - Other - 66-80 - Male","Male","Died - Other - 66-80",0.00117,0.00123,"#d4e6e8","Equitable(p)",-0.0531,117,1e+05 +"102","Died - Other - 66-80","66-80","Died - Other",0.00261,0.00247,"#d4e6e8","Equitable(p)",0.0564,261,1e+05 +"103","Died - Other - 81+ - Female","Female","Died - Other - 81+",0.00117,0.000435,"#00205b","Highly Overrepresented",0.989,117,1e+05 +"104","Died - Other - 81+ - Male","Male","Died - Other - 81+",0.00104,0.000726,"#d4e6e8","Equitable(p)",0.36,104,1e+05 +"105","Died - Other - 81+","81+","Died - Other",0.00221,0.00116,"#00205b","Highly Overrepresented",0.645,221,1e+05 +"106","Died - Other","Other","Died",0.00873,0.00718,"#d4e6e8","Equitable(p)",0.196,873,1e+05 +"107","Died - Unknown - <=45 - Female","Female","Died - Unknown - <=45",0.00058,0.00109,"#d4e6e8","Equitable(p)",-0.63,58,1e+05 +"108","Died - Unknown - <=45 - Male","Male","Died - Unknown - <=45",0.00039,0.00116,"#d58570","Highly Underrepresented",-1.09,39,1e+05 +"109","Died - Unknown - <=45","<=45","Died - Unknown",0.00097,0.00225,"#d58570","Highly Underrepresented",-0.843,97,1e+05 +"110","Died - Unknown - 46-65 - Female","Female","Died - Unknown - 46-65",0.00126,0.00269,"#d58570","Highly Underrepresented",-0.758,126,1e+05 +"111","Died - Unknown - 46-65 - Male","Male","Died - Unknown - 46-65",0.00166,0.0045,"#d58570","Highly Underrepresented",-1,166,1e+05 +"112","Died - Unknown - 46-65","46-65","Died - Unknown",0.00292,0.00718,"#d58570","Highly Underrepresented",-0.905,292,1e+05 +"113","Died - Unknown - 66-80 - Female","Female","Died - Unknown - 66-80",0.0014,0.00457,"#d58570","Highly Underrepresented",-1.19,140,1e+05 +"114","Died - Unknown - 66-80 - Male","Male","Died - Unknown - 66-80",0.00131,0.00435,"#d58570","Highly Underrepresented",-1.2,131,1e+05 +"115","Died - Unknown - 66-80","66-80","Died - Unknown",0.00271,0.00893,"#d58570","Highly Underrepresented",-1.2,271,1e+05 +"116","Died - Unknown - 81+ - Female","Female","Died - Unknown - 81+",0.0012,0.00327,"#d58570","Highly Underrepresented",-1,120,1e+05 +"117","Died - Unknown - 81+ - Male","Male","Died - Unknown - 81+",0.00102,0.00276,"#d58570","Highly Underrepresented",-0.996,102,1e+05 +"118","Died - Unknown - 81+","81+","Died - Unknown",0.00222,0.00602,"#d58570","Highly Underrepresented",-1,222,1e+05 +"119","Died - Unknown","Unknown","Died",0.00882,0.0244,"#d58570","Highly Underrepresented",-1.03,882,1e+05 +"120","Died - White - <=45 - Female","Female","Died - White - <=45",0.00522,0.00247,"#00205b","Highly Overrepresented",0.752,522,1e+05 +"121","Died - White - <=45 - Male","Male","Died - White - <=45",0.00522,0.00363,"#00205b","Highly Overrepresented",0.365,522,1e+05 +"122","Died - White - <=45","<=45","Died - White",0.0104,0.0061,"#00205b","Highly Overrepresented",0.542,1044,1e+05 +"123","Died - White - 46-65 - Female","Female","Died - White - 46-65",0.0111,0.0112,"#d4e6e8","Equitable(p)",-0.00596,1111,1e+05 +"124","Died - White - 46-65 - Male","Male","Died - White - 46-65",0.0152,0.0155,"#d4e6e8","Equitable(p)",-0.015,1523,1e+05 +"125","Died - White - 46-65","46-65","Died - White",0.0263,0.0266,"#d4e6e8","Equitable(p)",-0.0114,2634,1e+05 +"126","Died - White - 66-80 - Female","Female","Died - White - 66-80",0.0157,0.016,"#d4e6e8","Equitable(p)",-0.019,1567,1e+05 +"127","Died - White - 66-80 - Male","Male","Died - White - 66-80",0.0146,0.0182,"#eabcad","Underrepresented",-0.222,1464,1e+05 +"128","Died - White - 66-80","66-80","Died - White",0.0303,0.0342,"#eabcad","Underrepresented",-0.124,3031,1e+05 +"129","Died - White - 81+ - Female","Female","Died - White - 81+",0.0148,0.0229,"#d58570","Highly Underrepresented",-0.442,1481,1e+05 +"130","Died - White - 81+ - Male","Male","Died - White - 81+",0.0136,0.0176,"#d58570","Highly Underrepresented",-0.262,1357,1e+05 +"131","Died - White - 81+","81+","Died - White",0.0284,0.0404,"#d58570","Highly Underrepresented",-0.366,2838,1e+05 +"132","Died - White","White","Died",0.0955,0.107,"#eabcad","Underrepresented",-0.13,9547,1e+05 diff --git a/scripts/Equity_metrics.R b/scripts/Equity_metrics.R new file mode 100644 index 0000000..e549f34 --- /dev/null +++ b/scripts/Equity_metrics.R @@ -0,0 +1,161 @@ +#convert numbers to ratios +Rate_Calculation<-function(subgroup_n,total_n){ + if(total_n == 0){ + return(0) + } + return(subgroup_n/total_n) +} + +# Equity Metric derived from Disparate Impact +Log_Disparate_Impact<-function (alpha_di, beta_di, for_plot = FALSE){ + if (!for_plot){ + if (beta_di == 0 & alpha_di == 0){ + return (-9999999) + } + else if (beta_di == 0){ + return (-Inf) + } + else if (alpha_di == 0){ + return (-8888888) + } + + } + + left_di <- beta_di/(1-beta_di) + right_di <- alpha_di/(1-alpha_di) + result_di <- log(left_di)-log(right_di) + return (result_di) +} + +# Significance test (two sided) +compare_population_proportion_2<-function(Xb,Nb,Xa,Na,conf_val){ + if (Xa == 0 & Xb == 0){ + return (-9999999) + } + else if (Xa == 0){ + return (-Inf) + } + else if (Xb == 0){ + return (-8888888) + } + + Xa_not<- Na-Xa + Xb_not<- Nb-Xb + if (Xa>=5 & Xa_not>=5 & Xb>=5 & Xb_not>=5){ + p_value<-prop.test(x = c(Xa, Xb), n = c(Na, Nb), + alternative = c("two.sided"), + conf.level = conf_val, + correct = FALSE)$p.value + } + else{ + p_value<- -7777777 + #p_value<-fisher.test(dat.xtabs,alternative = c("two.sided"), + #conf.level = conf_val)$p.value + } + + return(p_value) +} + +# transform the significance number into text +whether_significant<-function (p_num, threshold){ + if (p_num == -Inf){ + return ("Absent") + } + else if(p_num == -9999999){ + return ("No Info") + } + else if(p_num == -8888888){ + return ("No Base Data") + } + else if (p_numsignificance_threshold){ + return("Equitable(p)") + } + + if (value == -Inf){ + return ("Absent") + } + else if(value == -9999999){ + return ("No Info") + } + else if(value == -8888888){ + return ("No Base Data") + } + else if(value == -7777777){ + return ("Insufficient Data") + } + else if (value < -threshold) + { + if (value < -neg_break){ + return ("Highly Underrepresented") + } + else{ + return ("Underrepresented") + } + } + else if(value > threshold) { + if (value > pos_break){ + return ("Highly Overrepresented") + } + else{ + return ("Overrepresented") + } + } + else{ + return("Equitable") + } + +} +# assign the colors to different equity values +add_colors<-function(value, significance_value,significance_threshold, threshold, neg_break, pos_break){ + if (significance_value>significance_threshold){ + return("#d4e6e8") + } + + if (value == -Inf){ + return ("#ab2328") + } + else if(value == -9999999){ + return ("#000000") + } + else if(value == -8888888){ + return ("#54585a") + } + else if(value == -7777777){ + return ("#000000") + } + else if (value < -threshold) + { + if (value < -neg_break){ + return ("#d58570") + } + else{ + return ("#eabcad") + } + } + else if(value > threshold) { + if (value > pos_break){ + return ("#00205b") + } + else{ + return ("#a5b0cb") + } + } + else{ + return("#d4e6e8") + } +} \ No newline at end of file diff --git a/scripts/metrics.py b/scripts/metrics.py new file mode 100644 index 0000000..1173b35 --- /dev/null +++ b/scripts/metrics.py @@ -0,0 +1,33 @@ +import numpy as np + + +def pcc(y_true, y_pred): + """ + Returns Pearson's Correlation Coefficient after + changing it to the range 0 to 1 + """ + + # Find Pearson's correlation coefficient + pearson_value = (np.cov(y_true, y_pred, bias=True)[0,1]) / (np.std(y_true) * np.std(y_pred)) + + # Convert to 0 to 1 + pearson_value = (pearson_value + 1)/2 + + # Return + return pearson_value + + +def ds(y_true, y_pred): + """ + Returns Directional Symmetry + """ + + # Find Directional symmetry + n = len(y_true) + d_k = 0 + for i in range(1,n): + d_k += int(((y_true[i] - y_true[i-1])*(y_pred[i] - y_pred[i-1])) >= 0) + res = (100.0*d_k)/(n-1) + + # Return + return res \ No newline at end of file diff --git a/scripts/sunburst_process.R b/scripts/sunburst_process.R new file mode 100644 index 0000000..dc7aa27 --- /dev/null +++ b/scripts/sunburst_process.R @@ -0,0 +1,137 @@ +generate_sunburst_df<-function(background_df,variables_list,user_data_analysis,sig_t,tol_1, tol_2,equity_metric_selected, whether_NMI){ + + num_variables_df<-length(variables_list) + background_info_df<- background_df %>% + group_by(.dots = variables_list[1:num_variables_df]) %>% + summarise(background_n = sum(background_n)) + background_info_df<-na.omit(background_info_df) + total_population_background<- sum(background_info_df$background_n) + background_info_df$total_background<-rep(total_population_background, nrow(background_info_df)) + + user_info_df<- user_data_analysis %>% + group_by(.dots = variables_list[1:num_variables_df]) %>% + summarise(user_n = sum(user_n)) + user_info_df<-na.omit(user_info_df) + total_population_user<- sum(user_info_df$user_n) + user_info_df$total_user<-rep(total_population_user, nrow(user_info_df)) + + participant_rate<-total_population_user/total_population_background + + index_max<-num_variables_df-1 + + if (index_max>0){ + + for (var_index in index_max:1){ + background_var<-background_df %>% + group_by(.dots = variables_list[1:var_index]) %>% + summarise(background_n = sum(background_n)) + background_var<-na.omit(background_var) + + user_info_df_var<-user_data_analysis%>% + group_by(.dots = variables_list[1:var_index])%>% + summarise(user_n = sum(user_n)) + user_info_df_var<-na.omit(user_info_df_var) + + total_population_user_var<-sum(as.integer(user_info_df_var$user_n)) + total_population_background_var<-sum(as.integer(background_var$background_n)) + + background_var$total_background<-rep(total_population_background_var, nrow(background_var)) + user_info_df_var$total_user<-rep(total_population_user_var, nrow(user_info_df_var)) + + background_info_df<-plyr::rbind.fill(background_info_df, background_var) + user_info_df<-plyr::rbind.fill(user_info_df, user_info_df_var) + } + + } + + + #combine user input data with the background info + merged_df<-merge(background_info_df, user_info_df, by=1:(ncol(background_info_df)-2), all=TRUE) + merged_df$user_n<-merged_df$user_n %>% replace_na(0) + merged_df$background_n<-merged_df$background_n %>% replace_na(0) + + merged_df$total_user<-merged_df$total_user %>% replace_na(0) + merged_df$total_background<-merged_df$total_background %>% replace_na(0) + + #calculate the observed & background rates + merged_df$Observed_Rate<- mapply(Rate_Calculation,as.integer(merged_df$user_n),as.integer(merged_df$total_user)) + merged_df$Background_Rate<- mapply(Rate_Calculation,as.integer(merged_df$background_n),as.integer(merged_df$total_background)) + + merged_df$pValue<- mapply(compare_population_proportion_2,as.integer(merged_df$background_n),as.integer(merged_df$total_background),as.integer(merged_df$user_n),as.integer(merged_df$total_user),rep(1-sig_t,nrow(merged_df))) + merged_df$BH_p<- p.adjust(merged_df$pValue,method = "BH") + + if (whether_NMI){ + merged_df$EquityValue<- mapply(equity_metric_selected,as.numeric(merged_df$Background_Rate),as.numeric(merged_df$Observed_Rate),as.numeric(participant_rate), for_plot = FALSE) + merged_df$EquityLable<-mapply(whether_biased_label_NMI, as.numeric(merged_df$EquityValue),as.numeric(merged_df$BH_p),sig_t,tol_1,tol_2) + merged_df$EquityColors<-mapply(add_colors_NMI, as.numeric(merged_df$EquityValue),as.numeric(merged_df$BH_p),sig_t,tol_1,tol_2) + } + else{ + merged_df$EquityValue<- mapply(equity_metric_selected,as.numeric(merged_df$Background_Rate),as.numeric(merged_df$Observed_Rate), for_plot = FALSE) + merged_df$EquityLable<-mapply(whether_biased_label, as.numeric(merged_df$EquityValue),as.numeric(merged_df$BH_p),sig_t,tol_1,tol_2,tol_2) + merged_df$EquityColors<-mapply(add_colors, as.numeric(merged_df$EquityValue),as.numeric(merged_df$BH_p),sig_t,tol_1,tol_2,tol_2) + } + merged_df$na_count <- apply(merged_df[,1:num_variables_df,drop=F], 1, function(x) sum(is.na(x))) + + num_groups<-nrow(merged_df) + + new_df<- data.frame(ids = character(num_groups), + labels = character(num_groups), + parents = character(num_groups), + Observed_Rate = merged_df$Observed_Rate, + Ideal_Rate = merged_df$Background_Rate, + EquityColors=merged_df$EquityColors, + EquityLable=merged_df$EquityLable, + EquityValue=merged_df$EquityValue, + Observed_Number=merged_df$user_n, + Trial_Number = merged_df$total_user, + stringsAsFactors=FALSE) + + for (group_index in 1:num_groups){ + level<-num_variables_df-merged_df[group_index,'na_count'] + if (level>1){ + row_list <- unlist(merged_df[group_index,1:level]) + id_name<- paste(row_list,collapse=" - ") + label_name<- as.character(row_list[level]) + parent_name<-paste(row_list[1:(level-1)],collapse=" - ") + } + else{ + id_name<- as.character(merged_df[group_index,1]) + label_name<- id_name + parent_name<-"" + } + + new_df[group_index,'ids']<-id_name + new_df[group_index,'labels']<-label_name + new_df[group_index,'parents']<-parent_name + + } + + new_df$EquityValue<- mapply(signif, new_df$EquityValue,digits = 3) + new_df$Observed_Rate<- mapply(signif, new_df$Observed_Rate,digits = 3) + new_df$Ideal_Rate<- mapply(signif, new_df$Ideal_Rate,digits = 3) + + return(new_df) +} + +generate_sunburst_plotly3<-function(new_df){ + plot_ly(data= new_df)%>% add_trace( + type='sunburst', + ids=new_df$ids, + labels=new_df$labels, + parents=new_df$parents, + leaf = list(opacity = 1), + marker = list(colors = new_df$EquityColors), + #textinfo = "current path+label", + maxdepth =-1, + insidetextorientation='radial', + #hoverinfo = "current path+label+text", + hovertext = ~paste(new_df$EquityLable,'
','Ideal Rate:', formattable(new_df$Ideal_Rate, digits = 3, format = "f"),'
','Observed Rate:', formattable(new_df$Observed_Rate, digits = 3, format = "f"),'
','No. of Participants:', new_df$Observed_Number), + insidetextfont = 2) + +} + +test_sunburst2<-function(given_background,varList,given_rct,write_filename, sig_t, lower_t, upper_t){ + df_processed<-generate_sunburst_df(given_background,as.list(varList),given_rct,sig_t,lower_t,upper_t,Log_Disparate_Impact, FALSE) + write.csv(x= df_processed, file= write_filename) + generate_sunburst_plotly3(df_processed) +} \ No newline at end of file diff --git a/scripts/table_process.R b/scripts/table_process.R new file mode 100644 index 0000000..0a91d4d --- /dev/null +++ b/scripts/table_process.R @@ -0,0 +1,184 @@ +colorpicker <- function(z,cut1 = log(0.8),cut2=log(0.9),cut3=-log(0.9),cut4=-log(0.8)){ + if(is.na(z)){return("white")} + else if(z>cut4){return("white")} + else if(z == -Inf){return("white")} + else {return("black")} +} + +bgpicker <- function(z,cut1 = log(0.8),cut2=log(0.9),cut3=-log(0.9),cut4=-log(0.8)){ + if(is.na(z)){return("black")} + else if(z == -Inf){return("#ab2328")} + else if(z <= cut1){return("#d58570")} + else if( z > cut1 & z <= cut2){return("#eabcad")} + else if( z > cut2 & z <= cut3){return("#d4e6e8")} + else if( z > cut3 & z <= cut4){return("#a5b0cb")} + else if (z>cut4){return("#00205b")} +} + + + + +make_table_combine<-function(background_info,RCT_info,x, sig_t, cutoff1,cutoff2, selected_metric) { + user_colnames<-colnames(RCT_info) + + nonlab_factors<- user_colnames[!user_colnames%in% c("user_n")] + num_nonlab<- length(nonlab_factors) + + background_info_df<-background_info %>% + group_by(.dots = nonlab_factors[1]) %>% + summarise(background_n = sum(background_n)) + names(background_info_df)[1] <- "Group_Name" + background_info_df<-na.omit(background_info_df) + total_population_background<-sum(as.integer(background_info_df$background_n)) + background_info_df$total_background<-rep(total_population_background, nrow(background_info_df)) + + user_info_df<-RCT_info%>% + group_by(.dots = nonlab_factors[1]) %>% + summarise(user_n = sum(user_n)) + names(user_info_df)[1] <- "Group_Name" + user_info_df<-na.omit(user_info_df) + total_population_user<-sum(as.integer(user_info_df$user_n)) + user_info_df$total_user<-rep(total_population_user, nrow(user_info_df)) + + for (i in 2:num_nonlab){ + background_info_df_var<-background_info %>% + group_by(.dots = nonlab_factors[i]) %>% + summarise(background_n = sum(background_n)) + names(background_info_df_var)[1] <- "Group_Name" + background_info_df_var<-na.omit(background_info_df_var) + total_population_background_var<-sum(as.integer(background_info_df_var$background_n)) + background_info_df_var$total_background<-rep(total_population_background_var, nrow(background_info_df_var)) + + user_info_df_var<-RCT_info%>% + group_by(.dots = nonlab_factors[i]) %>% + summarise(user_n = sum(user_n)) + names(user_info_df_var)[1] <- "Group_Name" + user_info_df_var<-na.omit(user_info_df_var) + total_population_user_var<-sum(as.integer(user_info_df_var$user_n)) + user_info_df_var$total_user<-rep(total_population_user, nrow(user_info_df_var)) + background_info_df<-plyr::rbind.fill(background_info_df, background_info_df_var) + user_info_df<-plyr::rbind.fill(user_info_df, user_info_df_var) + } + + + merged_df<-merge(background_info_df, user_info_df, by="Group_Name", all=TRUE) + + + merged_df$user_n<-merged_df$user_n %>% replace_na(0) + merged_df$background_n<-merged_df$background_n %>% replace_na(0) + + merged_df$total_user<-merged_df$total_user %>% replace_na(0) + merged_df$total_background<-merged_df$total_background %>% replace_na(0) + + + merged_df$participant_rate<- mapply(Rate_Calculation,as.integer(merged_df$total_user),as.integer(merged_df$total_background)) + + #calculate the observed & background rates + merged_df$Observed_Rate<- mapply(Rate_Calculation,as.integer(merged_df$user_n),as.integer(merged_df$total_user)) + merged_df$Background_Rate<- mapply(Rate_Calculation,as.integer(merged_df$background_n),as.integer(merged_df$total_background)) + + merged_df$pValue<- mapply(compare_population_proportion_2,as.integer(merged_df$background_n),as.integer(merged_df$total_background),as.integer(merged_df$user_n),as.integer(merged_df$total_user),rep(1-sig_t,nrow(merged_df))) + merged_df$BH_p<- mapply(p.adjust,merged_df$pValue,method = "BH") + merged_df$whether_significant<- mapply(whether_significant,as.numeric(merged_df$BH_p), sig_t) + + if (selected_metric == "LDI"){ + merged_df$EquityValue<- mapply(Log_Disparate_Impact,as.numeric(merged_df$Background_Rate),as.numeric(merged_df$Observed_Rate), for_plot = FALSE) + merged_df$EquityLable<-mapply(whether_biased_label, as.numeric(merged_df$EquityValue),as.numeric(merged_df$BH_p),sig_t,cutoff1,cutoff2,cutoff2) + } + + merged_df<-merged_df %>%mutate(Group_Name = factor(Group_Name, levels = x)) %>%arrange(Group_Name) + + + new_df_univariable<- data.frame(Group_Name = merged_df$Group_Name, + BH_p = merged_df$BH_p, + Significant_Level = merged_df$whether_significant, + Equity_Value= merged_df$EquityValue, + Equity_Level= merged_df$EquityLable, + stringsAsFactors=FALSE) + + new_df_univariable<-new_df_univariable%>% mutate_if(is.numeric, round, digits=5) + + return(new_df_univariable) + +} + +preprocess_comparison_df<-function(sig_t, cut1,cut2, selected_metrics, file_type){ + ATUS_attributes<-c("Female", "Male","15-24", "25-34", "35-44", "45-54", "55-64", "65-74", "75+") + MIMIC_attributes<-c("Female", "Male","<=45", "46-65", "66-80","81+","White","Black","Unknown","Asian","Other","Alive","Died") + MIMIC_attributes2<-c("Female", "Male","\u2264 45", "46-65", "66-80","81+","White","Black","Unknown","Asian","Other","Alive","Died") + + t1<-cut1 + t2<-cut2 + + + if (file_type == "ATUS"){ + df_comparison_studies<-make_table_combine(ATUSreference_processed, ATUSsynthetic_processed, ATUS_attributes,sig_t,t1,t2,selected_metrics) + colnames(df_comparison_studies)[2:5] <- paste(colnames(df_comparison_studies)[2:5],"(1)", sep = "") + } + else if (file_type == "MIMIC"){ + df_comparison_studies<-make_table_combine(MIMICRacereference_processed, MIMICRacesynthetic_processed,MIMIC_attributes,sig_t,t1,t2,selected_metrics) + colnames(df_comparison_studies)[2:5] <- paste(colnames(df_comparison_studies)[2:5],"(1)", sep = "") + } + + if (file_type == "ATUS"){ + df_comparison_studies_new<-df_comparison_studies %>%mutate(Group_Name = factor(Group_Name, levels = ATUS_attributes)) %>%arrange(Group_Name) + df_comparison_studies_new$Group_Name<-ATUS_attributes + } + else if (file_type == "MIMIC"){ + df_comparison_studies_new<-df_comparison_studies %>%mutate(Group_Name = factor(Group_Name, levels = MIMIC_attributes)) %>%arrange(Group_Name) + df_comparison_studies_new$Group_Name<-MIMIC_attributes2 + } + df_comparison_studies_new<-df_comparison_studies_new[c(1,seq(4,ncol(df_comparison_studies_new),by=4))] + return(df_comparison_studies_new) +} + + +generate_table <- function(sig_t, lower_t, upper_t, metric_name,file_name){ + df_demo_comparison<-preprocess_comparison_df(sig_t,lower_t, upper_t, metric_name,file_name) + colnames(df_demo_comparison)<-c("Characteristics","Equity") + + rownames(df_demo_comparison) <- NULL + df_demo_comparison[,2:ncol(df_demo_comparison)] <- sapply(df_demo_comparison[,2:ncol(df_demo_comparison)],as.numeric) + + if (file_name == "ATUS"){ + demo_result<-format_table (df_demo_comparison, + align =c("l","c","c","c"), + lapply(2:ncol(df_demo_comparison), function(col) { + area(row=1:nrow(df_demo_comparison), col) ~ formatter("span", + style = x ~ style(display = "block", + "border-radius" = "4px", + "padding-right" = "4px", + color = sapply(x,colorpicker), + "background-color" = sapply(x,bgpicker)), + x ~ sprintf("%.3f", x)) + } + + ))%>% + kable_styling("striped", full_width = TRUE,fixed_thead = TRUE) %>% + pack_rows("Gender", 1,2) %>% + pack_rows("Age group (years)", 3,9) + } + else if (file_name == "MIMIC"){ + demo_result<-format_table (df_demo_comparison, + align =c("l","c","c","c"), + lapply(2:ncol(df_demo_comparison), function(col) { + area(row=1:nrow(df_demo_comparison), col) ~ formatter("span", + style = x ~ style(display = "block", + "border-radius" = "4px", + "padding-right" = "4px", + color = sapply(x,colorpicker), + "background-color" = sapply(x,bgpicker)), + x ~ sprintf("%.3f", x)) + } + + ))%>% + kable_styling("striped", full_width = TRUE,fixed_thead = TRUE) %>% + pack_rows("Gender", 1,2) %>% + pack_rows("Age group (years)",3,6)%>% + pack_rows("Race/Ethnicity",7,11) %>% + pack_rows("Mortality", 12,13) + } + + gt::html(demo_result) + +}