{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"%load_ext autoreload\n",
"%autoreload 2"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"13:03:48 [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": 4,
"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": 5,
"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.398230 | \n",
" 0.678064 | \n",
" -0.466923 | \n",
" 0.029328 | \n",
" 1.009215 | \n",
" 0.317256 | \n",
" 5.438033 | \n",
" 0.040874 | \n",
" 0.628784 | \n",
" 20.224859 | \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.138014 | \n",
" 0.263173 | \n",
" -0.666792 | \n",
" 0.308146 | \n",
" 0.192524 | \n",
" 0.033447 | \n",
" 1.951740 | \n",
" 0.017289 | \n",
" 0.789388 | \n",
" 27.897271 | \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.373986 | \n",
" 0.659259 | \n",
" -0.572566 | \n",
" 0.143252 | \n",
" 4.745836 | \n",
" 0.393704 | \n",
" 4.439721 | \n",
" 0.124731 | \n",
" 0.555402 | \n",
" 28.810794 | \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.087413 | \n",
" 0.179245 | \n",
" -0.437492 | \n",
" 0.268948 | \n",
" 0.157394 | \n",
" 0.073553 | \n",
" 6.215195 | \n",
" 0.101911 | \n",
" 0.492250 | \n",
" 9.462322 | \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.248771 | \n",
" 0.463596 | \n",
" -0.085938 | \n",
" 0.218744 | \n",
" 0.519153 | \n",
" 0.032683 | \n",
" 1.531481 | \n",
" 0.053810 | \n",
" 0.559905 | \n",
" 0.000000 | \n",
"
\n",
" \n",
"
\n",
"
5 rows × 39 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.398230 \n",
"1 NaN False baseline ii ... 0.138014 \n",
"2 NaN False baseline ii ... 0.373986 \n",
"3 NaN False baseline ii ... 0.087413 \n",
"4 NaN False baseline ii ... 0.248771 \n",
"\n",
" bursty_spike_ratio gridness border_score information_rate \\\n",
"0 0.678064 -0.466923 0.029328 1.009215 \n",
"1 0.263173 -0.666792 0.308146 0.192524 \n",
"2 0.659259 -0.572566 0.143252 4.745836 \n",
"3 0.179245 -0.437492 0.268948 0.157394 \n",
"4 0.463596 -0.085938 0.218744 0.519153 \n",
"\n",
" information_specificity head_mean_ang head_mean_vec_len spacing \\\n",
"0 0.317256 5.438033 0.040874 0.628784 \n",
"1 0.033447 1.951740 0.017289 0.789388 \n",
"2 0.393704 4.439721 0.124731 0.555402 \n",
"3 0.073553 6.215195 0.101911 0.492250 \n",
"4 0.032683 1.531481 0.053810 0.559905 \n",
"\n",
" orientation \n",
"0 20.224859 \n",
"1 27.897271 \n",
"2 28.810794 \n",
"3 9.462322 \n",
"4 0.000000 \n",
"\n",
"[5 rows x 39 columns]"
]
},
"execution_count": 5,
"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": 6,
"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": 6,
"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": 7,
"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.040874 | \n",
" 0.628784 | \n",
" 20.224859 | \n",
" 0.332548 | \n",
" 0.229073 | \n",
" 6.029431 | \n",
" 0.205362 | \n",
" 1.115825 | \n",
" 0.066736 | \n",
" 0.451741 | \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.017289 | \n",
" 0.789388 | \n",
" 27.897271 | \n",
" 0.354830 | \n",
" 0.089333 | \n",
" 6.120055 | \n",
" 0.073566 | \n",
" 0.223237 | \n",
" 0.052594 | \n",
" 0.098517 | \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.124731 | \n",
" 0.555402 | \n",
" 28.810794 | \n",
" 0.264610 | \n",
" -0.121081 | \n",
" 5.759406 | \n",
" 0.150827 | \n",
" 4.964984 | \n",
" 0.027120 | \n",
" 0.400770 | \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.101911 | \n",
" 0.492250 | \n",
" 9.462322 | \n",
" 0.344280 | \n",
" 0.215829 | \n",
" 6.033364 | \n",
" 0.110495 | \n",
" 0.239996 | \n",
" 0.054074 | \n",
" 0.269461 | \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.053810 | \n",
" 0.559905 | \n",
" 0.000000 | \n",
" 0.342799 | \n",
" 0.218967 | \n",
" 5.768170 | \n",
" 0.054762 | \n",
" 0.524990 | \n",
" 0.144702 | \n",
" 0.133410 | \n",
"
\n",
" \n",
"
\n",
"
5 rows × 46 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.040874 0.628784 \n",
"1 NaN False baseline ii ... 0.017289 0.789388 \n",
"2 NaN False baseline ii ... 0.124731 0.555402 \n",
"3 NaN False baseline ii ... 0.101911 0.492250 \n",
"4 NaN False baseline ii ... 0.053810 0.559905 \n",
"\n",
" orientation border_score_threshold gridness_threshold \\\n",
"0 20.224859 0.332548 0.229073 \n",
"1 27.897271 0.354830 0.089333 \n",
"2 28.810794 0.264610 -0.121081 \n",
"3 9.462322 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.451741 \n",
"1 0.223237 0.052594 0.098517 \n",
"2 4.964984 0.027120 0.400770 \n",
"3 0.239996 0.054074 0.269461 \n",
"4 0.524990 0.144702 0.133410 \n",
"\n",
"[5 rows x 46 columns]"
]
},
"execution_count": 7,
"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": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"stimulated\n",
"False 624\n",
"True 660\n",
"Name: action, dtype: int64"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.groupby('stimulated').count()['action']"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"data['unit_day'] = data.apply(lambda x: str(x.unit_idnum) + '_' + x.action.split('-')[1], axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Find all cells with gridness above threshold"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of sessions above threshold 194\n",
"Number of animals 4\n"
]
}
],
"source": [
"query = (\n",
" 'gridness > gridness_threshold and '\n",
" 'information_rate > information_rate_threshold and '\n",
" 'gridness > .2 and '\n",
" 'average_rate < 25'\n",
")\n",
"sessions_above_threshold = data.query(query)\n",
"print(\"Number of sessions above threshold\", len(sessions_above_threshold))\n",
"print(\"Number of animals\", len(sessions_above_threshold.groupby(['entity'])))"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"gridcell_sessions = data[data.unit_day.isin(sessions_above_threshold.unit_day.values)]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of gridcells 139\n",
"Number of gridcell recordings 231\n",
"Number of animals 4\n"
]
}
],
"source": [
"print(\"Number of gridcells\", gridcell_sessions.unit_idnum.nunique())\n",
"print(\"Number of gridcell recordings\", len(gridcell_sessions))\n",
"print(\"Number of animals\", len(gridcell_sessions.groupby(['entity'])))"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of gridcells in baseline i sessions 66\n",
"Number of gridcells in stimulated 11Hz ms sessions 61\n",
"Number of gridcells in baseline ii sessions 56\n",
"Number of gridcells in stimulated 30Hz ms sessions 40\n"
]
}
],
"source": [
"baseline_i = gridcell_sessions.query('baseline and Hz11')\n",
"stimulated_11 = gridcell_sessions.query('frequency==11 and stim_location==\"ms\"')\n",
"\n",
"baseline_ii = gridcell_sessions.query('baseline and Hz30')\n",
"stimulated_30 = gridcell_sessions.query('frequency==30 and stim_location==\"ms\"')\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": 14,
"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": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of gridcells in baseline i sessions 63\n",
"Number of gridcells in stimulated 11Hz ms sessions 58\n",
"Number of gridcells in baseline ii sessions 52\n",
"Number of gridcells in stimulated 30Hz ms sessions 38\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": 16,
"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": 17,
"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",
" 8.904501 | \n",
" 0.521371 | \n",
" 0.618384 | \n",
" 5.934539 | \n",
" 0.234632 | \n",
" 37.437808 | \n",
" 1.246546 | \n",
" 2.404647 | \n",
" 14.717635 | \n",
" 6.346875 | \n",
" 0.211840 | \n",
" 0.478775 | \n",
" 0.135495 | \n",
"
\n",
" \n",
" True | \n",
" 8.392252 | \n",
" 0.440296 | \n",
" 0.655698 | \n",
" 5.977408 | \n",
" 0.215736 | \n",
" 33.716478 | \n",
" 0.964787 | \n",
" 2.223636 | \n",
" 12.936021 | \n",
" 6.122228 | \n",
" 0.197264 | \n",
" 0.455878 | \n",
" 0.104697 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" average_rate gridness sparsity selectivity \\\n",
"stimulated \n",
"False 8.904501 0.521371 0.618384 5.934539 \n",
"True 8.392252 0.440296 0.655698 5.977408 \n",
"\n",
" information_specificity max_rate information_rate \\\n",
"stimulated \n",
"False 0.234632 37.437808 1.246546 \n",
"True 0.215736 33.716478 0.964787 \n",
"\n",
" interspike_interval_cv in_field_mean_rate out_field_mean_rate \\\n",
"stimulated \n",
"False 2.404647 14.717635 6.346875 \n",
"True 2.223636 12.936021 6.122228 \n",
"\n",
" burst_event_ratio specificity speed_score \n",
"stimulated \n",
"False 0.211840 0.478775 0.135495 \n",
"True 0.197264 0.455878 0.104697 "
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gridcell_sessions.groupby('stimulated')[columns].mean()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"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",
" 129.000000 | \n",
" 129.000000 | \n",
" 129.000000 | \n",
" 129.000000 | \n",
" 129.000000 | \n",
" 129.000000 | \n",
" 129.000000 | \n",
" 129.000000 | \n",
" 129.000000 | \n",
" 129.000000 | \n",
" 129.000000 | \n",
" 129.000000 | \n",
" 129.000000 | \n",
"
\n",
" \n",
" mean | \n",
" 8.904501 | \n",
" 0.521371 | \n",
" 0.618384 | \n",
" 5.934539 | \n",
" 0.234632 | \n",
" 37.437808 | \n",
" 1.246546 | \n",
" 2.404647 | \n",
" 14.717635 | \n",
" 6.346875 | \n",
" 0.211840 | \n",
" 0.478775 | \n",
" 0.135495 | \n",
"
\n",
" \n",
" std | \n",
" 7.605598 | \n",
" 0.337607 | \n",
" 0.187934 | \n",
" 3.217366 | \n",
" 0.200726 | \n",
" 16.300117 | \n",
" 0.605971 | \n",
" 0.756407 | \n",
" 9.267522 | \n",
" 6.805499 | \n",
" 0.080143 | \n",
" 0.209531 | \n",
" 0.072831 | \n",
"
\n",
" \n",
" min | \n",
" 0.478349 | \n",
" -0.684924 | \n",
" 0.200066 | \n",
" 1.533216 | \n",
" 0.007807 | \n",
" 3.346027 | \n",
" 0.117638 | \n",
" 1.304387 | \n",
" 0.924066 | \n",
" 0.159076 | \n",
" 0.025000 | \n",
" 0.071681 | \n",
" -0.025629 | \n",
"
\n",
" \n",
" 25% | \n",
" 3.518392 | \n",
" 0.316326 | \n",
" 0.437499 | \n",
" 3.729863 | \n",
" 0.093252 | \n",
" 26.948843 | \n",
" 0.786753 | \n",
" 1.872991 | \n",
" 7.701156 | \n",
" 1.669844 | \n",
" 0.160795 | \n",
" 0.310822 | \n",
" 0.084280 | \n",
"
\n",
" \n",
" 50% | \n",
" 6.456882 | \n",
" 0.529243 | \n",
" 0.642167 | \n",
" 4.794970 | \n",
" 0.180286 | \n",
" 35.064991 | \n",
" 1.156087 | \n",
" 2.221185 | \n",
" 12.212289 | \n",
" 4.314913 | \n",
" 0.210240 | \n",
" 0.436340 | \n",
" 0.128603 | \n",
"
\n",
" \n",
" 75% | \n",
" 12.721755 | \n",
" 0.783682 | \n",
" 0.758097 | \n",
" 7.439464 | \n",
" 0.312487 | \n",
" 44.324873 | \n",
" 1.592948 | \n",
" 2.770624 | \n",
" 20.974026 | \n",
" 9.121505 | \n",
" 0.267568 | \n",
" 0.624834 | \n",
" 0.188948 | \n",
"
\n",
" \n",
" max | \n",
" 59.365312 | \n",
" 1.148979 | \n",
" 0.976157 | \n",
" 18.975875 | \n",
" 1.243307 | \n",
" 90.160158 | \n",
" 3.456796 | \n",
" 5.671362 | \n",
" 66.350754 | \n",
" 56.255544 | \n",
" 0.393306 | \n",
" 1.066391 | \n",
" 0.297548 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" average_rate gridness sparsity selectivity \\\n",
"count 129.000000 129.000000 129.000000 129.000000 \n",
"mean 8.904501 0.521371 0.618384 5.934539 \n",
"std 7.605598 0.337607 0.187934 3.217366 \n",
"min 0.478349 -0.684924 0.200066 1.533216 \n",
"25% 3.518392 0.316326 0.437499 3.729863 \n",
"50% 6.456882 0.529243 0.642167 4.794970 \n",
"75% 12.721755 0.783682 0.758097 7.439464 \n",
"max 59.365312 1.148979 0.976157 18.975875 \n",
"\n",
" information_specificity max_rate information_rate \\\n",
"count 129.000000 129.000000 129.000000 \n",
"mean 0.234632 37.437808 1.246546 \n",
"std 0.200726 16.300117 0.605971 \n",
"min 0.007807 3.346027 0.117638 \n",
"25% 0.093252 26.948843 0.786753 \n",
"50% 0.180286 35.064991 1.156087 \n",
"75% 0.312487 44.324873 1.592948 \n",
"max 1.243307 90.160158 3.456796 \n",
"\n",
" interspike_interval_cv in_field_mean_rate out_field_mean_rate \\\n",
"count 129.000000 129.000000 129.000000 \n",
"mean 2.404647 14.717635 6.346875 \n",
"std 0.756407 9.267522 6.805499 \n",
"min 1.304387 0.924066 0.159076 \n",
"25% 1.872991 7.701156 1.669844 \n",
"50% 2.221185 12.212289 4.314913 \n",
"75% 2.770624 20.974026 9.121505 \n",
"max 5.671362 66.350754 56.255544 \n",
"\n",
" burst_event_ratio specificity speed_score \n",
"count 129.000000 129.000000 129.000000 \n",
"mean 0.211840 0.478775 0.135495 \n",
"std 0.080143 0.209531 0.072831 \n",
"min 0.025000 0.071681 -0.025629 \n",
"25% 0.160795 0.310822 0.084280 \n",
"50% 0.210240 0.436340 0.128603 \n",
"75% 0.267568 0.624834 0.188948 \n",
"max 0.393306 1.066391 0.297548 "
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gridcell_sessions.query('baseline')[columns].describe()"
]
},
{
"cell_type": "code",
"execution_count": 19,
"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",
" 102.000000 | \n",
" 102.000000 | \n",
" 102.000000 | \n",
" 102.000000 | \n",
" 102.000000 | \n",
" 102.000000 | \n",
" 102.000000 | \n",
" 102.000000 | \n",
" 102.000000 | \n",
" 102.000000 | \n",
" 102.000000 | \n",
" 102.000000 | \n",
" 102.000000 | \n",
"
\n",
" \n",
" mean | \n",
" 8.392252 | \n",
" 0.440296 | \n",
" 0.655698 | \n",
" 5.977408 | \n",
" 0.215736 | \n",
" 33.716478 | \n",
" 0.964787 | \n",
" 2.223636 | \n",
" 12.936021 | \n",
" 6.122228 | \n",
" 0.197264 | \n",
" 0.455878 | \n",
" 0.104697 | \n",
"
\n",
" \n",
" std | \n",
" 6.057001 | \n",
" 0.357038 | \n",
" 0.211704 | \n",
" 3.702400 | \n",
" 0.235916 | \n",
" 13.249312 | \n",
" 0.572972 | \n",
" 0.819734 | \n",
" 7.211895 | \n",
" 5.366332 | \n",
" 0.082164 | \n",
" 0.236777 | \n",
" 0.081989 | \n",
"
\n",
" \n",
" min | \n",
" 0.198337 | \n",
" -0.516914 | \n",
" 0.172684 | \n",
" 1.930026 | \n",
" 0.013088 | \n",
" 2.846281 | \n",
" 0.063173 | \n",
" 1.110672 | \n",
" 0.524639 | \n",
" 0.099060 | \n",
" 0.008475 | \n",
" 0.097718 | \n",
" -0.138128 | \n",
"
\n",
" \n",
" 25% | \n",
" 3.579184 | \n",
" 0.265949 | \n",
" 0.458493 | \n",
" 3.044303 | \n",
" 0.066656 | \n",
" 25.555110 | \n",
" 0.564279 | \n",
" 1.620472 | \n",
" 7.555760 | \n",
" 1.733624 | \n",
" 0.146755 | \n",
" 0.248057 | \n",
" 0.056903 | \n",
"
\n",
" \n",
" 50% | \n",
" 6.838561 | \n",
" 0.399053 | \n",
" 0.699561 | \n",
" 4.891855 | \n",
" 0.128562 | \n",
" 31.402558 | \n",
" 0.862413 | \n",
" 2.084020 | \n",
" 11.451560 | \n",
" 4.234871 | \n",
" 0.192948 | \n",
" 0.376143 | \n",
" 0.106314 | \n",
"
\n",
" \n",
" 75% | \n",
" 11.934599 | \n",
" 0.749561 | \n",
" 0.842332 | \n",
" 8.001587 | \n",
" 0.300713 | \n",
" 42.334786 | \n",
" 1.190324 | \n",
" 2.673991 | \n",
" 17.335356 | \n",
" 8.583415 | \n",
" 0.247405 | \n",
" 0.684623 | \n",
" 0.149313 | \n",
"
\n",
" \n",
" max | \n",
" 24.858738 | \n",
" 1.155123 | \n",
" 0.967003 | \n",
" 19.911477 | \n",
" 1.359164 | \n",
" 65.990793 | \n",
" 3.182285 | \n",
" 6.526960 | \n",
" 34.489913 | \n",
" 21.696265 | \n",
" 0.393037 | \n",
" 1.091064 | \n",
" 0.390079 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" average_rate gridness sparsity selectivity \\\n",
"count 102.000000 102.000000 102.000000 102.000000 \n",
"mean 8.392252 0.440296 0.655698 5.977408 \n",
"std 6.057001 0.357038 0.211704 3.702400 \n",
"min 0.198337 -0.516914 0.172684 1.930026 \n",
"25% 3.579184 0.265949 0.458493 3.044303 \n",
"50% 6.838561 0.399053 0.699561 4.891855 \n",
"75% 11.934599 0.749561 0.842332 8.001587 \n",
"max 24.858738 1.155123 0.967003 19.911477 \n",
"\n",
" information_specificity max_rate information_rate \\\n",
"count 102.000000 102.000000 102.000000 \n",
"mean 0.215736 33.716478 0.964787 \n",
"std 0.235916 13.249312 0.572972 \n",
"min 0.013088 2.846281 0.063173 \n",
"25% 0.066656 25.555110 0.564279 \n",
"50% 0.128562 31.402558 0.862413 \n",
"75% 0.300713 42.334786 1.190324 \n",
"max 1.359164 65.990793 3.182285 \n",
"\n",
" interspike_interval_cv in_field_mean_rate out_field_mean_rate \\\n",
"count 102.000000 102.000000 102.000000 \n",
"mean 2.223636 12.936021 6.122228 \n",
"std 0.819734 7.211895 5.366332 \n",
"min 1.110672 0.524639 0.099060 \n",
"25% 1.620472 7.555760 1.733624 \n",
"50% 2.084020 11.451560 4.234871 \n",
"75% 2.673991 17.335356 8.583415 \n",
"max 6.526960 34.489913 21.696265 \n",
"\n",
" burst_event_ratio specificity speed_score \n",
"count 102.000000 102.000000 102.000000 \n",
"mean 0.197264 0.455878 0.104697 \n",
"std 0.082164 0.236777 0.081989 \n",
"min 0.008475 0.097718 -0.138128 \n",
"25% 0.146755 0.248057 0.056903 \n",
"50% 0.192948 0.376143 0.106314 \n",
"75% 0.247405 0.684623 0.149313 \n",
"max 0.393037 1.091064 0.390079 "
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gridcell_sessions.query(\"stimulated\")[columns].describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Create nice table"
]
},
{
"cell_type": "code",
"execution_count": 19,
"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": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Baseline I | \n",
" Stimulated | \n",
" MWU | \n",
" PRS | \n",
"
\n",
" \n",
" \n",
" \n",
" Average rate | \n",
" 8.61 ± 0.75 (71) | \n",
" 8.39 ± 0.60 (102) | \n",
" 3599.00, 0.947 | \n",
" 0.55, 0.764 | \n",
"
\n",
" \n",
" Gridness | \n",
" 0.51 ± 0.04 (71) | \n",
" 0.44 ± 0.04 (102) | \n",
" 3208.00, 0.203 | \n",
" 0.13, 0.141 | \n",
"
\n",
" \n",
" Sparsity | \n",
" 0.61 ± 0.02 (71) | \n",
" 0.66 ± 0.02 (102) | \n",
" 4170.00, 0.091 | \n",
" 0.06, 0.179 | \n",
"
\n",
" \n",
" Selectivity | \n",
" 5.91 ± 0.37 (71) | \n",
" 5.98 ± 0.37 (102) | \n",
" 3460.00, 0.620 | \n",
" 0.10, 0.869 | \n",
"
\n",
" \n",
" Information specificity | \n",
" 0.25 ± 0.03 (71) | \n",
" 0.22 ± 0.02 (102) | \n",
" 2944.00, 0.037 | \n",
" 0.05, 0.033 | \n",
"
\n",
" \n",
" Max rate | \n",
" 36.55 ± 1.78 (71) | \n",
" 33.72 ± 1.31 (102) | \n",
" 3291.00, 0.309 | \n",
" 3.19, 0.195 | \n",
"
\n",
" \n",
" Information rate | \n",
" 1.30 ± 0.07 (71) | \n",
" 0.96 ± 0.06 (102) | \n",
" 2385.00, 0.000 | \n",
" 0.32, 0.000 | \n",
"
\n",
" \n",
" Interspike interval cv | \n",
" 2.42 ± 0.10 (71) | \n",
" 2.22 ± 0.08 (102) | \n",
" 3034.00, 0.070 | \n",
" 0.12, 0.392 | \n",
"
\n",
" \n",
" In-field mean rate | \n",
" 14.43 ± 1.00 (71) | \n",
" 12.94 ± 0.71 (102) | \n",
" 3368.00, 0.436 | \n",
" 0.39, 0.812 | \n",
"
\n",
" \n",
" Out-field mean rate | \n",
" 6.05 ± 0.62 (71) | \n",
" 6.12 ± 0.53 (102) | \n",
" 3600.00, 0.950 | \n",
" 0.08, 0.946 | \n",
"
\n",
" \n",
" Burst event ratio | \n",
" 0.22 ± 0.01 (71) | \n",
" 0.20 ± 0.01 (102) | \n",
" 3090.00, 0.102 | \n",
" 0.02, 0.124 | \n",
"
\n",
" \n",
" Specificity | \n",
" 0.48 ± 0.03 (71) | \n",
" 0.46 ± 0.02 (102) | \n",
" 3268.00, 0.277 | \n",
" 0.06, 0.356 | \n",
"
\n",
" \n",
" Speed score | \n",
" 0.14 ± 0.01 (71) | \n",
" 0.10 ± 0.01 (102) | \n",
" 2546.00, 0.001 | \n",
" 0.05, 0.000 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Baseline I Stimulated \\\n",
"Average rate 8.61 ± 0.75 (71) 8.39 ± 0.60 (102) \n",
"Gridness 0.51 ± 0.04 (71) 0.44 ± 0.04 (102) \n",
"Sparsity 0.61 ± 0.02 (71) 0.66 ± 0.02 (102) \n",
"Selectivity 5.91 ± 0.37 (71) 5.98 ± 0.37 (102) \n",
"Information specificity 0.25 ± 0.03 (71) 0.22 ± 0.02 (102) \n",
"Max rate 36.55 ± 1.78 (71) 33.72 ± 1.31 (102) \n",
"Information rate 1.30 ± 0.07 (71) 0.96 ± 0.06 (102) \n",
"Interspike interval cv 2.42 ± 0.10 (71) 2.22 ± 0.08 (102) \n",
"In-field mean rate 14.43 ± 1.00 (71) 12.94 ± 0.71 (102) \n",
"Out-field mean rate 6.05 ± 0.62 (71) 6.12 ± 0.53 (102) \n",
"Burst event ratio 0.22 ± 0.01 (71) 0.20 ± 0.01 (102) \n",
"Specificity 0.48 ± 0.03 (71) 0.46 ± 0.02 (102) \n",
"Speed score 0.14 ± 0.01 (71) 0.10 ± 0.01 (102) \n",
"\n",
" MWU PRS \n",
"Average rate 3599.00, 0.947 0.55, 0.764 \n",
"Gridness 3208.00, 0.203 0.13, 0.141 \n",
"Sparsity 4170.00, 0.091 0.06, 0.179 \n",
"Selectivity 3460.00, 0.620 0.10, 0.869 \n",
"Information specificity 2944.00, 0.037 0.05, 0.033 \n",
"Max rate 3291.00, 0.309 3.19, 0.195 \n",
"Information rate 2385.00, 0.000 0.32, 0.000 \n",
"Interspike interval cv 3034.00, 0.070 0.12, 0.392 \n",
"In-field mean rate 3368.00, 0.436 0.39, 0.812 \n",
"Out-field mean rate 3600.00, 0.950 0.08, 0.946 \n",
"Burst event ratio 3090.00, 0.102 0.02, 0.124 \n",
"Specificity 3268.00, 0.277 0.06, 0.356 \n",
"Speed score 2546.00, 0.001 0.05, 0.000 "
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"_stim_data = gridcell_sessions.query('stimulated')\n",
"_base_data = gridcell_sessions.query('baseline and i')\n",
"\n",
"result = pd.DataFrame()\n",
"\n",
"result['Baseline I'] = _base_data[columns].agg(summarize)\n",
"result['Stimulated'] = _stim_data[columns].agg(summarize)\n",
"\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": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Baseline I | \n",
" 11 Hz | \n",
" MWU | \n",
" PRS | \n",
"
\n",
" \n",
" \n",
" \n",
" Average rate | \n",
" 8.96 ± 0.80 (63) | \n",
" 8.80 ± 0.85 (58) | \n",
" 1781.00, 0.813 | \n",
" 0.04, 0.972 | \n",
"
\n",
" \n",
" Gridness | \n",
" 0.53 ± 0.05 (63) | \n",
" 0.41 ± 0.05 (58) | \n",
" 1459.00, 0.057 | \n",
" 0.21, 0.043 | \n",
"
\n",
" \n",
" Sparsity | \n",
" 0.63 ± 0.02 (63) | \n",
" 0.67 ± 0.03 (58) | \n",
" 2138.00, 0.107 | \n",
" 0.07, 0.119 | \n",
"
\n",
" \n",
" Selectivity | \n",
" 5.76 ± 0.40 (63) | \n",
" 5.69 ± 0.50 (58) | \n",
" 1687.00, 0.469 | \n",
" 0.00, 0.982 | \n",
"
\n",
" \n",
" Information specificity | \n",
" 0.24 ± 0.03 (63) | \n",
" 0.21 ± 0.03 (58) | \n",
" 1452.00, 0.052 | \n",
" 0.06, 0.032 | \n",
"
\n",
" \n",
" Max rate | \n",
" 37.39 ± 1.91 (63) | \n",
" 33.11 ± 1.85 (58) | \n",
" 1538.00, 0.134 | \n",
" 4.06, 0.122 | \n",
"
\n",
" \n",
" Information rate | \n",
" 1.31 ± 0.08 (63) | \n",
" 0.94 ± 0.08 (58) | \n",
" 1143.00, 0.000 | \n",
" 0.32, 0.003 | \n",
"
\n",
" \n",
" Interspike interval cv | \n",
" 2.39 ± 0.10 (63) | \n",
" 2.19 ± 0.12 (58) | \n",
" 1462.00, 0.059 | \n",
" 0.18, 0.135 | \n",
"
\n",
" \n",
" In-field mean rate | \n",
" 14.88 ± 1.05 (63) | \n",
" 13.27 ± 1.04 (58) | \n",
" 1633.00, 0.315 | \n",
" 0.77, 0.688 | \n",
"
\n",
" \n",
" Out-field mean rate | \n",
" 6.37 ± 0.67 (63) | \n",
" 6.57 ± 0.77 (58) | \n",
" 1795.00, 0.870 | \n",
" 0.47, 0.724 | \n",
"
\n",
" \n",
" Burst event ratio | \n",
" 0.22 ± 0.01 (63) | \n",
" 0.22 ± 0.01 (58) | \n",
" 1897.00, 0.718 | \n",
" 0.00, 0.824 | \n",
"
\n",
" \n",
" Specificity | \n",
" 0.47 ± 0.03 (63) | \n",
" 0.44 ± 0.03 (58) | \n",
" 1605.00, 0.250 | \n",
" 0.06, 0.398 | \n",
"
\n",
" \n",
" Speed score | \n",
" 0.14 ± 0.01 (63) | \n",
" 0.11 ± 0.01 (58) | \n",
" 1378.00, 0.020 | \n",
" 0.04, 0.023 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Baseline I 11 Hz MWU \\\n",
"Average rate 8.96 ± 0.80 (63) 8.80 ± 0.85 (58) 1781.00, 0.813 \n",
"Gridness 0.53 ± 0.05 (63) 0.41 ± 0.05 (58) 1459.00, 0.057 \n",
"Sparsity 0.63 ± 0.02 (63) 0.67 ± 0.03 (58) 2138.00, 0.107 \n",
"Selectivity 5.76 ± 0.40 (63) 5.69 ± 0.50 (58) 1687.00, 0.469 \n",
"Information specificity 0.24 ± 0.03 (63) 0.21 ± 0.03 (58) 1452.00, 0.052 \n",
"Max rate 37.39 ± 1.91 (63) 33.11 ± 1.85 (58) 1538.00, 0.134 \n",
"Information rate 1.31 ± 0.08 (63) 0.94 ± 0.08 (58) 1143.00, 0.000 \n",
"Interspike interval cv 2.39 ± 0.10 (63) 2.19 ± 0.12 (58) 1462.00, 0.059 \n",
"In-field mean rate 14.88 ± 1.05 (63) 13.27 ± 1.04 (58) 1633.00, 0.315 \n",
"Out-field mean rate 6.37 ± 0.67 (63) 6.57 ± 0.77 (58) 1795.00, 0.870 \n",
"Burst event ratio 0.22 ± 0.01 (63) 0.22 ± 0.01 (58) 1897.00, 0.718 \n",
"Specificity 0.47 ± 0.03 (63) 0.44 ± 0.03 (58) 1605.00, 0.250 \n",
"Speed score 0.14 ± 0.01 (63) 0.11 ± 0.01 (58) 1378.00, 0.020 \n",
"\n",
" PRS \n",
"Average rate 0.04, 0.972 \n",
"Gridness 0.21, 0.043 \n",
"Sparsity 0.07, 0.119 \n",
"Selectivity 0.00, 0.982 \n",
"Information specificity 0.06, 0.032 \n",
"Max rate 4.06, 0.122 \n",
"Information rate 0.32, 0.003 \n",
"Interspike interval cv 0.18, 0.135 \n",
"In-field mean rate 0.77, 0.688 \n",
"Out-field mean rate 0.47, 0.724 \n",
"Burst event ratio 0.00, 0.824 \n",
"Specificity 0.06, 0.398 \n",
"Speed score 0.04, 0.023 "
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"_stim_data = stimulated_11\n",
"_base_data = baseline_i\n",
"\n",
"result = pd.DataFrame()\n",
"\n",
"result['Baseline I'] = _base_data[columns].agg(summarize)\n",
"result['11 Hz'] = _stim_data[columns].agg(summarize)\n",
"\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": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Baseline II | \n",
" 30 Hz | \n",
" MWU | \n",
" PRS | \n",
"
\n",
" \n",
" \n",
" \n",
" Average rate | \n",
" 8.29 ± 0.87 (52) | \n",
" 7.61 ± 0.87 (38) | \n",
" 958.00, 0.810 | \n",
" 0.27, 0.800 | \n",
"
\n",
" \n",
" Gridness | \n",
" 0.54 ± 0.04 (52) | \n",
" 0.48 ± 0.06 (38) | \n",
" 914.00, 0.548 | \n",
" 0.04, 0.601 | \n",
"
\n",
" \n",
" Sparsity | \n",
" 0.63 ± 0.03 (52) | \n",
" 0.64 ± 0.03 (38) | \n",
" 1040.00, 0.674 | \n",
" 0.06, 0.393 | \n",
"
\n",
" \n",
" Selectivity | \n",
" 5.96 ± 0.46 (52) | \n",
" 6.42 ± 0.60 (38) | \n",
" 1019.00, 0.803 | \n",
" 0.20, 0.847 | \n",
"
\n",
" \n",
" Information specificity | \n",
" 0.21 ± 0.02 (52) | \n",
" 0.22 ± 0.03 (38) | \n",
" 950.00, 0.759 | \n",
" 0.04, 0.502 | \n",
"
\n",
" \n",
" Max rate | \n",
" 36.27 ± 2.34 (52) | \n",
" 33.49 ± 1.89 (38) | \n",
" 943.00, 0.716 | \n",
" 2.90, 0.555 | \n",
"
\n",
" \n",
" Information rate | \n",
" 1.13 ± 0.08 (52) | \n",
" 0.98 ± 0.09 (38) | \n",
" 827.00, 0.190 | \n",
" 0.07, 0.334 | \n",
"
\n",
" \n",
" Interspike interval cv | \n",
" 2.37 ± 0.09 (52) | \n",
" 2.23 ± 0.11 (38) | \n",
" 869.00, 0.333 | \n",
" 0.17, 0.476 | \n",
"
\n",
" \n",
" In-field mean rate | \n",
" 13.79 ± 1.12 (52) | \n",
" 12.21 ± 0.98 (38) | \n",
" 912.00, 0.537 | \n",
" 1.06, 0.455 | \n",
"
\n",
" \n",
" Out-field mean rate | \n",
" 5.80 ± 0.72 (52) | \n",
" 5.36 ± 0.73 (38) | \n",
" 959.00, 0.816 | \n",
" 0.13, 0.912 | \n",
"
\n",
" \n",
" Burst event ratio | \n",
" 0.20 ± 0.01 (52) | \n",
" 0.16 ± 0.01 (38) | \n",
" 676.00, 0.011 | \n",
" 0.05, 0.006 | \n",
"
\n",
" \n",
" Specificity | \n",
" 0.47 ± 0.03 (52) | \n",
" 0.48 ± 0.04 (38) | \n",
" 976.00, 0.925 | \n",
" 0.00, 0.987 | \n",
"
\n",
" \n",
" Speed score | \n",
" 0.12 ± 0.01 (52) | \n",
" 0.11 ± 0.01 (38) | \n",
" 784.00, 0.096 | \n",
" 0.01, 0.230 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Baseline II 30 Hz MWU \\\n",
"Average rate 8.29 ± 0.87 (52) 7.61 ± 0.87 (38) 958.00, 0.810 \n",
"Gridness 0.54 ± 0.04 (52) 0.48 ± 0.06 (38) 914.00, 0.548 \n",
"Sparsity 0.63 ± 0.03 (52) 0.64 ± 0.03 (38) 1040.00, 0.674 \n",
"Selectivity 5.96 ± 0.46 (52) 6.42 ± 0.60 (38) 1019.00, 0.803 \n",
"Information specificity 0.21 ± 0.02 (52) 0.22 ± 0.03 (38) 950.00, 0.759 \n",
"Max rate 36.27 ± 2.34 (52) 33.49 ± 1.89 (38) 943.00, 0.716 \n",
"Information rate 1.13 ± 0.08 (52) 0.98 ± 0.09 (38) 827.00, 0.190 \n",
"Interspike interval cv 2.37 ± 0.09 (52) 2.23 ± 0.11 (38) 869.00, 0.333 \n",
"In-field mean rate 13.79 ± 1.12 (52) 12.21 ± 0.98 (38) 912.00, 0.537 \n",
"Out-field mean rate 5.80 ± 0.72 (52) 5.36 ± 0.73 (38) 959.00, 0.816 \n",
"Burst event ratio 0.20 ± 0.01 (52) 0.16 ± 0.01 (38) 676.00, 0.011 \n",
"Specificity 0.47 ± 0.03 (52) 0.48 ± 0.04 (38) 976.00, 0.925 \n",
"Speed score 0.12 ± 0.01 (52) 0.11 ± 0.01 (38) 784.00, 0.096 \n",
"\n",
" PRS \n",
"Average rate 0.27, 0.800 \n",
"Gridness 0.04, 0.601 \n",
"Sparsity 0.06, 0.393 \n",
"Selectivity 0.20, 0.847 \n",
"Information specificity 0.04, 0.502 \n",
"Max rate 2.90, 0.555 \n",
"Information rate 0.07, 0.334 \n",
"Interspike interval cv 0.17, 0.476 \n",
"In-field mean rate 1.06, 0.455 \n",
"Out-field mean rate 0.13, 0.912 \n",
"Burst event ratio 0.05, 0.006 \n",
"Specificity 0.00, 0.987 \n",
"Speed score 0.01, 0.230 "
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"_stim_data = stimulated_30\n",
"_base_data = baseline_ii\n",
"\n",
"result = pd.DataFrame()\n",
"\n",
"result['Baseline II'] = _base_data[columns].agg(summarize)\n",
"result['30 Hz'] = _stim_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": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Baseline I | \n",
" 30 Hz | \n",
" MWU | \n",
" PRS | \n",
"
\n",
" \n",
" \n",
" \n",
" Average rate | \n",
" 8.96 ± 0.80 (63) | \n",
" 7.61 ± 0.87 (38) | \n",
" 1081.00, 0.418 | \n",
" 0.27, 0.806 | \n",
"
\n",
" \n",
" Gridness | \n",
" 0.53 ± 0.05 (63) | \n",
" 0.48 ± 0.06 (38) | \n",
" 1094.00, 0.472 | \n",
" 0.08, 0.361 | \n",
"
\n",
" \n",
" Sparsity | \n",
" 0.63 ± 0.02 (63) | \n",
" 0.64 ± 0.03 (38) | \n",
" 1261.00, 0.656 | \n",
" 0.03, 0.638 | \n",
"
\n",
" \n",
" Selectivity | \n",
" 5.76 ± 0.40 (63) | \n",
" 6.42 ± 0.60 (38) | \n",
" 1276.00, 0.582 | \n",
" 0.86, 0.293 | \n",
"
\n",
" \n",
" Information specificity | \n",
" 0.24 ± 0.03 (63) | \n",
" 0.22 ± 0.03 (38) | \n",
" 1076.00, 0.398 | \n",
" 0.05, 0.165 | \n",
"
\n",
" \n",
" Max rate | \n",
" 37.39 ± 1.91 (63) | \n",
" 33.49 ± 1.89 (38) | \n",
" 1027.00, 0.235 | \n",
" 3.99, 0.188 | \n",
"
\n",
" \n",
" Information rate | \n",
" 1.31 ± 0.08 (63) | \n",
" 0.98 ± 0.09 (38) | \n",
" 797.00, 0.005 | \n",
" 0.32, 0.047 | \n",
"
\n",
" \n",
" Interspike interval cv | \n",
" 2.39 ± 0.10 (63) | \n",
" 2.23 ± 0.11 (38) | \n",
" 1100.00, 0.499 | \n",
" 0.01, 0.993 | \n",
"
\n",
" \n",
" In-field mean rate | \n",
" 14.88 ± 1.05 (63) | \n",
" 12.21 ± 0.98 (38) | \n",
" 1018.00, 0.211 | \n",
" 1.74, 0.276 | \n",
"
\n",
" \n",
" Out-field mean rate | \n",
" 6.37 ± 0.67 (63) | \n",
" 5.36 ± 0.73 (38) | \n",
" 1079.00, 0.410 | \n",
" 0.51, 0.631 | \n",
"
\n",
" \n",
" Burst event ratio | \n",
" 0.22 ± 0.01 (63) | \n",
" 0.16 ± 0.01 (38) | \n",
" 675.00, 0.000 | \n",
" 0.05, 0.003 | \n",
"
\n",
" \n",
" Specificity | \n",
" 0.47 ± 0.03 (63) | \n",
" 0.48 ± 0.04 (38) | \n",
" 1206.00, 0.952 | \n",
" 0.01, 0.873 | \n",
"
\n",
" \n",
" Speed score | \n",
" 0.14 ± 0.01 (63) | \n",
" 0.11 ± 0.01 (38) | \n",
" 835.00, 0.011 | \n",
" 0.06, 0.004 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Baseline I 30 Hz MWU \\\n",
"Average rate 8.96 ± 0.80 (63) 7.61 ± 0.87 (38) 1081.00, 0.418 \n",
"Gridness 0.53 ± 0.05 (63) 0.48 ± 0.06 (38) 1094.00, 0.472 \n",
"Sparsity 0.63 ± 0.02 (63) 0.64 ± 0.03 (38) 1261.00, 0.656 \n",
"Selectivity 5.76 ± 0.40 (63) 6.42 ± 0.60 (38) 1276.00, 0.582 \n",
"Information specificity 0.24 ± 0.03 (63) 0.22 ± 0.03 (38) 1076.00, 0.398 \n",
"Max rate 37.39 ± 1.91 (63) 33.49 ± 1.89 (38) 1027.00, 0.235 \n",
"Information rate 1.31 ± 0.08 (63) 0.98 ± 0.09 (38) 797.00, 0.005 \n",
"Interspike interval cv 2.39 ± 0.10 (63) 2.23 ± 0.11 (38) 1100.00, 0.499 \n",
"In-field mean rate 14.88 ± 1.05 (63) 12.21 ± 0.98 (38) 1018.00, 0.211 \n",
"Out-field mean rate 6.37 ± 0.67 (63) 5.36 ± 0.73 (38) 1079.00, 0.410 \n",
"Burst event ratio 0.22 ± 0.01 (63) 0.16 ± 0.01 (38) 675.00, 0.000 \n",
"Specificity 0.47 ± 0.03 (63) 0.48 ± 0.04 (38) 1206.00, 0.952 \n",
"Speed score 0.14 ± 0.01 (63) 0.11 ± 0.01 (38) 835.00, 0.011 \n",
"\n",
" PRS \n",
"Average rate 0.27, 0.806 \n",
"Gridness 0.08, 0.361 \n",
"Sparsity 0.03, 0.638 \n",
"Selectivity 0.86, 0.293 \n",
"Information specificity 0.05, 0.165 \n",
"Max rate 3.99, 0.188 \n",
"Information rate 0.32, 0.047 \n",
"Interspike interval cv 0.01, 0.993 \n",
"In-field mean rate 1.74, 0.276 \n",
"Out-field mean rate 0.51, 0.631 \n",
"Burst event ratio 0.05, 0.003 \n",
"Specificity 0.01, 0.873 \n",
"Speed score 0.06, 0.004 "
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"_stim_data = stimulated_30\n",
"_base_data = baseline_i\n",
"\n",
"result = pd.DataFrame()\n",
"\n",
"result['Baseline I'] = _base_data[columns].agg(summarize)\n",
"result['30 Hz'] = _stim_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_b_i_30.tex\")\n",
"result.to_latex(output_path / \"statistics\" / \"statistics_b_i_30.csv\")\n",
"result"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 11 Hz | \n",
" 30 Hz | \n",
" MWU | \n",
" PRS | \n",
"
\n",
" \n",
" \n",
" \n",
" Average rate | \n",
" 8.80 ± 0.85 (58) | \n",
" 7.61 ± 0.87 (38) | \n",
" 1010.00, 0.493 | \n",
" 0.23, 0.893 | \n",
"
\n",
" \n",
" Gridness | \n",
" 0.41 ± 0.05 (58) | \n",
" 0.48 ± 0.06 (38) | \n",
" 1259.00, 0.241 | \n",
" 0.13, 0.094 | \n",
"
\n",
" \n",
" Sparsity | \n",
" 0.67 ± 0.03 (58) | \n",
" 0.64 ± 0.03 (38) | \n",
" 1002.00, 0.456 | \n",
" 0.04, 0.561 | \n",
"
\n",
" \n",
" Selectivity | \n",
" 5.69 ± 0.50 (58) | \n",
" 6.42 ± 0.60 (38) | \n",
" 1260.00, 0.238 | \n",
" 0.85, 0.335 | \n",
"
\n",
" \n",
" Information specificity | \n",
" 0.21 ± 0.03 (58) | \n",
" 0.22 ± 0.03 (38) | \n",
" 1231.00, 0.336 | \n",
" 0.01, 0.732 | \n",
"
\n",
" \n",
" Max rate | \n",
" 33.11 ± 1.85 (58) | \n",
" 33.49 ± 1.89 (38) | \n",
" 1136.00, 0.802 | \n",
" 0.07, 0.993 | \n",
"
\n",
" \n",
" Information rate | \n",
" 0.94 ± 0.08 (58) | \n",
" 0.98 ± 0.09 (38) | \n",
" 1171.00, 0.608 | \n",
" 0.01, 0.789 | \n",
"
\n",
" \n",
" Interspike interval cv | \n",
" 2.19 ± 0.12 (58) | \n",
" 2.23 ± 0.11 (38) | \n",
" 1228.00, 0.347 | \n",
" 0.17, 0.328 | \n",
"
\n",
" \n",
" In-field mean rate | \n",
" 13.27 ± 1.04 (58) | \n",
" 12.21 ± 0.98 (38) | \n",
" 1058.00, 0.744 | \n",
" 0.97, 0.637 | \n",
"
\n",
" \n",
" Out-field mean rate | \n",
" 6.57 ± 0.77 (58) | \n",
" 5.36 ± 0.73 (38) | \n",
" 1019.00, 0.537 | \n",
" 0.04, 0.958 | \n",
"
\n",
" \n",
" Burst event ratio | \n",
" 0.22 ± 0.01 (58) | \n",
" 0.16 ± 0.01 (38) | \n",
" 552.00, 0.000 | \n",
" 0.06, 0.000 | \n",
"
\n",
" \n",
" Specificity | \n",
" 0.44 ± 0.03 (58) | \n",
" 0.48 ± 0.04 (38) | \n",
" 1233.00, 0.328 | \n",
" 0.07, 0.380 | \n",
"
\n",
" \n",
" Speed score | \n",
" 0.11 ± 0.01 (58) | \n",
" 0.11 ± 0.01 (38) | \n",
" 1022.00, 0.551 | \n",
" 0.02, 0.144 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 11 Hz 30 Hz MWU \\\n",
"Average rate 8.80 ± 0.85 (58) 7.61 ± 0.87 (38) 1010.00, 0.493 \n",
"Gridness 0.41 ± 0.05 (58) 0.48 ± 0.06 (38) 1259.00, 0.241 \n",
"Sparsity 0.67 ± 0.03 (58) 0.64 ± 0.03 (38) 1002.00, 0.456 \n",
"Selectivity 5.69 ± 0.50 (58) 6.42 ± 0.60 (38) 1260.00, 0.238 \n",
"Information specificity 0.21 ± 0.03 (58) 0.22 ± 0.03 (38) 1231.00, 0.336 \n",
"Max rate 33.11 ± 1.85 (58) 33.49 ± 1.89 (38) 1136.00, 0.802 \n",
"Information rate 0.94 ± 0.08 (58) 0.98 ± 0.09 (38) 1171.00, 0.608 \n",
"Interspike interval cv 2.19 ± 0.12 (58) 2.23 ± 0.11 (38) 1228.00, 0.347 \n",
"In-field mean rate 13.27 ± 1.04 (58) 12.21 ± 0.98 (38) 1058.00, 0.744 \n",
"Out-field mean rate 6.57 ± 0.77 (58) 5.36 ± 0.73 (38) 1019.00, 0.537 \n",
"Burst event ratio 0.22 ± 0.01 (58) 0.16 ± 0.01 (38) 552.00, 0.000 \n",
"Specificity 0.44 ± 0.03 (58) 0.48 ± 0.04 (38) 1233.00, 0.328 \n",
"Speed score 0.11 ± 0.01 (58) 0.11 ± 0.01 (38) 1022.00, 0.551 \n",
"\n",
" PRS \n",
"Average rate 0.23, 0.893 \n",
"Gridness 0.13, 0.094 \n",
"Sparsity 0.04, 0.561 \n",
"Selectivity 0.85, 0.335 \n",
"Information specificity 0.01, 0.732 \n",
"Max rate 0.07, 0.993 \n",
"Information rate 0.01, 0.789 \n",
"Interspike interval cv 0.17, 0.328 \n",
"In-field mean rate 0.97, 0.637 \n",
"Out-field mean rate 0.04, 0.958 \n",
"Burst event ratio 0.06, 0.000 \n",
"Specificity 0.07, 0.380 \n",
"Speed score 0.02, 0.144 "
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"_stim_data = stimulated_30\n",
"_base_data = stimulated_11\n",
"\n",
"result = pd.DataFrame()\n",
"\n",
"result['11 Hz'] = _base_data[columns].agg(summarize)\n",
"result['30 Hz'] = _stim_data[columns].agg(summarize)\n",
"\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": 25,
"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",
" 8.96 ± 0.80 (63) | \n",
" 8.29 ± 0.87 (52) | \n",
" 1756.00, 0.509 | \n",
" 0.55, 0.674 | \n",
"
\n",
" \n",
" Gridness | \n",
" 0.53 ± 0.05 (63) | \n",
" 0.54 ± 0.04 (52) | \n",
" 1664.00, 0.886 | \n",
" 0.04, 0.550 | \n",
"
\n",
" \n",
" Sparsity | \n",
" 0.63 ± 0.02 (63) | \n",
" 0.63 ± 0.03 (52) | \n",
" 1652.00, 0.940 | \n",
" 0.03, 0.648 | \n",
"
\n",
" \n",
" Selectivity | \n",
" 5.76 ± 0.40 (63) | \n",
" 5.96 ± 0.46 (52) | \n",
" 1542.00, 0.592 | \n",
" 0.66, 0.360 | \n",
"
\n",
" \n",
" Information specificity | \n",
" 0.24 ± 0.03 (63) | \n",
" 0.21 ± 0.02 (52) | \n",
" 1718.00, 0.655 | \n",
" 0.01, 0.812 | \n",
"
\n",
" \n",
" Max rate | \n",
" 37.39 ± 1.91 (63) | \n",
" 36.27 ± 2.34 (52) | \n",
" 1757.00, 0.505 | \n",
" 1.09, 0.610 | \n",
"
\n",
" \n",
" Information rate | \n",
" 1.31 ± 0.08 (63) | \n",
" 1.13 ± 0.08 (52) | \n",
" 1929.00, 0.103 | \n",
" 0.25, 0.140 | \n",
"
\n",
" \n",
" Interspike interval cv | \n",
" 2.39 ± 0.10 (63) | \n",
" 2.37 ± 0.09 (52) | \n",
" 1572.00, 0.713 | \n",
" 0.16, 0.479 | \n",
"
\n",
" \n",
" In-field mean rate | \n",
" 14.88 ± 1.05 (63) | \n",
" 13.79 ± 1.12 (52) | \n",
" 1763.00, 0.484 | \n",
" 0.68, 0.690 | \n",
"
\n",
" \n",
" Out-field mean rate | \n",
" 6.37 ± 0.67 (63) | \n",
" 5.80 ± 0.72 (52) | \n",
" 1737.00, 0.580 | \n",
" 0.38, 0.586 | \n",
"
\n",
" \n",
" Burst event ratio | \n",
" 0.22 ± 0.01 (63) | \n",
" 0.20 ± 0.01 (52) | \n",
" 1834.00, 0.272 | \n",
" 0.01, 0.681 | \n",
"
\n",
" \n",
" Specificity | \n",
" 0.47 ± 0.03 (63) | \n",
" 0.47 ± 0.03 (52) | \n",
" 1588.00, 0.781 | \n",
" 0.01, 0.765 | \n",
"
\n",
" \n",
" Speed score | \n",
" 0.14 ± 0.01 (63) | \n",
" 0.12 ± 0.01 (52) | \n",
" 1943.00, 0.087 | \n",
" 0.04, 0.017 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Baseline I Baseline II MWU \\\n",
"Average rate 8.96 ± 0.80 (63) 8.29 ± 0.87 (52) 1756.00, 0.509 \n",
"Gridness 0.53 ± 0.05 (63) 0.54 ± 0.04 (52) 1664.00, 0.886 \n",
"Sparsity 0.63 ± 0.02 (63) 0.63 ± 0.03 (52) 1652.00, 0.940 \n",
"Selectivity 5.76 ± 0.40 (63) 5.96 ± 0.46 (52) 1542.00, 0.592 \n",
"Information specificity 0.24 ± 0.03 (63) 0.21 ± 0.02 (52) 1718.00, 0.655 \n",
"Max rate 37.39 ± 1.91 (63) 36.27 ± 2.34 (52) 1757.00, 0.505 \n",
"Information rate 1.31 ± 0.08 (63) 1.13 ± 0.08 (52) 1929.00, 0.103 \n",
"Interspike interval cv 2.39 ± 0.10 (63) 2.37 ± 0.09 (52) 1572.00, 0.713 \n",
"In-field mean rate 14.88 ± 1.05 (63) 13.79 ± 1.12 (52) 1763.00, 0.484 \n",
"Out-field mean rate 6.37 ± 0.67 (63) 5.80 ± 0.72 (52) 1737.00, 0.580 \n",
"Burst event ratio 0.22 ± 0.01 (63) 0.20 ± 0.01 (52) 1834.00, 0.272 \n",
"Specificity 0.47 ± 0.03 (63) 0.47 ± 0.03 (52) 1588.00, 0.781 \n",
"Speed score 0.14 ± 0.01 (63) 0.12 ± 0.01 (52) 1943.00, 0.087 \n",
"\n",
" PRS \n",
"Average rate 0.55, 0.674 \n",
"Gridness 0.04, 0.550 \n",
"Sparsity 0.03, 0.648 \n",
"Selectivity 0.66, 0.360 \n",
"Information specificity 0.01, 0.812 \n",
"Max rate 1.09, 0.610 \n",
"Information rate 0.25, 0.140 \n",
"Interspike interval cv 0.16, 0.479 \n",
"In-field mean rate 0.68, 0.690 \n",
"Out-field mean rate 0.38, 0.586 \n",
"Burst event ratio 0.01, 0.681 \n",
"Specificity 0.01, 0.765 \n",
"Speed score 0.04, 0.017 "
]
},
"execution_count": 25,
"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": 20,
"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": 21,
"metadata": {},
"outputs": [],
"source": [
"# colors = ['#1b9e77','#d95f02','#7570b3','#e7298a']\n",
"# labels = ['Baseline I', '11 Hz', 'Baseline II', '30 Hz']\n",
"\n",
"stuff = {\n",
" '': {\n",
" 'base': gridcell_sessions.query('baseline and i'),\n",
" 'stim': gridcell_sessions.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",
"}\n",
"\n",
"label = {\n",
" '': ['Baseline I ', ' Stimulated'],\n",
" '_11': ['Baseline I ', ' 11 Hz'],\n",
" '_30': ['Baseline II ', ' 30 Hz']\n",
"}\n",
"\n",
"colors = {\n",
" '': ['#1b9e77', '#b2182b'],\n",
" '_11': ['#1b9e77', '#d95f02'],\n",
" '_30': ['#7570b3', '#e7298a']\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Information rate"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"U-test: U value 4298.0 p value 0.036830785214103115\n",
"_11\n",
"U-test: U value 2202.0 p value 0.05201320820170774\n",
"_30\n",
"U-test: U value 1026.0 p value 0.7593436297175663\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"