???
This commit is contained in:
parent
bbff7fd80c
commit
1de3e944c5
@ -18,47 +18,62 @@ logger = makeLogger(__name__)
|
||||
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:
|
||||
return []
|
||||
bootstrapped_kdes = []
|
||||
data = data[data <= 3*60*60] # only night time
|
||||
|
||||
jackknifed_kdes = []
|
||||
data = np.sort(data)
|
||||
subsetsize = int(np.round(len(data)*subsetsize))
|
||||
# diff_data = np.diff(np.sort(data), prepend=0)
|
||||
# if len(data) != 0:
|
||||
# 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)
|
||||
subset_kde = acausal_kde1d(subset, time=kde_time, width=kernel_width)
|
||||
jackknifed_kdes.append(subset_kde)
|
||||
# np.random.shuffle(diff_data)
|
||||
|
||||
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 = []
|
||||
data = data[data <= 3*60*60] # only night time
|
||||
# bootstrapped_kdes = list(np.asarray(
|
||||
# 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)):
|
||||
|
||||
np.random.shuffle(diff_data)
|
||||
bootstrapped_data = np.random.sample(data, subsetsize, replace=False)
|
||||
|
||||
bootstrapped_data = np.cumsum(diff_data)
|
||||
|
||||
bootstrap_data_centered = center_chirps(
|
||||
bootstrapped_data, event_times, time_before, time_after)
|
||||
|
||||
bootstrapped_kde = acausal_kde1d(
|
||||
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):
|
||||
@ -88,7 +103,7 @@ def get_chirp_winner_loser(folder_name, Behavior, order_meta_df):
|
||||
def main(dataroot):
|
||||
|
||||
foldernames, _ = get_valid_datasets(dataroot)
|
||||
plot_all = False
|
||||
plot_all = True
|
||||
time_before = 60
|
||||
time_after = 60
|
||||
dt = 0.001
|
||||
@ -134,6 +149,9 @@ def main(dataroot):
|
||||
bh = Behavior(folder)
|
||||
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)
|
||||
|
||||
if winner is None:
|
||||
@ -162,6 +180,8 @@ def main(dataroot):
|
||||
loser, physicals, time_before, time_after))
|
||||
|
||||
# bootstrap
|
||||
# chirps = [winner, winner, winner, loser, loser, loser]
|
||||
|
||||
winner_onsets_boot.append(bootstrap(
|
||||
winner,
|
||||
nresamples=nbootstraps,
|
||||
@ -240,80 +260,80 @@ def main(dataroot):
|
||||
ax[1, 2].plot(kde_time, loser_physicals_conv/len(physicals))
|
||||
|
||||
# # plot bootstrap lines
|
||||
# for kde in winner_onsets_boot[-1]:
|
||||
# ax[0, 0].plot(kde_time, kde/len(offsets),
|
||||
# color='gray')
|
||||
# for kde in winner_offsets_boot[-1]:
|
||||
# ax[0, 1].plot(kde_time, kde/len(offsets),
|
||||
# color='gray')
|
||||
# for kde in winner_physicals_boot[-1]:
|
||||
# ax[0, 2].plot(kde_time, kde/len(offsets),
|
||||
# color='gray')
|
||||
# for kde in loser_onsets_boot[-1]:
|
||||
# ax[1, 0].plot(kde_time, kde/len(offsets),
|
||||
# color='gray')
|
||||
# for kde in loser_offsets_boot[-1]:
|
||||
# ax[1, 1].plot(kde_time, kde/len(offsets),
|
||||
# color='gray')
|
||||
# for kde in loser_physicals_boot[-1]:
|
||||
# ax[1, 2].plot(kde_time, kde/len(offsets),
|
||||
# color='gray')
|
||||
for kde in winner_onsets_boot[-1]:
|
||||
ax[0, 0].plot(kde_time, kde/len(onsets),
|
||||
color='gray')
|
||||
for kde in winner_offsets_boot[-1]:
|
||||
ax[0, 1].plot(kde_time, kde/len(offsets),
|
||||
color='gray')
|
||||
for kde in winner_physicals_boot[-1]:
|
||||
ax[0, 2].plot(kde_time, kde/len(physicals),
|
||||
color='gray')
|
||||
for kde in loser_onsets_boot[-1]:
|
||||
ax[1, 0].plot(kde_time, kde/len(onsets),
|
||||
color='gray')
|
||||
for kde in loser_offsets_boot[-1]:
|
||||
ax[1, 1].plot(kde_time, kde/len(offsets),
|
||||
color='gray')
|
||||
for kde in loser_physicals_boot[-1]:
|
||||
ax[1, 2].plot(kde_time, kde/len(physicals),
|
||||
color='gray')
|
||||
|
||||
# plot bootstrap percentiles
|
||||
ax[0, 0].fill_between(
|
||||
kde_time,
|
||||
np.percentile(winner_onsets_boot[-1], 5, axis=0)/len(onsets),
|
||||
np.percentile(winner_onsets_boot[-1], 95, axis=0)/len(onsets),
|
||||
color='gray',
|
||||
alpha=0.5)
|
||||
ax[0, 1].fill_between(
|
||||
kde_time,
|
||||
np.percentile(winner_offsets_boot[-1], 5, axis=0)/len(offsets),
|
||||
np.percentile(
|
||||
winner_offsets_boot[-1], 95, axis=0)/len(offsets),
|
||||
color='gray',
|
||||
alpha=0.5)
|
||||
ax[0, 2].fill_between(
|
||||
kde_time,
|
||||
np.percentile(
|
||||
winner_physicals_boot[-1], 5, axis=0)/len(physicals),
|
||||
np.percentile(
|
||||
winner_physicals_boot[-1], 95, axis=0)/len(physicals),
|
||||
color='gray',
|
||||
alpha=0.5)
|
||||
ax[1, 0].fill_between(
|
||||
kde_time,
|
||||
np.percentile(loser_onsets_boot[-1], 5, axis=0)/len(onsets),
|
||||
np.percentile(loser_onsets_boot[-1], 95, axis=0)/len(onsets),
|
||||
color='gray',
|
||||
alpha=0.5)
|
||||
ax[1, 1].fill_between(
|
||||
kde_time,
|
||||
np.percentile(loser_offsets_boot[-1], 5, axis=0)/len(offsets),
|
||||
np.percentile(loser_offsets_boot[-1], 95, axis=0)/len(offsets),
|
||||
color='gray',
|
||||
alpha=0.5)
|
||||
ax[1, 2].fill_between(
|
||||
kde_time,
|
||||
np.percentile(
|
||||
loser_physicals_boot[-1], 5, axis=0)/len(physicals),
|
||||
np.percentile(
|
||||
loser_physicals_boot[-1], 95, axis=0)/len(physicals),
|
||||
color='gray',
|
||||
alpha=0.5)
|
||||
|
||||
ax[0, 0].plot(kde_time, np.median(winner_onsets_boot[-1], axis=0)/len(onsets),
|
||||
color='black', linewidth=2)
|
||||
ax[0, 1].plot(kde_time, np.median(winner_offsets_boot[-1], axis=0)/len(offsets),
|
||||
color='black', linewidth=2)
|
||||
ax[0, 2].plot(kde_time, np.median(winner_physicals_boot[-1], axis=0)/len(physicals),
|
||||
color='black', linewidth=2)
|
||||
ax[1, 0].plot(kde_time, np.median(loser_onsets_boot[-1], axis=0)/len(onsets),
|
||||
color='black', linewidth=2)
|
||||
ax[1, 1].plot(kde_time, np.median(loser_offsets_boot[-1], axis=0)/len(offsets),
|
||||
color='black', linewidth=2)
|
||||
ax[1, 2].plot(kde_time, np.median(loser_physicals_boot[-1], axis=0)/len(physicals),
|
||||
color='black', linewidth=2)
|
||||
# ax[0, 0].fill_between(
|
||||
# kde_time,
|
||||
# np.percentile(winner_onsets_boot[-1], 5, axis=0),
|
||||
# np.percentile(winner_onsets_boot[-1], 95, axis=0),
|
||||
# color='gray',
|
||||
# alpha=0.5)
|
||||
# ax[0, 1].fill_between(
|
||||
# kde_time,
|
||||
# np.percentile(winner_offsets_boot[-1], 5, axis=0),
|
||||
# np.percentile(
|
||||
# winner_offsets_boot[-1], 95, axis=0),
|
||||
# color='gray',
|
||||
# alpha=0.5)
|
||||
# ax[0, 2].fill_between(
|
||||
# kde_time,
|
||||
# np.percentile(
|
||||
# winner_physicals_boot[-1], 5, axis=0),
|
||||
# np.percentile(
|
||||
# winner_physicals_boot[-1], 95, axis=0),
|
||||
# color='gray',
|
||||
# alpha=0.5)
|
||||
# ax[1, 0].fill_between(
|
||||
# kde_time,
|
||||
# np.percentile(loser_onsets_boot[-1], 5, axis=0),
|
||||
# np.percentile(loser_onsets_boot[-1], 95, axis=0),
|
||||
# color='gray',
|
||||
# alpha=0.5)
|
||||
# ax[1, 1].fill_between(
|
||||
# kde_time,
|
||||
# np.percentile(loser_offsets_boot[-1], 5, axis=0),
|
||||
# np.percentile(loser_offsets_boot[-1], 95, axis=0),
|
||||
# color='gray',
|
||||
# alpha=0.5)
|
||||
# ax[1, 2].fill_between(
|
||||
# kde_time,
|
||||
# np.percentile(
|
||||
# loser_physicals_boot[-1], 5, axis=0),
|
||||
# np.percentile(
|
||||
# loser_physicals_boot[-1], 95, axis=0),
|
||||
# color='gray',
|
||||
# alpha=0.5)
|
||||
|
||||
# ax[0, 0].plot(kde_time, np.median(winner_onsets_boot[-1], axis=0),
|
||||
# color='black', linewidth=2)
|
||||
# ax[0, 1].plot(kde_time, np.median(winner_offsets_boot[-1], axis=0),
|
||||
# color='black', linewidth=2)
|
||||
# ax[0, 2].plot(kde_time, np.median(winner_physicals_boot[-1], axis=0),
|
||||
# color='black', linewidth=2)
|
||||
# ax[1, 0].plot(kde_time, np.median(loser_onsets_boot[-1], axis=0),
|
||||
# color='black', linewidth=2)
|
||||
# ax[1, 1].plot(kde_time, np.median(loser_offsets_boot[-1], axis=0),
|
||||
# color='black', linewidth=2)
|
||||
# ax[1, 2].plot(kde_time, np.median(loser_physicals_boot[-1], axis=0),
|
||||
# color='black', linewidth=2)
|
||||
|
||||
ax[0, 0].set_xlim(-30, 30)
|
||||
plt.show()
|
||||
@ -345,20 +365,18 @@ def main(dataroot):
|
||||
loser_offsets_conv = loser_offsets_conv / offset_count
|
||||
loser_physicals_conv = loser_physicals_conv / physical_count
|
||||
|
||||
embed()
|
||||
|
||||
winner_onsets_boot = np.concatenate(
|
||||
winner_onsets_boot) / onset_count
|
||||
winner_onsets_boot)
|
||||
winner_offsets_boot = np.concatenate(
|
||||
winner_offsets_boot) / offset_count
|
||||
winner_offsets_boot)
|
||||
winner_physicals_boot = np.concatenate(
|
||||
winner_physicals_boot) / physical_count
|
||||
winner_physicals_boot)
|
||||
loser_onsets_boot = np.concatenate(
|
||||
loser_onsets_boot) / onset_count
|
||||
loser_onsets_boot)
|
||||
loser_offsets_boot = np.concatenate(
|
||||
loser_offsets_boot) / offset_count
|
||||
loser_offsets_boot)
|
||||
loser_physicals_boot = np.concatenate(
|
||||
loser_physicals_boot) / physical_count
|
||||
loser_physicals_boot)
|
||||
|
||||
percs = [5, 50, 95]
|
||||
winner_onsets_boot_quarts = np.percentile(
|
||||
@ -378,52 +396,73 @@ def main(dataroot):
|
||||
21*ps.cm, 10*ps.cm), sharey=True, sharex=True)
|
||||
|
||||
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,
|
||||
winner_onsets_boot_quarts[0],
|
||||
winner_onsets_boot_quarts[2],
|
||||
color=ps.gray,
|
||||
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,
|
||||
winner_offsets_boot_quarts[0],
|
||||
winner_offsets_boot_quarts[2],
|
||||
color=ps.gray,
|
||||
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,
|
||||
loser_physicals_boot_quarts[0],
|
||||
loser_physicals_boot_quarts[2],
|
||||
color=ps.gray,
|
||||
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,
|
||||
loser_onsets_boot_quarts[0],
|
||||
loser_onsets_boot_quarts[2],
|
||||
color=ps.gray,
|
||||
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,
|
||||
loser_offsets_boot_quarts[0],
|
||||
loser_offsets_boot_quarts[2],
|
||||
color=ps.gray,
|
||||
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,
|
||||
loser_physicals_boot_quarts[0],
|
||||
loser_physicals_boot_quarts[2],
|
||||
color=ps.gray,
|
||||
alpha=0.5)
|
||||
ax[1, 2].plot(kde_time, loser_physicals_boot_quarts[1], c=ps.black)
|
||||
|
||||
plt.show()
|
||||
|
||||
|
BIN
poster/figs/algorithm1.pdf
Normal file
BIN
poster/figs/algorithm1.pdf
Normal file
Binary file not shown.
BIN
poster/figs/efishlogo.pdf
Normal file
BIN
poster/figs/efishlogo.pdf
Normal file
Binary file not shown.
BIN
poster/main.pdf
BIN
poster/main.pdf
Binary file not shown.
@ -7,7 +7,7 @@ blockverticalspace=2mm, colspace=20mm, subcolspace=0mm]{tikzposter} %Default val
|
||||
\begin{document}
|
||||
|
||||
\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}
|
||||
\institute{Supervised by Till Raab \& Jan Benda, Neuroethology Lab, University of Tuebingen}
|
||||
\usetitlestyle[]{sampletitle}
|
||||
@ -16,22 +16,25 @@ blockverticalspace=2mm, colspace=20mm, subcolspace=0mm]{tikzposter} %Default val
|
||||
|
||||
\begin{columns}
|
||||
\column{0.4}
|
||||
\myblock[TranspBlock]{Introduction}{
|
||||
\myblock[GrayBlock]{Introduction}{
|
||||
The time-frequency tradeoff makes reliable signal detecion and simultaneous
|
||||
sender identification of freely interacting individuals impossible.
|
||||
This profoundly limits our current understanding of chirps to experiments
|
||||
sender identification by simple Fourier decomposition in freely interacting
|
||||
weakly electric fish impossible. This profoundly limits our current
|
||||
understanding of chirps to experiments
|
||||
with single - or physically separated - individuals.
|
||||
\begin{tikzfigure}[]
|
||||
\label{griddrawing}
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
\includegraphics[width=0.8\linewidth]{figs/introplot}
|
||||
>>>>>>> cdcf9564df07914cf57225de5a8bdaa642fbad0e
|
||||
\end{tikzfigure}
|
||||
% \begin{tikzfigure}[]
|
||||
% \label{griddrawing}
|
||||
% \includegraphics[width=0.8\linewidth]{figs/introplot}
|
||||
% \end{tikzfigure}
|
||||
}
|
||||
\myblock[TranspBlock]{Chirp detection}{
|
||||
\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}
|
||||
\end{tikzfigure}
|
||||
\vspace{0cm}
|
||||
|
@ -34,7 +34,7 @@
|
||||
\centering
|
||||
% \vspace{1cm}
|
||||
\hspace{-10cm}
|
||||
\includegraphics[width=\linewidth]{example-image-a}
|
||||
\includegraphics[width=0.8\linewidth]{figs/efishlogo.pdf}
|
||||
\end{minipage}}
|
||||
% \begin{minipage}[c]{0.2\paperwidth}
|
||||
% \vspace{1cm}\hspace{1cm}
|
||||
|
Loading…
Reference in New Issue
Block a user