This commit is contained in:
weygoldt 2023-01-25 20:47:02 +01:00
parent bbff7fd80c
commit 1de3e944c5
6 changed files with 168 additions and 126 deletions

View File

@ -18,47 +18,62 @@ logger = makeLogger(__name__)
ps = PlotStyle() ps = PlotStyle()
def jackknife(data, nresamples, subsetsize, kde_time, kernel_width): def bootstrap(data, nresamples, kde_time, kernel_width, event_times, time_before, time_after):
if len(data) == 0: bootstrapped_kdes = []
return [] data = data[data <= 3*60*60] # only night time
jackknifed_kdes = [] # diff_data = np.diff(np.sort(data), prepend=0)
data = np.sort(data) # if len(data) != 0:
subsetsize = int(np.round(len(data)*subsetsize)) # mean_chirprate = (len(data) - 1) / (data[-1] - data[0])
for n in range(nresamples): for i in tqdm(range(nresamples)):
subset = np.random.choice(data, subsetsize, replace=False) # np.random.shuffle(diff_data)
subset_kde = acausal_kde1d(subset, time=kde_time, width=kernel_width)
jackknifed_kdes.append(subset_kde)
return jackknifed_kdes # bootstrapped_data = np.cumsum(diff_data)
bootstrapped_data = data + np.random.randn(len(data)) * 10
bootstrap_data_centered = center_chirps(
bootstrapped_data, event_times, time_before, time_after)
def bootstrap(data, nresamples, kde_time, kernel_width, event_times, time_before, time_after): bootstrapped_kde = acausal_kde1d(
bootstrap_data_centered, time=kde_time, width=kernel_width)
bootstrapped_kdes = [] # bootstrapped_kdes = list(np.asarray(
data = data[data <= 3*60*60] # only night time # bootstrapped_kdes) / len(event_times))
bootstrapped_kdes.append(bootstrapped_kde)
return bootstrapped_kdes
if len(data) == 0:
logger.info('No data for bootstrap, added zeros')
return [np.zeros_like(kde_time) for i in range(nresamples)]
diff_data = np.diff(np.sort(data), prepend=np.sort(data)[0]) def jackknife(data, nresamples, subsetsize, kde_time, kernel_width, event_times, time_before, time_after):
jackknife_kdes = []
data = data[data <= 3*60*60] # only night time
subsetsize = int(len(data) * subsetsize)
diff_data = np.diff(np.sort(data), prepend=0)
for i in tqdm(range(nresamples)): for i in tqdm(range(nresamples)):
np.random.shuffle(diff_data) bootstrapped_data = np.random.sample(data, subsetsize, replace=False)
bootstrapped_data = np.cumsum(diff_data) bootstrapped_data = np.cumsum(diff_data)
bootstrap_data_centered = center_chirps( bootstrap_data_centered = center_chirps(
bootstrapped_data, event_times, time_before, time_after) bootstrapped_data, event_times, time_before, time_after)
bootstrapped_kde = acausal_kde1d( bootstrapped_kde = acausal_kde1d(
bootstrap_data_centered, time=kde_time, width=kernel_width) bootstrap_data_centered, time=kde_time, width=kernel_width)
bootstrapped_kdes.append(bootstrapped_kde) # bootstrapped_kdes = list(np.asarray(
# bootstrapped_kdes) / len(event_times))
return bootstrapped_kdes jackknife_kdes.append(bootstrapped_kde)
return jackknife_kdes
def get_chirp_winner_loser(folder_name, Behavior, order_meta_df): def get_chirp_winner_loser(folder_name, Behavior, order_meta_df):
@ -88,7 +103,7 @@ def get_chirp_winner_loser(folder_name, Behavior, order_meta_df):
def main(dataroot): def main(dataroot):
foldernames, _ = get_valid_datasets(dataroot) foldernames, _ = get_valid_datasets(dataroot)
plot_all = False plot_all = True
time_before = 60 time_before = 60
time_after = 60 time_after = 60
dt = 0.001 dt = 0.001
@ -134,6 +149,9 @@ def main(dataroot):
bh = Behavior(folder) bh = Behavior(folder)
category, timestamps = correct_chasing_events(bh.behavior, bh.start_s) category, timestamps = correct_chasing_events(bh.behavior, bh.start_s)
category = category[timestamps < 3*60*60] # only night time
timestamps = timestamps[timestamps < 3*60*60] # only night time
winner, loser = get_chirp_winner_loser(folder, bh, meta) winner, loser = get_chirp_winner_loser(folder, bh, meta)
if winner is None: if winner is None:
@ -162,6 +180,8 @@ def main(dataroot):
loser, physicals, time_before, time_after)) loser, physicals, time_before, time_after))
# bootstrap # bootstrap
# chirps = [winner, winner, winner, loser, loser, loser]
winner_onsets_boot.append(bootstrap( winner_onsets_boot.append(bootstrap(
winner, winner,
nresamples=nbootstraps, nresamples=nbootstraps,
@ -240,80 +260,80 @@ def main(dataroot):
ax[1, 2].plot(kde_time, loser_physicals_conv/len(physicals)) ax[1, 2].plot(kde_time, loser_physicals_conv/len(physicals))
# # plot bootstrap lines # # plot bootstrap lines
# for kde in winner_onsets_boot[-1]: for kde in winner_onsets_boot[-1]:
# ax[0, 0].plot(kde_time, kde/len(offsets), ax[0, 0].plot(kde_time, kde/len(onsets),
# color='gray') color='gray')
# for kde in winner_offsets_boot[-1]: for kde in winner_offsets_boot[-1]:
# ax[0, 1].plot(kde_time, kde/len(offsets), ax[0, 1].plot(kde_time, kde/len(offsets),
# color='gray') color='gray')
# for kde in winner_physicals_boot[-1]: for kde in winner_physicals_boot[-1]:
# ax[0, 2].plot(kde_time, kde/len(offsets), ax[0, 2].plot(kde_time, kde/len(physicals),
# color='gray') color='gray')
# for kde in loser_onsets_boot[-1]: for kde in loser_onsets_boot[-1]:
# ax[1, 0].plot(kde_time, kde/len(offsets), ax[1, 0].plot(kde_time, kde/len(onsets),
# color='gray') color='gray')
# for kde in loser_offsets_boot[-1]: for kde in loser_offsets_boot[-1]:
# ax[1, 1].plot(kde_time, kde/len(offsets), ax[1, 1].plot(kde_time, kde/len(offsets),
# color='gray') color='gray')
# for kde in loser_physicals_boot[-1]: for kde in loser_physicals_boot[-1]:
# ax[1, 2].plot(kde_time, kde/len(offsets), ax[1, 2].plot(kde_time, kde/len(physicals),
# color='gray') color='gray')
# plot bootstrap percentiles # plot bootstrap percentiles
ax[0, 0].fill_between( # ax[0, 0].fill_between(
kde_time, # kde_time,
np.percentile(winner_onsets_boot[-1], 5, axis=0)/len(onsets), # np.percentile(winner_onsets_boot[-1], 5, axis=0),
np.percentile(winner_onsets_boot[-1], 95, axis=0)/len(onsets), # np.percentile(winner_onsets_boot[-1], 95, axis=0),
color='gray', # color='gray',
alpha=0.5) # alpha=0.5)
ax[0, 1].fill_between( # ax[0, 1].fill_between(
kde_time, # kde_time,
np.percentile(winner_offsets_boot[-1], 5, axis=0)/len(offsets), # np.percentile(winner_offsets_boot[-1], 5, axis=0),
np.percentile( # np.percentile(
winner_offsets_boot[-1], 95, axis=0)/len(offsets), # winner_offsets_boot[-1], 95, axis=0),
color='gray', # color='gray',
alpha=0.5) # alpha=0.5)
ax[0, 2].fill_between( # ax[0, 2].fill_between(
kde_time, # kde_time,
np.percentile( # np.percentile(
winner_physicals_boot[-1], 5, axis=0)/len(physicals), # winner_physicals_boot[-1], 5, axis=0),
np.percentile( # np.percentile(
winner_physicals_boot[-1], 95, axis=0)/len(physicals), # winner_physicals_boot[-1], 95, axis=0),
color='gray', # color='gray',
alpha=0.5) # alpha=0.5)
ax[1, 0].fill_between( # ax[1, 0].fill_between(
kde_time, # kde_time,
np.percentile(loser_onsets_boot[-1], 5, axis=0)/len(onsets), # np.percentile(loser_onsets_boot[-1], 5, axis=0),
np.percentile(loser_onsets_boot[-1], 95, axis=0)/len(onsets), # np.percentile(loser_onsets_boot[-1], 95, axis=0),
color='gray', # color='gray',
alpha=0.5) # alpha=0.5)
ax[1, 1].fill_between( # ax[1, 1].fill_between(
kde_time, # kde_time,
np.percentile(loser_offsets_boot[-1], 5, axis=0)/len(offsets), # np.percentile(loser_offsets_boot[-1], 5, axis=0),
np.percentile(loser_offsets_boot[-1], 95, axis=0)/len(offsets), # np.percentile(loser_offsets_boot[-1], 95, axis=0),
color='gray', # color='gray',
alpha=0.5) # alpha=0.5)
ax[1, 2].fill_between( # ax[1, 2].fill_between(
kde_time, # kde_time,
np.percentile( # np.percentile(
loser_physicals_boot[-1], 5, axis=0)/len(physicals), # loser_physicals_boot[-1], 5, axis=0),
np.percentile( # np.percentile(
loser_physicals_boot[-1], 95, axis=0)/len(physicals), # loser_physicals_boot[-1], 95, axis=0),
color='gray', # color='gray',
alpha=0.5) # alpha=0.5)
ax[0, 0].plot(kde_time, np.median(winner_onsets_boot[-1], axis=0)/len(onsets), # ax[0, 0].plot(kde_time, np.median(winner_onsets_boot[-1], axis=0),
color='black', linewidth=2) # color='black', linewidth=2)
ax[0, 1].plot(kde_time, np.median(winner_offsets_boot[-1], axis=0)/len(offsets), # ax[0, 1].plot(kde_time, np.median(winner_offsets_boot[-1], axis=0),
color='black', linewidth=2) # color='black', linewidth=2)
ax[0, 2].plot(kde_time, np.median(winner_physicals_boot[-1], axis=0)/len(physicals), # ax[0, 2].plot(kde_time, np.median(winner_physicals_boot[-1], axis=0),
color='black', linewidth=2) # color='black', linewidth=2)
ax[1, 0].plot(kde_time, np.median(loser_onsets_boot[-1], axis=0)/len(onsets), # ax[1, 0].plot(kde_time, np.median(loser_onsets_boot[-1], axis=0),
color='black', linewidth=2) # color='black', linewidth=2)
ax[1, 1].plot(kde_time, np.median(loser_offsets_boot[-1], axis=0)/len(offsets), # ax[1, 1].plot(kde_time, np.median(loser_offsets_boot[-1], axis=0),
color='black', linewidth=2) # color='black', linewidth=2)
ax[1, 2].plot(kde_time, np.median(loser_physicals_boot[-1], axis=0)/len(physicals), # ax[1, 2].plot(kde_time, np.median(loser_physicals_boot[-1], axis=0),
color='black', linewidth=2) # color='black', linewidth=2)
ax[0, 0].set_xlim(-30, 30) ax[0, 0].set_xlim(-30, 30)
plt.show() plt.show()
@ -345,20 +365,18 @@ def main(dataroot):
loser_offsets_conv = loser_offsets_conv / offset_count loser_offsets_conv = loser_offsets_conv / offset_count
loser_physicals_conv = loser_physicals_conv / physical_count loser_physicals_conv = loser_physicals_conv / physical_count
embed()
winner_onsets_boot = np.concatenate( winner_onsets_boot = np.concatenate(
winner_onsets_boot) / onset_count winner_onsets_boot)
winner_offsets_boot = np.concatenate( winner_offsets_boot = np.concatenate(
winner_offsets_boot) / offset_count winner_offsets_boot)
winner_physicals_boot = np.concatenate( winner_physicals_boot = np.concatenate(
winner_physicals_boot) / physical_count winner_physicals_boot)
loser_onsets_boot = np.concatenate( loser_onsets_boot = np.concatenate(
loser_onsets_boot) / onset_count loser_onsets_boot)
loser_offsets_boot = np.concatenate( loser_offsets_boot = np.concatenate(
loser_offsets_boot) / offset_count loser_offsets_boot)
loser_physicals_boot = np.concatenate( loser_physicals_boot = np.concatenate(
loser_physicals_boot) / physical_count loser_physicals_boot)
percs = [5, 50, 95] percs = [5, 50, 95]
winner_onsets_boot_quarts = np.percentile( winner_onsets_boot_quarts = np.percentile(
@ -378,52 +396,73 @@ def main(dataroot):
21*ps.cm, 10*ps.cm), sharey=True, sharex=True) 21*ps.cm, 10*ps.cm), sharey=True, sharex=True)
ax[0, 0].plot(kde_time, winner_onsets_conv) ax[0, 0].plot(kde_time, winner_onsets_conv)
ax[0, 1].plot(kde_time, winner_offsets_conv)
ax[0, 2].plot(kde_time, winner_physicals_conv)
ax[1, 0].plot(kde_time, loser_onsets_conv)
ax[1, 1].plot(kde_time, loser_offsets_conv)
ax[1, 2].plot(kde_time, loser_physicals_conv)
ax[0, 0].plot(kde_time, winner_onsets_boot_quarts[1], c=ps.black)
ax[0, 1].plot(kde_time, winner_offsets_boot_quarts[1], c=ps.black)
ax[0, 2].plot(kde_time, winner_physicals_boot_quarts[1], c=ps.black)
ax[1, 0].plot(kde_time, loser_onsets_boot_quarts[1], c=ps.black)
ax[1, 1].plot(kde_time, loser_offsets_boot_quarts[1], c=ps.black)
ax[1, 2].plot(kde_time, loser_physicals_boot_quarts[1], c=ps.black)
# for kde in winner_onsets_boot:
# ax[0, 0].plot(kde_time, kde,
# color='gray')
# for kde in winner_offsets_boot:
# ax[0, 1].plot(kde_time, kde,
# color='gray')
# for kde in winner_physicals_boot:
# ax[0, 2].plot(kde_time, kde,
# color='gray')
# for kde in loser_onsets_boot:
# ax[1, 0].plot(kde_time, kde,
# color='gray')
# for kde in loser_offsets_boot:
# ax[1, 1].plot(kde_time, kde,
# color='gray')
# for kde in loser_physicals_boot:
# ax[1, 2].plot(kde_time, kde,
# color='gray')
ax[0, 0].fill_between(kde_time, ax[0, 0].fill_between(kde_time,
winner_onsets_boot_quarts[0], winner_onsets_boot_quarts[0],
winner_onsets_boot_quarts[2], winner_onsets_boot_quarts[2],
color=ps.gray, color=ps.gray,
alpha=0.5) alpha=0.5)
ax[0, 0].plot(kde_time, winner_onsets_boot_quarts[1], c=ps.black)
ax[0, 1].plot(kde_time, winner_offsets_conv)
ax[0, 1].fill_between(kde_time, ax[0, 1].fill_between(kde_time,
winner_offsets_boot_quarts[0], winner_offsets_boot_quarts[0],
winner_offsets_boot_quarts[2], winner_offsets_boot_quarts[2],
color=ps.gray, color=ps.gray,
alpha=0.5) alpha=0.5)
ax[0, 1].plot(kde_time, winner_offsets_boot_quarts[1], c=ps.black)
ax[0, 2].plot(kde_time, winner_physicals_conv)
ax[0, 2].fill_between(kde_time, ax[0, 2].fill_between(kde_time,
loser_physicals_boot_quarts[0], loser_physicals_boot_quarts[0],
loser_physicals_boot_quarts[2], loser_physicals_boot_quarts[2],
color=ps.gray, color=ps.gray,
alpha=0.5) alpha=0.5)
ax[0, 2].plot(kde_time, winner_physicals_boot_quarts[1], c=ps.black)
ax[1, 0].plot(kde_time, loser_onsets_conv)
ax[1, 0].fill_between(kde_time, ax[1, 0].fill_between(kde_time,
loser_onsets_boot_quarts[0], loser_onsets_boot_quarts[0],
loser_onsets_boot_quarts[2], loser_onsets_boot_quarts[2],
color=ps.gray, color=ps.gray,
alpha=0.5) alpha=0.5)
ax[1, 0].plot(kde_time, loser_onsets_boot_quarts[1], c=ps.black)
ax[1, 1].plot(kde_time, loser_offsets_conv)
ax[1, 1].fill_between(kde_time, ax[1, 1].fill_between(kde_time,
loser_offsets_boot_quarts[0], loser_offsets_boot_quarts[0],
loser_offsets_boot_quarts[2], loser_offsets_boot_quarts[2],
color=ps.gray, color=ps.gray,
alpha=0.5) alpha=0.5)
ax[1, 1].plot(kde_time, loser_offsets_boot_quarts[1], c=ps.black)
ax[1, 2].plot(kde_time, loser_physicals_conv)
ax[1, 2].fill_between(kde_time, ax[1, 2].fill_between(kde_time,
loser_physicals_boot_quarts[0], loser_physicals_boot_quarts[0],
loser_physicals_boot_quarts[2], loser_physicals_boot_quarts[2],
color=ps.gray, color=ps.gray,
alpha=0.5) alpha=0.5)
ax[1, 2].plot(kde_time, loser_physicals_boot_quarts[1], c=ps.black)
plt.show() plt.show()

BIN
poster/figs/algorithm1.pdf Normal file

Binary file not shown.

BIN
poster/figs/efishlogo.pdf Normal file

Binary file not shown.

Binary file not shown.

View File

@ -7,7 +7,7 @@ blockverticalspace=2mm, colspace=20mm, subcolspace=0mm]{tikzposter} %Default val
\begin{document} \begin{document}
\renewcommand{\baselinestretch}{1} \renewcommand{\baselinestretch}{1}
\title{\parbox{1500pt}{Detection of transient communication signals in weakly electric fish}} \title{\parbox{1500pt}{Bypassing time-frequency uncertainty in the detection of transient communication signals in weakly electric fish}}
\author{Sina Prause, Alexander Wendt, and Patrick Weygoldt} \author{Sina Prause, Alexander Wendt, and Patrick Weygoldt}
\institute{Supervised by Till Raab \& Jan Benda, Neuroethology Lab, University of Tuebingen} \institute{Supervised by Till Raab \& Jan Benda, Neuroethology Lab, University of Tuebingen}
\usetitlestyle[]{sampletitle} \usetitlestyle[]{sampletitle}
@ -16,22 +16,25 @@ blockverticalspace=2mm, colspace=20mm, subcolspace=0mm]{tikzposter} %Default val
\begin{columns} \begin{columns}
\column{0.4} \column{0.4}
\myblock[TranspBlock]{Introduction}{ \myblock[GrayBlock]{Introduction}{
The time-frequency tradeoff makes reliable signal detecion and simultaneous The time-frequency tradeoff makes reliable signal detecion and simultaneous
sender identification of freely interacting individuals impossible. sender identification by simple Fourier decomposition in freely interacting
This profoundly limits our current understanding of chirps to experiments weakly electric fish impossible. This profoundly limits our current
understanding of chirps to experiments
with single - or physically separated - individuals. with single - or physically separated - individuals.
\begin{tikzfigure}[] % \begin{tikzfigure}[]
\label{griddrawing} % \label{griddrawing}
<<<<<<< HEAD % \includegraphics[width=0.8\linewidth]{figs/introplot}
======= % \end{tikzfigure}
\includegraphics[width=0.8\linewidth]{figs/introplot}
>>>>>>> cdcf9564df07914cf57225de5a8bdaa642fbad0e
\end{tikzfigure}
} }
\myblock[TranspBlock]{Chirp detection}{ \myblock[TranspBlock]{Chirp detection}{
\begin{tikzfigure}[] \begin{tikzfigure}[]
\label{fig:example_a} \label{fig:alg1}
\includegraphics[width=0.9\linewidth]{figs/algorithm1}
\end{tikzfigure}
\vspace{2cm}
\begin{tikzfigure}[]
\label{fig:alg2}
\includegraphics[width=1\linewidth]{figs/algorithm} \includegraphics[width=1\linewidth]{figs/algorithm}
\end{tikzfigure} \end{tikzfigure}
\vspace{0cm} \vspace{0cm}

View File

@ -34,7 +34,7 @@
\centering \centering
% \vspace{1cm} % \vspace{1cm}
\hspace{-10cm} \hspace{-10cm}
\includegraphics[width=\linewidth]{example-image-a} \includegraphics[width=0.8\linewidth]{figs/efishlogo.pdf}
\end{minipage}} \end{minipage}}
% \begin{minipage}[c]{0.2\paperwidth} % \begin{minipage}[c]{0.2\paperwidth}
% \vspace{1cm}\hspace{1cm} % \vspace{1cm}\hspace{1cm}