{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%load_ext autoreload\n",
"%autoreload 2"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"15:56:22 [I] klustakwik KlustaKwik2 version 0.2.6\n",
"/home/mikkel/.virtualenvs/expipe/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject\n",
" return f(*args, **kwds)\n",
"/home/mikkel/.virtualenvs/expipe/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject\n",
" return f(*args, **kwds)\n"
]
}
],
"source": [
"import os\n",
"import pathlib\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import re\n",
"import shutil\n",
"import pandas as pd\n",
"import scipy.stats\n",
"\n",
"import exdir\n",
"import expipe\n",
"from distutils.dir_util import copy_tree\n",
"import septum_mec\n",
"import spatial_maps as sp\n",
"import head_direction.head as head\n",
"import septum_mec.analysis.data_processing as dp\n",
"import septum_mec.analysis.registration\n",
"from septum_mec.analysis.plotting import violinplot\n",
"\n",
"from spike_statistics.core import permutation_resampling"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"project_path = dp.project_path()\n",
"project = expipe.get_project(project_path)\n",
"actions = project.actions\n",
"\n",
"output_path = pathlib.Path(\"output\") / \"comparisons-gridcells\"\n",
"(output_path / \"statistics\").mkdir(exist_ok=True, parents=True)\n",
"(output_path / \"figures\").mkdir(exist_ok=True, parents=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Load cell statistics and shuffling quantiles"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" action | \n",
" baseline | \n",
" entity | \n",
" frequency | \n",
" i | \n",
" ii | \n",
" session | \n",
" stim_location | \n",
" stimulated | \n",
" tag | \n",
" ... | \n",
" burst_event_ratio | \n",
" bursty_spike_ratio | \n",
" gridness | \n",
" border_score | \n",
" information_rate | \n",
" information_specificity | \n",
" head_mean_ang | \n",
" head_mean_vec_len | \n",
" spacing | \n",
" orientation | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1849-060319-3 | \n",
" True | \n",
" 1849 | \n",
" NaN | \n",
" False | \n",
" True | \n",
" 3 | \n",
" NaN | \n",
" False | \n",
" baseline ii | \n",
" ... | \n",
" 0.397921 | \n",
" 0.676486 | \n",
" -0.459487 | \n",
" 0.078474 | \n",
" 0.965845 | \n",
" 0.309723 | \n",
" 5.788704 | \n",
" 0.043321 | \n",
" 0.624971 | \n",
" 22.067900 | \n",
"
\n",
" \n",
" 1 | \n",
" 1849-060319-3 | \n",
" True | \n",
" 1849 | \n",
" NaN | \n",
" False | \n",
" True | \n",
" 3 | \n",
" NaN | \n",
" False | \n",
" baseline ii | \n",
" ... | \n",
" 0.146481 | \n",
" 0.277121 | \n",
" -0.615405 | \n",
" 0.311180 | \n",
" 0.191375 | \n",
" 0.032266 | \n",
" 1.821598 | \n",
" 0.014624 | \n",
" 0.753333 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" 2 | \n",
" 1849-060319-3 | \n",
" True | \n",
" 1849 | \n",
" NaN | \n",
" False | \n",
" True | \n",
" 3 | \n",
" NaN | \n",
" False | \n",
" baseline ii | \n",
" ... | \n",
" 0.373466 | \n",
" 0.658748 | \n",
" -0.527711 | \n",
" 0.131660 | \n",
" 3.833587 | \n",
" 0.336590 | \n",
" 4.407614 | \n",
" 0.121115 | \n",
" 0.542877 | \n",
" 27.758541 | \n",
"
\n",
" \n",
" 3 | \n",
" 1849-060319-3 | \n",
" True | \n",
" 1849 | \n",
" NaN | \n",
" False | \n",
" True | \n",
" 3 | \n",
" NaN | \n",
" False | \n",
" baseline ii | \n",
" ... | \n",
" 0.097464 | \n",
" 0.196189 | \n",
" -0.641543 | \n",
" 0.274989 | \n",
" 0.153740 | \n",
" 0.068626 | \n",
" 6.128601 | \n",
" 0.099223 | \n",
" 0.484916 | \n",
" 11.309932 | \n",
"
\n",
" \n",
" 4 | \n",
" 1849-060319-3 | \n",
" True | \n",
" 1849 | \n",
" NaN | \n",
" False | \n",
" True | \n",
" 3 | \n",
" NaN | \n",
" False | \n",
" baseline ii | \n",
" ... | \n",
" 0.248036 | \n",
" 0.461250 | \n",
" -0.085292 | \n",
" 0.198676 | \n",
" 0.526720 | \n",
" 0.033667 | \n",
" 1.602362 | \n",
" 0.051825 | \n",
" 0.646571 | \n",
" 0.000000 | \n",
"
\n",
" \n",
"
\n",
"
5 rows × 34 columns
\n",
"
"
],
"text/plain": [
" action baseline entity frequency i ii session \\\n",
"0 1849-060319-3 True 1849 NaN False True 3 \n",
"1 1849-060319-3 True 1849 NaN False True 3 \n",
"2 1849-060319-3 True 1849 NaN False True 3 \n",
"3 1849-060319-3 True 1849 NaN False True 3 \n",
"4 1849-060319-3 True 1849 NaN False True 3 \n",
"\n",
" stim_location stimulated tag ... burst_event_ratio \\\n",
"0 NaN False baseline ii ... 0.397921 \n",
"1 NaN False baseline ii ... 0.146481 \n",
"2 NaN False baseline ii ... 0.373466 \n",
"3 NaN False baseline ii ... 0.097464 \n",
"4 NaN False baseline ii ... 0.248036 \n",
"\n",
" bursty_spike_ratio gridness border_score information_rate \\\n",
"0 0.676486 -0.459487 0.078474 0.965845 \n",
"1 0.277121 -0.615405 0.311180 0.191375 \n",
"2 0.658748 -0.527711 0.131660 3.833587 \n",
"3 0.196189 -0.641543 0.274989 0.153740 \n",
"4 0.461250 -0.085292 0.198676 0.526720 \n",
"\n",
" information_specificity head_mean_ang head_mean_vec_len spacing \\\n",
"0 0.309723 5.788704 0.043321 0.624971 \n",
"1 0.032266 1.821598 0.014624 0.753333 \n",
"2 0.336590 4.407614 0.121115 0.542877 \n",
"3 0.068626 6.128601 0.099223 0.484916 \n",
"4 0.033667 1.602362 0.051825 0.646571 \n",
"\n",
" orientation \n",
"0 22.067900 \n",
"1 0.000000 \n",
"2 27.758541 \n",
"3 11.309932 \n",
"4 0.000000 \n",
"\n",
"[5 rows x 34 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"statistics_action = actions['calculate-statistics']\n",
"identification_action = actions['identify-neurons']\n",
"sessions = pd.read_csv(identification_action.data_path('sessions'))\n",
"units = pd.read_csv(identification_action.data_path('units'))\n",
"session_units = pd.merge(sessions, units, on='action')\n",
"statistics_results = pd.read_csv(statistics_action.data_path('results'))\n",
"statistics = pd.merge(session_units, statistics_results, how='left')\n",
"statistics.head()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" border_score | \n",
" gridness | \n",
" head_mean_ang | \n",
" head_mean_vec_len | \n",
" information_rate | \n",
" speed_score | \n",
" action | \n",
" channel_group | \n",
" unit_name | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 0.348023 | \n",
" 0.275109 | \n",
" 3.012689 | \n",
" 0.086792 | \n",
" 0.707197 | \n",
" 0.149071 | \n",
" 1833-010719-1 | \n",
" 0.0 | \n",
" 127.0 | \n",
"
\n",
" \n",
" 1 | \n",
" 0.362380 | \n",
" 0.166475 | \n",
" 3.133138 | \n",
" 0.037271 | \n",
" 0.482486 | \n",
" 0.132212 | \n",
" 1833-010719-1 | \n",
" 0.0 | \n",
" 161.0 | \n",
"
\n",
" \n",
" 2 | \n",
" 0.367498 | \n",
" 0.266865 | \n",
" 5.586395 | \n",
" 0.182843 | \n",
" 0.271188 | \n",
" 0.062821 | \n",
" 1833-010719-1 | \n",
" 0.0 | \n",
" 191.0 | \n",
"
\n",
" \n",
" 3 | \n",
" 0.331942 | \n",
" 0.312155 | \n",
" 5.955767 | \n",
" 0.090786 | \n",
" 0.354018 | \n",
" 0.052009 | \n",
" 1833-010719-1 | \n",
" 0.0 | \n",
" 223.0 | \n",
"
\n",
" \n",
" 4 | \n",
" 0.325842 | \n",
" 0.180495 | \n",
" 5.262721 | \n",
" 0.103584 | \n",
" 0.210427 | \n",
" 0.094041 | \n",
" 1833-010719-1 | \n",
" 0.0 | \n",
" 225.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" border_score gridness head_mean_ang head_mean_vec_len information_rate \\\n",
"0 0.348023 0.275109 3.012689 0.086792 0.707197 \n",
"1 0.362380 0.166475 3.133138 0.037271 0.482486 \n",
"2 0.367498 0.266865 5.586395 0.182843 0.271188 \n",
"3 0.331942 0.312155 5.955767 0.090786 0.354018 \n",
"4 0.325842 0.180495 5.262721 0.103584 0.210427 \n",
"\n",
" speed_score action channel_group unit_name \n",
"0 0.149071 1833-010719-1 0.0 127.0 \n",
"1 0.132212 1833-010719-1 0.0 161.0 \n",
"2 0.062821 1833-010719-1 0.0 191.0 \n",
"3 0.052009 1833-010719-1 0.0 223.0 \n",
"4 0.094041 1833-010719-1 0.0 225.0 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"shuffling = actions['shuffling']\n",
"quantiles_95 = pd.read_csv(shuffling.data_path('quantiles_95'))\n",
"quantiles_95.head()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" action | \n",
" baseline | \n",
" entity | \n",
" frequency | \n",
" i | \n",
" ii | \n",
" session | \n",
" stim_location | \n",
" stimulated | \n",
" tag | \n",
" ... | \n",
" head_mean_vec_len | \n",
" spacing | \n",
" orientation | \n",
" border_score_threshold | \n",
" gridness_threshold | \n",
" head_mean_ang_threshold | \n",
" head_mean_vec_len_threshold | \n",
" information_rate_threshold | \n",
" speed_score_threshold | \n",
" specificity | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1849-060319-3 | \n",
" True | \n",
" 1849 | \n",
" NaN | \n",
" False | \n",
" True | \n",
" 3 | \n",
" NaN | \n",
" False | \n",
" baseline ii | \n",
" ... | \n",
" 0.043321 | \n",
" 0.624971 | \n",
" 22.067900 | \n",
" 0.332548 | \n",
" 0.229073 | \n",
" 6.029431 | \n",
" 0.205362 | \n",
" 1.115825 | \n",
" 0.066736 | \n",
" 0.445206 | \n",
"
\n",
" \n",
" 1 | \n",
" 1849-060319-3 | \n",
" True | \n",
" 1849 | \n",
" NaN | \n",
" False | \n",
" True | \n",
" 3 | \n",
" NaN | \n",
" False | \n",
" baseline ii | \n",
" ... | \n",
" 0.014624 | \n",
" 0.753333 | \n",
" 0.000000 | \n",
" 0.354830 | \n",
" 0.089333 | \n",
" 6.120055 | \n",
" 0.073566 | \n",
" 0.223237 | \n",
" 0.052594 | \n",
" 0.097485 | \n",
"
\n",
" \n",
" 2 | \n",
" 1849-060319-3 | \n",
" True | \n",
" 1849 | \n",
" NaN | \n",
" False | \n",
" True | \n",
" 3 | \n",
" NaN | \n",
" False | \n",
" baseline ii | \n",
" ... | \n",
" 0.121115 | \n",
" 0.542877 | \n",
" 27.758541 | \n",
" 0.264610 | \n",
" -0.121081 | \n",
" 5.759406 | \n",
" 0.150827 | \n",
" 4.964984 | \n",
" 0.027120 | \n",
" 0.393687 | \n",
"
\n",
" \n",
" 3 | \n",
" 1849-060319-3 | \n",
" True | \n",
" 1849 | \n",
" NaN | \n",
" False | \n",
" True | \n",
" 3 | \n",
" NaN | \n",
" False | \n",
" baseline ii | \n",
" ... | \n",
" 0.099223 | \n",
" 0.484916 | \n",
" 11.309932 | \n",
" 0.344280 | \n",
" 0.215829 | \n",
" 6.033364 | \n",
" 0.110495 | \n",
" 0.239996 | \n",
" 0.054074 | \n",
" 0.262612 | \n",
"
\n",
" \n",
" 4 | \n",
" 1849-060319-3 | \n",
" True | \n",
" 1849 | \n",
" NaN | \n",
" False | \n",
" True | \n",
" 3 | \n",
" NaN | \n",
" False | \n",
" baseline ii | \n",
" ... | \n",
" 0.051825 | \n",
" 0.646571 | \n",
" 0.000000 | \n",
" 0.342799 | \n",
" 0.218967 | \n",
" 5.768170 | \n",
" 0.054762 | \n",
" 0.524990 | \n",
" 0.144702 | \n",
" 0.133677 | \n",
"
\n",
" \n",
"
\n",
"
5 rows × 41 columns
\n",
"
"
],
"text/plain": [
" action baseline entity frequency i ii session \\\n",
"0 1849-060319-3 True 1849 NaN False True 3 \n",
"1 1849-060319-3 True 1849 NaN False True 3 \n",
"2 1849-060319-3 True 1849 NaN False True 3 \n",
"3 1849-060319-3 True 1849 NaN False True 3 \n",
"4 1849-060319-3 True 1849 NaN False True 3 \n",
"\n",
" stim_location stimulated tag ... head_mean_vec_len spacing \\\n",
"0 NaN False baseline ii ... 0.043321 0.624971 \n",
"1 NaN False baseline ii ... 0.014624 0.753333 \n",
"2 NaN False baseline ii ... 0.121115 0.542877 \n",
"3 NaN False baseline ii ... 0.099223 0.484916 \n",
"4 NaN False baseline ii ... 0.051825 0.646571 \n",
"\n",
" orientation border_score_threshold gridness_threshold \\\n",
"0 22.067900 0.332548 0.229073 \n",
"1 0.000000 0.354830 0.089333 \n",
"2 27.758541 0.264610 -0.121081 \n",
"3 11.309932 0.344280 0.215829 \n",
"4 0.000000 0.342799 0.218967 \n",
"\n",
" head_mean_ang_threshold head_mean_vec_len_threshold \\\n",
"0 6.029431 0.205362 \n",
"1 6.120055 0.073566 \n",
"2 5.759406 0.150827 \n",
"3 6.033364 0.110495 \n",
"4 5.768170 0.054762 \n",
"\n",
" information_rate_threshold speed_score_threshold specificity \n",
"0 1.115825 0.066736 0.445206 \n",
"1 0.223237 0.052594 0.097485 \n",
"2 4.964984 0.027120 0.393687 \n",
"3 0.239996 0.054074 0.262612 \n",
"4 0.524990 0.144702 0.133677 \n",
"\n",
"[5 rows x 41 columns]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"action_columns = ['action', 'channel_group', 'unit_name']\n",
"data = pd.merge(statistics, quantiles_95, on=action_columns, suffixes=(\"\", \"_threshold\"))\n",
"\n",
"data['specificity'] = np.log10(data['in_field_mean_rate'] / data['out_field_mean_rate'])\n",
"\n",
"data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Statistics about all cell-sessions"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"stimulated\n",
"False 624\n",
"True 674\n",
"Name: action, dtype: int64"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.groupby('stimulated').count()['action']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Find all cells with gridness above threshold"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of gridcells 226\n",
"Number of animals 4\n"
]
}
],
"source": [
"query = 'gridness > gridness_threshold and information_rate > information_rate_threshold'\n",
"sessions_above_threshold = data.query(query)\n",
"print(\"Number of gridcells\", len(sessions_above_threshold))\n",
"print(\"Number of animals\", len(sessions_above_threshold.groupby(['entity'])))"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"baseline = sessions_above_threshold.query('baseline')"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"gridcell_in_baseline = data[data.unit_id.isin(baseline.unit_id)]"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of gridcells in baseline i sessions 78\n",
"Number of gridcells in stimulated 11Hz ms sessions 35\n",
"Number of gridcells in baseline ii sessions 66\n",
"Number of gridcells in stimulated 30Hz ms sessions 33\n"
]
}
],
"source": [
"baseline_i = gridcell_in_baseline.query('baseline and i')\n",
"stimulated_11 = gridcell_in_baseline.query('frequency==11 and stim_location==\"ms\" and i')\n",
"\n",
"baseline_ii = gridcell_in_baseline.query('baseline and ii')\n",
"stimulated_30 = gridcell_in_baseline.query('frequency==30 and stim_location==\"ms\" and ii')\n",
"\n",
"print(\"Number of gridcells in baseline i sessions\", len(baseline_i))\n",
"print(\"Number of gridcells in stimulated 11Hz ms sessions\", len(stimulated_11))\n",
"\n",
"print(\"Number of gridcells in baseline ii sessions\", len(baseline_ii))\n",
"print(\"Number of gridcells in stimulated 30Hz ms sessions\", len(stimulated_30))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# slice unique units"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"baseline_i = baseline_i.drop_duplicates('unit_id')\n",
"stimulated_11 = stimulated_11.drop_duplicates('unit_id')\n",
"baseline_ii = baseline_ii.drop_duplicates('unit_id')\n",
"stimulated_30 = stimulated_30.drop_duplicates('unit_id')"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of gridcells in baseline i sessions 68\n",
"Number of gridcells in stimulated 11Hz ms sessions 32\n",
"Number of gridcells in baseline ii sessions 58\n",
"Number of gridcells in stimulated 30Hz ms sessions 28\n"
]
}
],
"source": [
"print(\"Number of gridcells in baseline i sessions\", len(baseline_i))\n",
"print(\"Number of gridcells in stimulated 11Hz ms sessions\", len(stimulated_11))\n",
"\n",
"print(\"Number of gridcells in baseline ii sessions\", len(baseline_ii))\n",
"print(\"Number of gridcells in stimulated 30Hz ms sessions\", len(stimulated_30))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Calculate statistics"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"columns = [\n",
" 'average_rate', 'gridness', 'sparsity', 'selectivity', 'information_specificity',\n",
" 'max_rate', 'information_rate', 'interspike_interval_cv', \n",
" 'in_field_mean_rate', 'out_field_mean_rate', \n",
" 'burst_event_ratio', 'specificity', 'speed_score'\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" average_rate | \n",
" gridness | \n",
" sparsity | \n",
" selectivity | \n",
" information_specificity | \n",
" max_rate | \n",
" information_rate | \n",
" interspike_interval_cv | \n",
" in_field_mean_rate | \n",
" out_field_mean_rate | \n",
" burst_event_ratio | \n",
" specificity | \n",
" speed_score | \n",
"
\n",
" \n",
" stimulated | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" False | \n",
" 9.928801 | \n",
" 0.562122 | \n",
" 0.656634 | \n",
" 5.320886 | \n",
" 0.200475 | \n",
" 37.440262 | \n",
" 1.178277 | \n",
" 2.348004 | \n",
" 15.711336 | \n",
" 7.319828 | \n",
" 0.219627 | \n",
" 0.444021 | \n",
" 0.136236 | \n",
"
\n",
" \n",
" True | \n",
" 9.554733 | \n",
" 0.365628 | \n",
" 0.666120 | \n",
" 6.232196 | \n",
" 0.194542 | \n",
" 39.864795 | \n",
" 1.063930 | \n",
" 2.328150 | \n",
" 14.582445 | \n",
" 7.121023 | \n",
" 0.205369 | \n",
" 0.445532 | \n",
" 0.102438 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" average_rate gridness sparsity selectivity \\\n",
"stimulated \n",
"False 9.928801 0.562122 0.656634 5.320886 \n",
"True 9.554733 0.365628 0.666120 6.232196 \n",
"\n",
" information_specificity max_rate information_rate \\\n",
"stimulated \n",
"False 0.200475 37.440262 1.178277 \n",
"True 0.194542 39.864795 1.063930 \n",
"\n",
" interspike_interval_cv in_field_mean_rate out_field_mean_rate \\\n",
"stimulated \n",
"False 2.348004 15.711336 7.319828 \n",
"True 2.328150 14.582445 7.121023 \n",
"\n",
" burst_event_ratio specificity speed_score \n",
"stimulated \n",
"False 0.219627 0.444021 0.136236 \n",
"True 0.205369 0.445532 0.102438 "
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gridcell_in_baseline.groupby('stimulated')[columns].mean()"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" average_rate | \n",
" gridness | \n",
" sparsity | \n",
" selectivity | \n",
" information_specificity | \n",
" max_rate | \n",
" information_rate | \n",
" interspike_interval_cv | \n",
" in_field_mean_rate | \n",
" out_field_mean_rate | \n",
" burst_event_ratio | \n",
" specificity | \n",
" speed_score | \n",
"
\n",
" \n",
" \n",
" \n",
" count | \n",
" 144.000000 | \n",
" 144.000000 | \n",
" 144.000000 | \n",
" 144.000000 | \n",
" 144.000000 | \n",
" 144.000000 | \n",
" 144.000000 | \n",
" 144.000000 | \n",
" 144.000000 | \n",
" 144.000000 | \n",
" 144.000000 | \n",
" 144.000000 | \n",
" 144.000000 | \n",
"
\n",
" \n",
" mean | \n",
" 9.928801 | \n",
" 0.562122 | \n",
" 0.656634 | \n",
" 5.320886 | \n",
" 0.200475 | \n",
" 37.440262 | \n",
" 1.178277 | \n",
" 2.348004 | \n",
" 15.711336 | \n",
" 7.319828 | \n",
" 0.219627 | \n",
" 0.444021 | \n",
" 0.136236 | \n",
"
\n",
" \n",
" std | \n",
" 7.727249 | \n",
" 0.338826 | \n",
" 0.186070 | \n",
" 2.885443 | \n",
" 0.175036 | \n",
" 16.512138 | \n",
" 0.570617 | \n",
" 0.743517 | \n",
" 9.798591 | \n",
" 6.760978 | \n",
" 0.082774 | \n",
" 0.206192 | \n",
" 0.075267 | \n",
"
\n",
" \n",
" min | \n",
" 0.516375 | \n",
" -0.360777 | \n",
" 0.261912 | \n",
" 1.842905 | \n",
" 0.011661 | \n",
" 3.013150 | \n",
" 0.122324 | \n",
" 1.361275 | \n",
" 0.993877 | \n",
" 0.257364 | \n",
" 0.027228 | \n",
" 0.128469 | \n",
" -0.023795 | \n",
"
\n",
" \n",
" 25% | \n",
" 3.833480 | \n",
" 0.350175 | \n",
" 0.517566 | \n",
" 3.108402 | \n",
" 0.072654 | \n",
" 25.189028 | \n",
" 0.748273 | \n",
" 1.772429 | \n",
" 7.649203 | \n",
" 1.863476 | \n",
" 0.162862 | \n",
" 0.289491 | \n",
" 0.082031 | \n",
"
\n",
" \n",
" 50% | \n",
" 7.101159 | \n",
" 0.595244 | \n",
" 0.701089 | \n",
" 4.682344 | \n",
" 0.139185 | \n",
" 34.014566 | \n",
" 1.064148 | \n",
" 2.170671 | \n",
" 12.863627 | \n",
" 4.773814 | \n",
" 0.213065 | \n",
" 0.383049 | \n",
" 0.130958 | \n",
"
\n",
" \n",
" 75% | \n",
" 15.349392 | \n",
" 0.802880 | \n",
" 0.820432 | \n",
" 6.619374 | \n",
" 0.261063 | \n",
" 45.689916 | \n",
" 1.562027 | \n",
" 2.688595 | \n",
" 23.123564 | \n",
" 10.952948 | \n",
" 0.280340 | \n",
" 0.570619 | \n",
" 0.188830 | \n",
"
\n",
" \n",
" max | \n",
" 31.367451 | \n",
" 1.174288 | \n",
" 0.954505 | \n",
" 17.011330 | \n",
" 0.918520 | \n",
" 90.839266 | \n",
" 3.540663 | \n",
" 5.240845 | \n",
" 45.349506 | \n",
" 28.721619 | \n",
" 0.400014 | \n",
" 0.975050 | \n",
" 0.323278 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" average_rate gridness sparsity selectivity \\\n",
"count 144.000000 144.000000 144.000000 144.000000 \n",
"mean 9.928801 0.562122 0.656634 5.320886 \n",
"std 7.727249 0.338826 0.186070 2.885443 \n",
"min 0.516375 -0.360777 0.261912 1.842905 \n",
"25% 3.833480 0.350175 0.517566 3.108402 \n",
"50% 7.101159 0.595244 0.701089 4.682344 \n",
"75% 15.349392 0.802880 0.820432 6.619374 \n",
"max 31.367451 1.174288 0.954505 17.011330 \n",
"\n",
" information_specificity max_rate information_rate \\\n",
"count 144.000000 144.000000 144.000000 \n",
"mean 0.200475 37.440262 1.178277 \n",
"std 0.175036 16.512138 0.570617 \n",
"min 0.011661 3.013150 0.122324 \n",
"25% 0.072654 25.189028 0.748273 \n",
"50% 0.139185 34.014566 1.064148 \n",
"75% 0.261063 45.689916 1.562027 \n",
"max 0.918520 90.839266 3.540663 \n",
"\n",
" interspike_interval_cv in_field_mean_rate out_field_mean_rate \\\n",
"count 144.000000 144.000000 144.000000 \n",
"mean 2.348004 15.711336 7.319828 \n",
"std 0.743517 9.798591 6.760978 \n",
"min 1.361275 0.993877 0.257364 \n",
"25% 1.772429 7.649203 1.863476 \n",
"50% 2.170671 12.863627 4.773814 \n",
"75% 2.688595 23.123564 10.952948 \n",
"max 5.240845 45.349506 28.721619 \n",
"\n",
" burst_event_ratio specificity speed_score \n",
"count 144.000000 144.000000 144.000000 \n",
"mean 0.219627 0.444021 0.136236 \n",
"std 0.082774 0.206192 0.075267 \n",
"min 0.027228 0.128469 -0.023795 \n",
"25% 0.162862 0.289491 0.082031 \n",
"50% 0.213065 0.383049 0.130958 \n",
"75% 0.280340 0.570619 0.188830 \n",
"max 0.400014 0.975050 0.323278 "
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gridcell_in_baseline.query('baseline')[columns].describe()"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" average_rate | \n",
" gridness | \n",
" sparsity | \n",
" selectivity | \n",
" information_specificity | \n",
" max_rate | \n",
" information_rate | \n",
" interspike_interval_cv | \n",
" in_field_mean_rate | \n",
" out_field_mean_rate | \n",
" burst_event_ratio | \n",
" specificity | \n",
" speed_score | \n",
"
\n",
" \n",
" \n",
" \n",
" count | \n",
" 73.000000 | \n",
" 73.000000 | \n",
" 73.000000 | \n",
" 73.000000 | \n",
" 73.000000 | \n",
" 73.000000 | \n",
" 73.000000 | \n",
" 73.000000 | \n",
" 73.000000 | \n",
" 73.000000 | \n",
" 73.000000 | \n",
" 73.000000 | \n",
" 73.000000 | \n",
"
\n",
" \n",
" mean | \n",
" 9.554733 | \n",
" 0.365628 | \n",
" 0.666120 | \n",
" 6.232196 | \n",
" 0.194542 | \n",
" 39.864795 | \n",
" 1.063930 | \n",
" 2.328150 | \n",
" 14.582445 | \n",
" 7.121023 | \n",
" 0.205369 | \n",
" 0.445532 | \n",
" 0.102438 | \n",
"
\n",
" \n",
" std | \n",
" 7.334232 | \n",
" 0.397430 | \n",
" 0.194908 | \n",
" 5.760291 | \n",
" 0.161491 | \n",
" 25.342874 | \n",
" 0.478339 | \n",
" 0.731921 | \n",
" 8.551638 | \n",
" 6.482068 | \n",
" 0.075895 | \n",
" 0.230698 | \n",
" 0.077154 | \n",
"
\n",
" \n",
" min | \n",
" 1.371102 | \n",
" -0.482293 | \n",
" 0.297108 | \n",
" 1.920211 | \n",
" 0.020735 | \n",
" 10.492070 | \n",
" 0.292174 | \n",
" 1.332239 | \n",
" 3.531824 | \n",
" 0.573040 | \n",
" 0.042956 | \n",
" 0.137978 | \n",
" -0.072000 | \n",
"
\n",
" \n",
" 25% | \n",
" 3.596484 | \n",
" 0.052315 | \n",
" 0.466494 | \n",
" 3.531741 | \n",
" 0.072324 | \n",
" 25.324427 | \n",
" 0.707876 | \n",
" 1.742983 | \n",
" 8.127398 | \n",
" 1.813572 | \n",
" 0.159265 | \n",
" 0.248962 | \n",
" 0.052617 | \n",
"
\n",
" \n",
" 50% | \n",
" 7.237246 | \n",
" 0.290593 | \n",
" 0.729540 | \n",
" 4.476625 | \n",
" 0.113483 | \n",
" 33.048050 | \n",
" 0.993926 | \n",
" 2.212266 | \n",
" 12.308800 | \n",
" 4.675997 | \n",
" 0.199137 | \n",
" 0.365960 | \n",
" 0.094618 | \n",
"
\n",
" \n",
" 75% | \n",
" 14.029394 | \n",
" 0.679854 | \n",
" 0.853552 | \n",
" 7.867471 | \n",
" 0.307852 | \n",
" 46.159854 | \n",
" 1.242135 | \n",
" 2.822726 | \n",
" 19.752448 | \n",
" 10.723556 | \n",
" 0.261186 | \n",
" 0.670842 | \n",
" 0.139564 | \n",
"
\n",
" \n",
" max | \n",
" 31.800150 | \n",
" 1.110681 | \n",
" 0.925871 | \n",
" 45.427380 | \n",
" 0.678935 | \n",
" 199.999821 | \n",
" 2.918984 | \n",
" 4.604317 | \n",
" 39.093347 | \n",
" 25.836762 | \n",
" 0.406678 | \n",
" 0.966010 | \n",
" 0.336072 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" average_rate gridness sparsity selectivity \\\n",
"count 73.000000 73.000000 73.000000 73.000000 \n",
"mean 9.554733 0.365628 0.666120 6.232196 \n",
"std 7.334232 0.397430 0.194908 5.760291 \n",
"min 1.371102 -0.482293 0.297108 1.920211 \n",
"25% 3.596484 0.052315 0.466494 3.531741 \n",
"50% 7.237246 0.290593 0.729540 4.476625 \n",
"75% 14.029394 0.679854 0.853552 7.867471 \n",
"max 31.800150 1.110681 0.925871 45.427380 \n",
"\n",
" information_specificity max_rate information_rate \\\n",
"count 73.000000 73.000000 73.000000 \n",
"mean 0.194542 39.864795 1.063930 \n",
"std 0.161491 25.342874 0.478339 \n",
"min 0.020735 10.492070 0.292174 \n",
"25% 0.072324 25.324427 0.707876 \n",
"50% 0.113483 33.048050 0.993926 \n",
"75% 0.307852 46.159854 1.242135 \n",
"max 0.678935 199.999821 2.918984 \n",
"\n",
" interspike_interval_cv in_field_mean_rate out_field_mean_rate \\\n",
"count 73.000000 73.000000 73.000000 \n",
"mean 2.328150 14.582445 7.121023 \n",
"std 0.731921 8.551638 6.482068 \n",
"min 1.332239 3.531824 0.573040 \n",
"25% 1.742983 8.127398 1.813572 \n",
"50% 2.212266 12.308800 4.675997 \n",
"75% 2.822726 19.752448 10.723556 \n",
"max 4.604317 39.093347 25.836762 \n",
"\n",
" burst_event_ratio specificity speed_score \n",
"count 73.000000 73.000000 73.000000 \n",
"mean 0.205369 0.445532 0.102438 \n",
"std 0.075895 0.230698 0.077154 \n",
"min 0.042956 0.137978 -0.072000 \n",
"25% 0.159265 0.248962 0.052617 \n",
"50% 0.199137 0.365960 0.094618 \n",
"75% 0.261186 0.670842 0.139564 \n",
"max 0.406678 0.966010 0.336072 "
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gridcell_in_baseline.query(\"stimulated\")[columns].describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Create nice table"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"def summarize(data):\n",
" return \"{:.2f} ± {:.2f} ({})\".format(data.mean(), data.sem(), sum(~np.isnan(data)))\n",
"\n",
"\n",
"def MWU(column, stim, base):\n",
" '''\n",
" Mann Whitney U\n",
" '''\n",
" Uvalue, pvalue = scipy.stats.mannwhitneyu(\n",
" stim[column].dropna(), \n",
" base[column].dropna(),\n",
" alternative='two-sided')\n",
"\n",
" return \"{:.2f}, {:.3f}\".format(Uvalue, pvalue)\n",
"\n",
"\n",
"def PRS(column, stim, base):\n",
" '''\n",
" Permutation ReSampling\n",
" '''\n",
" pvalue, observed_diff, diffs = permutation_resampling(\n",
" stim[column].dropna(), \n",
" base[column].dropna(), statistic=np.median)\n",
"\n",
" return \"{:.2f}, {:.3f}\".format(observed_diff, pvalue)\n",
"\n",
"\n",
"def rename(name):\n",
" return name.replace(\"_field\", \"-field\").replace(\"_\", \" \").capitalize()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Stimulated | \n",
" Baseline | \n",
" MWU | \n",
" PRS | \n",
"
\n",
" \n",
" \n",
" \n",
" Average rate | \n",
" 9.55 ± 0.86 (73) | \n",
" 9.93 ± 0.64 (144) | \n",
" 5120.00, 0.757 | \n",
" 0.14, 0.868 | \n",
"
\n",
" \n",
" Gridness | \n",
" 0.37 ± 0.05 (73) | \n",
" 0.56 ± 0.03 (144) | \n",
" 3718.00, 0.000 | \n",
" 0.30, 0.000 | \n",
"
\n",
" \n",
" Sparsity | \n",
" 0.67 ± 0.02 (73) | \n",
" 0.66 ± 0.02 (144) | \n",
" 5515.00, 0.554 | \n",
" 0.03, 0.413 | \n",
"
\n",
" \n",
" Selectivity | \n",
" 6.23 ± 0.67 (73) | \n",
" 5.32 ± 0.24 (144) | \n",
" 5482.00, 0.606 | \n",
" 0.21, 0.718 | \n",
"
\n",
" \n",
" Information specificity | \n",
" 0.19 ± 0.02 (73) | \n",
" 0.20 ± 0.01 (144) | \n",
" 5094.00, 0.712 | \n",
" 0.03, 0.501 | \n",
"
\n",
" \n",
" Max rate | \n",
" 39.86 ± 2.97 (73) | \n",
" 37.44 ± 1.38 (144) | \n",
" 5256.00, 0.999 | \n",
" 0.97, 0.592 | \n",
"
\n",
" \n",
" Information rate | \n",
" 1.06 ± 0.06 (73) | \n",
" 1.18 ± 0.05 (144) | \n",
" 4681.00, 0.189 | \n",
" 0.07, 0.426 | \n",
"
\n",
" \n",
" Interspike interval cv | \n",
" 2.33 ± 0.09 (73) | \n",
" 2.35 ± 0.06 (144) | \n",
" 5197.00, 0.894 | \n",
" 0.04, 0.715 | \n",
"
\n",
" \n",
" In-field mean rate | \n",
" 14.58 ± 1.00 (73) | \n",
" 15.71 ± 0.82 (144) | \n",
" 5000.00, 0.559 | \n",
" 0.55, 0.751 | \n",
"
\n",
" \n",
" Out-field mean rate | \n",
" 7.12 ± 0.76 (73) | \n",
" 7.32 ± 0.56 (144) | \n",
" 5166.00, 0.838 | \n",
" 0.10, 0.934 | \n",
"
\n",
" \n",
" Burst event ratio | \n",
" 0.21 ± 0.01 (73) | \n",
" 0.22 ± 0.01 (144) | \n",
" 4677.00, 0.186 | \n",
" 0.01, 0.212 | \n",
"
\n",
" \n",
" Specificity | \n",
" 0.45 ± 0.03 (73) | \n",
" 0.44 ± 0.02 (144) | \n",
" 5076.00, 0.681 | \n",
" 0.02, 0.547 | \n",
"
\n",
" \n",
" Speed score | \n",
" 0.10 ± 0.01 (73) | \n",
" 0.14 ± 0.01 (144) | \n",
" 3978.00, 0.003 | \n",
" 0.04, 0.008 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Stimulated Baseline \\\n",
"Average rate 9.55 ± 0.86 (73) 9.93 ± 0.64 (144) \n",
"Gridness 0.37 ± 0.05 (73) 0.56 ± 0.03 (144) \n",
"Sparsity 0.67 ± 0.02 (73) 0.66 ± 0.02 (144) \n",
"Selectivity 6.23 ± 0.67 (73) 5.32 ± 0.24 (144) \n",
"Information specificity 0.19 ± 0.02 (73) 0.20 ± 0.01 (144) \n",
"Max rate 39.86 ± 2.97 (73) 37.44 ± 1.38 (144) \n",
"Information rate 1.06 ± 0.06 (73) 1.18 ± 0.05 (144) \n",
"Interspike interval cv 2.33 ± 0.09 (73) 2.35 ± 0.06 (144) \n",
"In-field mean rate 14.58 ± 1.00 (73) 15.71 ± 0.82 (144) \n",
"Out-field mean rate 7.12 ± 0.76 (73) 7.32 ± 0.56 (144) \n",
"Burst event ratio 0.21 ± 0.01 (73) 0.22 ± 0.01 (144) \n",
"Specificity 0.45 ± 0.03 (73) 0.44 ± 0.02 (144) \n",
"Speed score 0.10 ± 0.01 (73) 0.14 ± 0.01 (144) \n",
"\n",
" MWU PRS \n",
"Average rate 5120.00, 0.757 0.14, 0.868 \n",
"Gridness 3718.00, 0.000 0.30, 0.000 \n",
"Sparsity 5515.00, 0.554 0.03, 0.413 \n",
"Selectivity 5482.00, 0.606 0.21, 0.718 \n",
"Information specificity 5094.00, 0.712 0.03, 0.501 \n",
"Max rate 5256.00, 0.999 0.97, 0.592 \n",
"Information rate 4681.00, 0.189 0.07, 0.426 \n",
"Interspike interval cv 5197.00, 0.894 0.04, 0.715 \n",
"In-field mean rate 5000.00, 0.559 0.55, 0.751 \n",
"Out-field mean rate 5166.00, 0.838 0.10, 0.934 \n",
"Burst event ratio 4677.00, 0.186 0.01, 0.212 \n",
"Specificity 5076.00, 0.681 0.02, 0.547 \n",
"Speed score 3978.00, 0.003 0.04, 0.008 "
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"_stim_data = gridcell_in_baseline.query('stimulated')\n",
"_base_data = gridcell_in_baseline.query('baseline')\n",
"\n",
"result = pd.DataFrame()\n",
"\n",
"result['Stimulated'] = _stim_data[columns].agg(summarize)\n",
"result['Baseline'] = _base_data[columns].agg(summarize)\n",
"\n",
"result.index = map(rename, result.index)\n",
"\n",
"result['MWU'] = list(map(lambda x: MWU(x, _stim_data, _base_data), columns))\n",
"result['PRS'] = list(map(lambda x: PRS(x, _stim_data, _base_data), columns))\n",
"\n",
"result.to_latex(output_path / \"statistics\" / \"statistics.tex\")\n",
"result.to_latex(output_path / \"statistics\" / \"statistics.csv\")\n",
"result"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Stimulated | \n",
" Baseline | \n",
" MWU | \n",
" PRS | \n",
"
\n",
" \n",
" \n",
" \n",
" Average rate | \n",
" 9.06 ± 1.21 (32) | \n",
" 9.65 ± 0.90 (68) | \n",
" 1044.00, 0.748 | \n",
" 0.02, 0.997 | \n",
"
\n",
" \n",
" Gridness | \n",
" 0.34 ± 0.06 (32) | \n",
" 0.58 ± 0.04 (68) | \n",
" 676.00, 0.002 | \n",
" 0.27, 0.003 | \n",
"
\n",
" \n",
" Sparsity | \n",
" 0.67 ± 0.03 (32) | \n",
" 0.65 ± 0.02 (68) | \n",
" 1154.00, 0.628 | \n",
" 0.06, 0.319 | \n",
"
\n",
" \n",
" Selectivity | \n",
" 5.43 ± 0.47 (32) | \n",
" 5.22 ± 0.35 (68) | \n",
" 1140.00, 0.704 | \n",
" 0.29, 0.705 | \n",
"
\n",
" \n",
" Information specificity | \n",
" 0.19 ± 0.03 (32) | \n",
" 0.21 ± 0.02 (68) | \n",
" 1005.00, 0.542 | \n",
" 0.05, 0.095 | \n",
"
\n",
" \n",
" Max rate | \n",
" 35.53 ± 2.50 (32) | \n",
" 36.19 ± 1.79 (68) | \n",
" 1063.00, 0.856 | \n",
" 0.04, 0.972 | \n",
"
\n",
" \n",
" Information rate | \n",
" 1.04 ± 0.10 (32) | \n",
" 1.21 ± 0.06 (68) | \n",
" 867.00, 0.103 | \n",
" 0.12, 0.225 | \n",
"
\n",
" \n",
" Interspike interval cv | \n",
" 2.29 ± 0.12 (32) | \n",
" 2.38 ± 0.10 (68) | \n",
" 1053.00, 0.799 | \n",
" 0.04, 0.891 | \n",
"
\n",
" \n",
" In-field mean rate | \n",
" 13.87 ± 1.42 (32) | \n",
" 15.27 ± 1.12 (68) | \n",
" 1024.00, 0.639 | \n",
" 0.10, 0.948 | \n",
"
\n",
" \n",
" Out-field mean rate | \n",
" 6.52 ± 1.04 (32) | \n",
" 6.98 ± 0.76 (68) | \n",
" 1037.00, 0.709 | \n",
" 0.35, 0.905 | \n",
"
\n",
" \n",
" Burst event ratio | \n",
" 0.23 ± 0.01 (32) | \n",
" 0.23 ± 0.01 (68) | \n",
" 1158.00, 0.608 | \n",
" 0.01, 0.478 | \n",
"
\n",
" \n",
" Specificity | \n",
" 0.45 ± 0.04 (32) | \n",
" 0.45 ± 0.02 (68) | \n",
" 1060.00, 0.839 | \n",
" 0.01, 0.852 | \n",
"
\n",
" \n",
" Speed score | \n",
" 0.09 ± 0.01 (32) | \n",
" 0.14 ± 0.01 (68) | \n",
" 736.00, 0.009 | \n",
" 0.05, 0.011 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Stimulated Baseline MWU \\\n",
"Average rate 9.06 ± 1.21 (32) 9.65 ± 0.90 (68) 1044.00, 0.748 \n",
"Gridness 0.34 ± 0.06 (32) 0.58 ± 0.04 (68) 676.00, 0.002 \n",
"Sparsity 0.67 ± 0.03 (32) 0.65 ± 0.02 (68) 1154.00, 0.628 \n",
"Selectivity 5.43 ± 0.47 (32) 5.22 ± 0.35 (68) 1140.00, 0.704 \n",
"Information specificity 0.19 ± 0.03 (32) 0.21 ± 0.02 (68) 1005.00, 0.542 \n",
"Max rate 35.53 ± 2.50 (32) 36.19 ± 1.79 (68) 1063.00, 0.856 \n",
"Information rate 1.04 ± 0.10 (32) 1.21 ± 0.06 (68) 867.00, 0.103 \n",
"Interspike interval cv 2.29 ± 0.12 (32) 2.38 ± 0.10 (68) 1053.00, 0.799 \n",
"In-field mean rate 13.87 ± 1.42 (32) 15.27 ± 1.12 (68) 1024.00, 0.639 \n",
"Out-field mean rate 6.52 ± 1.04 (32) 6.98 ± 0.76 (68) 1037.00, 0.709 \n",
"Burst event ratio 0.23 ± 0.01 (32) 0.23 ± 0.01 (68) 1158.00, 0.608 \n",
"Specificity 0.45 ± 0.04 (32) 0.45 ± 0.02 (68) 1060.00, 0.839 \n",
"Speed score 0.09 ± 0.01 (32) 0.14 ± 0.01 (68) 736.00, 0.009 \n",
"\n",
" PRS \n",
"Average rate 0.02, 0.997 \n",
"Gridness 0.27, 0.003 \n",
"Sparsity 0.06, 0.319 \n",
"Selectivity 0.29, 0.705 \n",
"Information specificity 0.05, 0.095 \n",
"Max rate 0.04, 0.972 \n",
"Information rate 0.12, 0.225 \n",
"Interspike interval cv 0.04, 0.891 \n",
"In-field mean rate 0.10, 0.948 \n",
"Out-field mean rate 0.35, 0.905 \n",
"Burst event ratio 0.01, 0.478 \n",
"Specificity 0.01, 0.852 \n",
"Speed score 0.05, 0.011 "
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"_stim_data = stimulated_11\n",
"_base_data = baseline_i\n",
"\n",
"result = pd.DataFrame()\n",
"\n",
"result['Stimulated'] = _stim_data[columns].agg(summarize)\n",
"result['Baseline'] = _base_data[columns].agg(summarize)\n",
"\n",
"result.index = map(rename, result.index)\n",
"\n",
"result['MWU'] = list(map(lambda x: MWU(x, _stim_data, _base_data), columns))\n",
"result['PRS'] = list(map(lambda x: PRS(x, _stim_data, _base_data), columns))\n",
"\n",
"\n",
"result.to_latex(output_path / \"statistics\" / \"statistics_11.tex\")\n",
"result.to_latex(output_path / \"statistics\" / \"statistics_11.csv\")\n",
"result"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Stimulated | \n",
" Baseline | \n",
" MWU | \n",
" PRS | \n",
"
\n",
" \n",
" \n",
" \n",
" Average rate | \n",
" 10.11 ± 1.51 (28) | \n",
" 10.01 ± 1.06 (58) | \n",
" 808.00, 0.974 | \n",
" 0.07, 0.968 | \n",
"
\n",
" \n",
" Gridness | \n",
" 0.28 ± 0.08 (28) | \n",
" 0.57 ± 0.05 (58) | \n",
" 493.00, 0.003 | \n",
" 0.46, 0.000 | \n",
"
\n",
" \n",
" Sparsity | \n",
" 0.68 ± 0.04 (28) | \n",
" 0.66 ± 0.02 (58) | \n",
" 881.00, 0.528 | \n",
" 0.04, 0.328 | \n",
"
\n",
" \n",
" Selectivity | \n",
" 7.47 ± 1.63 (28) | \n",
" 5.53 ± 0.40 (58) | \n",
" 809.00, 0.982 | \n",
" 0.30, 0.638 | \n",
"
\n",
" \n",
" Information specificity | \n",
" 0.20 ± 0.03 (28) | \n",
" 0.19 ± 0.02 (58) | \n",
" 812.00, 0.996 | \n",
" 0.01, 0.588 | \n",
"
\n",
" \n",
" Max rate | \n",
" 45.33 ± 6.85 (28) | \n",
" 38.95 ± 2.48 (58) | \n",
" 797.00, 0.894 | \n",
" 2.09, 0.451 | \n",
"
\n",
" \n",
" Information rate | \n",
" 1.04 ± 0.08 (28) | \n",
" 1.12 ± 0.09 (58) | \n",
" 799.00, 0.908 | \n",
" 0.03, 0.858 | \n",
"
\n",
" \n",
" Interspike interval cv | \n",
" 2.28 ± 0.16 (28) | \n",
" 2.32 ± 0.09 (58) | \n",
" 745.00, 0.540 | \n",
" 0.16, 0.463 | \n",
"
\n",
" \n",
" In-field mean rate | \n",
" 14.95 ± 1.71 (28) | \n",
" 15.81 ± 1.38 (58) | \n",
" 779.00, 0.765 | \n",
" 0.98, 0.712 | \n",
"
\n",
" \n",
" Out-field mean rate | \n",
" 7.80 ± 1.35 (28) | \n",
" 7.58 ± 0.96 (58) | \n",
" 827.00, 0.894 | \n",
" 0.10, 0.927 | \n",
"
\n",
" \n",
" Burst event ratio | \n",
" 0.18 ± 0.01 (28) | \n",
" 0.21 ± 0.01 (58) | \n",
" 641.00, 0.116 | \n",
" 0.03, 0.099 | \n",
"
\n",
" \n",
" Specificity | \n",
" 0.43 ± 0.05 (28) | \n",
" 0.43 ± 0.03 (58) | \n",
" 749.00, 0.565 | \n",
" 0.02, 0.657 | \n",
"
\n",
" \n",
" Speed score | \n",
" 0.10 ± 0.02 (28) | \n",
" 0.12 ± 0.01 (58) | \n",
" 617.00, 0.073 | \n",
" 0.02, 0.116 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Stimulated Baseline MWU \\\n",
"Average rate 10.11 ± 1.51 (28) 10.01 ± 1.06 (58) 808.00, 0.974 \n",
"Gridness 0.28 ± 0.08 (28) 0.57 ± 0.05 (58) 493.00, 0.003 \n",
"Sparsity 0.68 ± 0.04 (28) 0.66 ± 0.02 (58) 881.00, 0.528 \n",
"Selectivity 7.47 ± 1.63 (28) 5.53 ± 0.40 (58) 809.00, 0.982 \n",
"Information specificity 0.20 ± 0.03 (28) 0.19 ± 0.02 (58) 812.00, 0.996 \n",
"Max rate 45.33 ± 6.85 (28) 38.95 ± 2.48 (58) 797.00, 0.894 \n",
"Information rate 1.04 ± 0.08 (28) 1.12 ± 0.09 (58) 799.00, 0.908 \n",
"Interspike interval cv 2.28 ± 0.16 (28) 2.32 ± 0.09 (58) 745.00, 0.540 \n",
"In-field mean rate 14.95 ± 1.71 (28) 15.81 ± 1.38 (58) 779.00, 0.765 \n",
"Out-field mean rate 7.80 ± 1.35 (28) 7.58 ± 0.96 (58) 827.00, 0.894 \n",
"Burst event ratio 0.18 ± 0.01 (28) 0.21 ± 0.01 (58) 641.00, 0.116 \n",
"Specificity 0.43 ± 0.05 (28) 0.43 ± 0.03 (58) 749.00, 0.565 \n",
"Speed score 0.10 ± 0.02 (28) 0.12 ± 0.01 (58) 617.00, 0.073 \n",
"\n",
" PRS \n",
"Average rate 0.07, 0.968 \n",
"Gridness 0.46, 0.000 \n",
"Sparsity 0.04, 0.328 \n",
"Selectivity 0.30, 0.638 \n",
"Information specificity 0.01, 0.588 \n",
"Max rate 2.09, 0.451 \n",
"Information rate 0.03, 0.858 \n",
"Interspike interval cv 0.16, 0.463 \n",
"In-field mean rate 0.98, 0.712 \n",
"Out-field mean rate 0.10, 0.927 \n",
"Burst event ratio 0.03, 0.099 \n",
"Specificity 0.02, 0.657 \n",
"Speed score 0.02, 0.116 "
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"_stim_data = stimulated_30\n",
"_base_data = baseline_ii\n",
"\n",
"result = pd.DataFrame()\n",
"\n",
"result['Stimulated'] = _stim_data[columns].agg(summarize)\n",
"result['Baseline'] = _base_data[columns].agg(summarize)\n",
"\n",
"result.index = map(rename, result.index)\n",
"\n",
"result['MWU'] = list(map(lambda x: MWU(x, _stim_data, _base_data), columns))\n",
"result['PRS'] = list(map(lambda x: PRS(x, _stim_data, _base_data), columns))\n",
"\n",
"\n",
"result.to_latex(output_path / \"statistics\" / \"statistics_30.tex\")\n",
"result.to_latex(output_path / \"statistics\" / \"statistics_30.csv\")\n",
"result"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Stimulated 30Hz | \n",
" Stimulated 11Hz | \n",
" MWU | \n",
" PRS | \n",
"
\n",
" \n",
" \n",
" \n",
" Average rate | \n",
" 10.11 ± 1.51 (28) | \n",
" 9.06 ± 1.21 (32) | \n",
" 463.00, 0.830 | \n",
" 0.12, 0.978 | \n",
"
\n",
" \n",
" Gridness | \n",
" 0.28 ± 0.08 (28) | \n",
" 0.34 ± 0.06 (32) | \n",
" 402.00, 0.500 | \n",
" 0.15, 0.330 | \n",
"
\n",
" \n",
" Sparsity | \n",
" 0.68 ± 0.04 (28) | \n",
" 0.67 ± 0.03 (32) | \n",
" 479.00, 0.651 | \n",
" 0.03, 0.493 | \n",
"
\n",
" \n",
" Selectivity | \n",
" 7.47 ± 1.63 (28) | \n",
" 5.43 ± 0.47 (32) | \n",
" 449.00, 0.994 | \n",
" 0.00, 0.999 | \n",
"
\n",
" \n",
" Information specificity | \n",
" 0.20 ± 0.03 (28) | \n",
" 0.19 ± 0.03 (32) | \n",
" 440.00, 0.912 | \n",
" 0.01, 0.768 | \n",
"
\n",
" \n",
" Max rate | \n",
" 45.33 ± 6.85 (28) | \n",
" 35.53 ± 2.50 (32) | \n",
" 488.00, 0.558 | \n",
" 1.22, 0.682 | \n",
"
\n",
" \n",
" Information rate | \n",
" 1.04 ± 0.08 (28) | \n",
" 1.04 ± 0.10 (32) | \n",
" 475.00, 0.695 | \n",
" 0.02, 0.775 | \n",
"
\n",
" \n",
" Interspike interval cv | \n",
" 2.28 ± 0.16 (28) | \n",
" 2.29 ± 0.12 (32) | \n",
" 411.00, 0.589 | \n",
" 0.14, 0.659 | \n",
"
\n",
" \n",
" In-field mean rate | \n",
" 14.95 ± 1.71 (28) | \n",
" 13.87 ± 1.42 (32) | \n",
" 473.00, 0.717 | \n",
" 1.02, 0.794 | \n",
"
\n",
" \n",
" Out-field mean rate | \n",
" 7.80 ± 1.35 (28) | \n",
" 6.52 ± 1.04 (32) | \n",
" 489.00, 0.548 | \n",
" 0.17, 0.940 | \n",
"
\n",
" \n",
" Burst event ratio | \n",
" 0.18 ± 0.01 (28) | \n",
" 0.23 ± 0.01 (32) | \n",
" 273.00, 0.010 | \n",
" 0.05, 0.028 | \n",
"
\n",
" \n",
" Specificity | \n",
" 0.43 ± 0.05 (28) | \n",
" 0.45 ± 0.04 (32) | \n",
" 400.00, 0.482 | \n",
" 0.02, 0.570 | \n",
"
\n",
" \n",
" Speed score | \n",
" 0.10 ± 0.02 (28) | \n",
" 0.09 ± 0.01 (32) | \n",
" 446.00, 0.982 | \n",
" 0.01, 0.480 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Stimulated 30Hz Stimulated 11Hz MWU \\\n",
"Average rate 10.11 ± 1.51 (28) 9.06 ± 1.21 (32) 463.00, 0.830 \n",
"Gridness 0.28 ± 0.08 (28) 0.34 ± 0.06 (32) 402.00, 0.500 \n",
"Sparsity 0.68 ± 0.04 (28) 0.67 ± 0.03 (32) 479.00, 0.651 \n",
"Selectivity 7.47 ± 1.63 (28) 5.43 ± 0.47 (32) 449.00, 0.994 \n",
"Information specificity 0.20 ± 0.03 (28) 0.19 ± 0.03 (32) 440.00, 0.912 \n",
"Max rate 45.33 ± 6.85 (28) 35.53 ± 2.50 (32) 488.00, 0.558 \n",
"Information rate 1.04 ± 0.08 (28) 1.04 ± 0.10 (32) 475.00, 0.695 \n",
"Interspike interval cv 2.28 ± 0.16 (28) 2.29 ± 0.12 (32) 411.00, 0.589 \n",
"In-field mean rate 14.95 ± 1.71 (28) 13.87 ± 1.42 (32) 473.00, 0.717 \n",
"Out-field mean rate 7.80 ± 1.35 (28) 6.52 ± 1.04 (32) 489.00, 0.548 \n",
"Burst event ratio 0.18 ± 0.01 (28) 0.23 ± 0.01 (32) 273.00, 0.010 \n",
"Specificity 0.43 ± 0.05 (28) 0.45 ± 0.04 (32) 400.00, 0.482 \n",
"Speed score 0.10 ± 0.02 (28) 0.09 ± 0.01 (32) 446.00, 0.982 \n",
"\n",
" PRS \n",
"Average rate 0.12, 0.978 \n",
"Gridness 0.15, 0.330 \n",
"Sparsity 0.03, 0.493 \n",
"Selectivity 0.00, 0.999 \n",
"Information specificity 0.01, 0.768 \n",
"Max rate 1.22, 0.682 \n",
"Information rate 0.02, 0.775 \n",
"Interspike interval cv 0.14, 0.659 \n",
"In-field mean rate 1.02, 0.794 \n",
"Out-field mean rate 0.17, 0.940 \n",
"Burst event ratio 0.05, 0.028 \n",
"Specificity 0.02, 0.570 \n",
"Speed score 0.01, 0.480 "
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"_stim_data = stimulated_30\n",
"_base_data = stimulated_11\n",
"\n",
"result = pd.DataFrame()\n",
"\n",
"result['Stimulated 30Hz'] = _stim_data[columns].agg(summarize)\n",
"result['Stimulated 11Hz'] = _base_data[columns].agg(summarize)\n",
"\n",
"result.index = map(rename, result.index)\n",
"\n",
"result['MWU'] = list(map(lambda x: MWU(x, _stim_data, _base_data), columns))\n",
"result['PRS'] = list(map(lambda x: PRS(x, _stim_data, _base_data), columns))\n",
"\n",
"\n",
"result.to_latex(output_path / \"statistics\" / \"statistics_11_vs_30.tex\")\n",
"result.to_latex(output_path / \"statistics\" / \"statistics_11_vs_30.csv\")\n",
"result"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Baseline i | \n",
" Baseline ii | \n",
" MWU | \n",
" PRS | \n",
"
\n",
" \n",
" \n",
" \n",
" Average rate | \n",
" 9.65 ± 0.90 (68) | \n",
" 10.01 ± 1.06 (58) | \n",
" 1979.00, 0.975 | \n",
" 0.20, 0.935 | \n",
"
\n",
" \n",
" Gridness | \n",
" 0.58 ± 0.04 (68) | \n",
" 0.57 ± 0.05 (58) | \n",
" 1946.00, 0.901 | \n",
" 0.04, 0.479 | \n",
"
\n",
" \n",
" Sparsity | \n",
" 0.65 ± 0.02 (68) | \n",
" 0.66 ± 0.02 (58) | \n",
" 1870.00, 0.619 | \n",
" 0.05, 0.253 | \n",
"
\n",
" \n",
" Selectivity | \n",
" 5.22 ± 0.35 (68) | \n",
" 5.53 ± 0.40 (58) | \n",
" 1833.00, 0.498 | \n",
" 0.01, 0.973 | \n",
"
\n",
" \n",
" Information specificity | \n",
" 0.21 ± 0.02 (68) | \n",
" 0.19 ± 0.02 (58) | \n",
" 2135.00, 0.426 | \n",
" 0.05, 0.136 | \n",
"
\n",
" \n",
" Max rate | \n",
" 36.19 ± 1.79 (68) | \n",
" 38.95 ± 2.48 (58) | \n",
" 1824.00, 0.470 | \n",
" 0.84, 0.675 | \n",
"
\n",
" \n",
" Information rate | \n",
" 1.21 ± 0.06 (68) | \n",
" 1.12 ± 0.09 (58) | \n",
" 2246.00, 0.181 | \n",
" 0.13, 0.169 | \n",
"
\n",
" \n",
" Interspike interval cv | \n",
" 2.38 ± 0.10 (68) | \n",
" 2.32 ± 0.09 (58) | \n",
" 2055.00, 0.686 | \n",
" 0.02, 0.805 | \n",
"
\n",
" \n",
" In-field mean rate | \n",
" 15.27 ± 1.12 (68) | \n",
" 15.81 ± 1.38 (58) | \n",
" 1926.00, 0.824 | \n",
" 0.15, 0.931 | \n",
"
\n",
" \n",
" Out-field mean rate | \n",
" 6.98 ± 0.76 (68) | \n",
" 7.58 ± 0.96 (58) | \n",
" 1946.00, 0.901 | \n",
" 0.62, 0.650 | \n",
"
\n",
" \n",
" Burst event ratio | \n",
" 0.23 ± 0.01 (68) | \n",
" 0.21 ± 0.01 (58) | \n",
" 2112.00, 0.495 | \n",
" 0.00, 0.743 | \n",
"
\n",
" \n",
" Specificity | \n",
" 0.45 ± 0.02 (68) | \n",
" 0.43 ± 0.03 (58) | \n",
" 2035.00, 0.760 | \n",
" 0.01, 0.834 | \n",
"
\n",
" \n",
" Speed score | \n",
" 0.14 ± 0.01 (68) | \n",
" 0.12 ± 0.01 (58) | \n",
" 2267.00, 0.149 | \n",
" 0.05, 0.014 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Baseline i Baseline ii MWU \\\n",
"Average rate 9.65 ± 0.90 (68) 10.01 ± 1.06 (58) 1979.00, 0.975 \n",
"Gridness 0.58 ± 0.04 (68) 0.57 ± 0.05 (58) 1946.00, 0.901 \n",
"Sparsity 0.65 ± 0.02 (68) 0.66 ± 0.02 (58) 1870.00, 0.619 \n",
"Selectivity 5.22 ± 0.35 (68) 5.53 ± 0.40 (58) 1833.00, 0.498 \n",
"Information specificity 0.21 ± 0.02 (68) 0.19 ± 0.02 (58) 2135.00, 0.426 \n",
"Max rate 36.19 ± 1.79 (68) 38.95 ± 2.48 (58) 1824.00, 0.470 \n",
"Information rate 1.21 ± 0.06 (68) 1.12 ± 0.09 (58) 2246.00, 0.181 \n",
"Interspike interval cv 2.38 ± 0.10 (68) 2.32 ± 0.09 (58) 2055.00, 0.686 \n",
"In-field mean rate 15.27 ± 1.12 (68) 15.81 ± 1.38 (58) 1926.00, 0.824 \n",
"Out-field mean rate 6.98 ± 0.76 (68) 7.58 ± 0.96 (58) 1946.00, 0.901 \n",
"Burst event ratio 0.23 ± 0.01 (68) 0.21 ± 0.01 (58) 2112.00, 0.495 \n",
"Specificity 0.45 ± 0.02 (68) 0.43 ± 0.03 (58) 2035.00, 0.760 \n",
"Speed score 0.14 ± 0.01 (68) 0.12 ± 0.01 (58) 2267.00, 0.149 \n",
"\n",
" PRS \n",
"Average rate 0.20, 0.935 \n",
"Gridness 0.04, 0.479 \n",
"Sparsity 0.05, 0.253 \n",
"Selectivity 0.01, 0.973 \n",
"Information specificity 0.05, 0.136 \n",
"Max rate 0.84, 0.675 \n",
"Information rate 0.13, 0.169 \n",
"Interspike interval cv 0.02, 0.805 \n",
"In-field mean rate 0.15, 0.931 \n",
"Out-field mean rate 0.62, 0.650 \n",
"Burst event ratio 0.00, 0.743 \n",
"Specificity 0.01, 0.834 \n",
"Speed score 0.05, 0.014 "
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"_stim_data = baseline_i\n",
"_base_data = baseline_ii\n",
"\n",
"result = pd.DataFrame()\n",
"\n",
"result['Baseline i'] = _stim_data[columns].agg(summarize)\n",
"result['Baseline ii'] = _base_data[columns].agg(summarize)\n",
"\n",
"result.index = map(rename, result.index)\n",
"\n",
"result['MWU'] = list(map(lambda x: MWU(x, _stim_data, _base_data), columns))\n",
"result['PRS'] = list(map(lambda x: PRS(x, _stim_data, _base_data), columns))\n",
"\n",
"\n",
"result.to_latex(output_path / \"statistics\" / \"statistics_base_i_vs_base_ii.tex\")\n",
"result.to_latex(output_path / \"statistics\" / \"statistics_base_i_vs_base_ii.csv\")\n",
"result"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Violinplot"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"plt.rc('axes', titlesize=12)\n",
"plt.rcParams.update({\n",
" 'font.size': 12, \n",
" 'figure.figsize': (1.7, 3), \n",
" 'figure.dpi': 150\n",
"})"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [],
"source": [
"stuff = {\n",
" '': {\n",
" 'base': gridcell_in_baseline.query('baseline'),\n",
" 'stim': gridcell_in_baseline.query('stimulated')\n",
" },\n",
" '_11': {\n",
" 'base': baseline_i,\n",
" 'stim': stimulated_11\n",
" },\n",
" '_30': {\n",
" 'base': baseline_ii,\n",
" 'stim': stimulated_30\n",
" }\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Information rate"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"U-test: U value 5831.0 p value 0.18862797777215656\n",
"_11\n",
"U-test: U value 1309.0 p value 0.10324315446274247\n",
"_30\n",
"U-test: U value 825.0 p value 0.9082875409541091\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"