wilcoxon test

This commit is contained in:
weygoldt 2023-01-25 21:26:52 +01:00
parent f5c922c4ff
commit 2ee5a350fd
5 changed files with 83 additions and 62 deletions

View File

@ -1,4 +1,5 @@
import numpy as np import numpy as np
from extract_chirps import get_valid_datasets
import os import os
@ -116,6 +117,8 @@ def main(datapath: str):
foldernames = [ foldernames = [
datapath + x + '/' for x in os.listdir(datapath) if os.path.isdir(datapath+x)] datapath + x + '/' for x in os.listdir(datapath) if os.path.isdir(datapath+x)]
foldernames, _ = get_valid_datasets(datapath)
path_order_meta = ( path_order_meta = (
'/').join(foldernames[0].split('/')[:-2]) + '/order_meta.csv' '/').join(foldernames[0].split('/')[:-2]) + '/order_meta.csv'
order_meta_df = read_csv(path_order_meta) order_meta_df = read_csv(path_order_meta)
@ -223,7 +226,8 @@ def main(datapath: str):
size_chirps_diffs.append(chirp_winner - chirp_loser) size_chirps_diffs.append(chirp_winner - chirp_loser)
freq_diffs.append(freq_winner - freq_loser) freq_diffs.append(freq_winner - freq_loser)
fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(22*ps.cm, 12*ps.cm), width_ratios=[1.5, 1,1]) fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(
22*ps.cm, 12*ps.cm), width_ratios=[1.5, 1, 1])
plt.subplots_adjust(left=0.098, right=0.945, top=0.94, wspace=0.343) plt.subplots_adjust(left=0.098, right=0.945, top=0.94, wspace=0.343)
scatterwinner = 1.15 scatterwinner = 1.15
scatterloser = 1.85 scatterloser = 1.85

View File

@ -1,10 +1,11 @@
import numpy as np import numpy as np
from extract_chirps import get_valid_datasets
import os import os
import numpy as np import numpy as np
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from scipy.stats import pearsonr, spearmanr from scipy.stats import pearsonr, spearmanr, wilcoxon
from thunderfish.powerspectrum import decibel from thunderfish.powerspectrum import decibel
from IPython import embed from IPython import embed
@ -75,10 +76,10 @@ def get_chirp_size(folder_name, Behavior, order_meta_df, id_meta_df):
size_diff_bigger = size_fish1 - size_fish2 size_diff_bigger = size_fish1 - size_fish2
size_diff_smaller = size_fish2 - size_fish1 size_diff_smaller = size_fish2 - size_fish1
else: else:
size_diff_bigger = np.nan size_diff_bigger = np.nan
size_diff_smaller = np.nan size_diff_smaller = np.nan
winner_fish_id = np.nan winner_fish_id = np.nan
loser_fish_id = np.nan loser_fish_id = np.nan
return size_diff_bigger, size_diff_smaller, winner_fish_id, loser_fish_id return size_diff_bigger, size_diff_smaller, winner_fish_id, loser_fish_id
winner_fish_id = folder_row['rec_id1'].values[0] winner_fish_id = folder_row['rec_id1'].values[0]
@ -93,19 +94,19 @@ def get_chirp_size(folder_name, Behavior, order_meta_df, id_meta_df):
size_diff_bigger = size_fish2 - size_fish1 size_diff_bigger = size_fish2 - size_fish1
size_diff_smaller = size_fish1 - size_fish2 size_diff_smaller = size_fish1 - size_fish2
else: else:
size_diff_bigger = np.nan size_diff_bigger = np.nan
size_diff_smaller = np.nan size_diff_smaller = np.nan
winner_fish_id = np.nan winner_fish_id = np.nan
loser_fish_id = np.nan loser_fish_id = np.nan
return size_diff_bigger, size_diff_smaller, winner_fish_id, loser_fish_id return size_diff_bigger, size_diff_smaller, winner_fish_id, loser_fish_id
winner_fish_id = folder_row['rec_id2'].values[0] winner_fish_id = folder_row['rec_id2'].values[0]
loser_fish_id = folder_row['rec_id1'].values[0] loser_fish_id = folder_row['rec_id1'].values[0]
else: else:
size_diff_bigger = np.nan size_diff_bigger = np.nan
size_diff_smaller = np.nan size_diff_smaller = np.nan
winner_fish_id = np.nan winner_fish_id = np.nan
loser_fish_id = np.nan loser_fish_id = np.nan
return size_diff_bigger, size_diff_smaller, winner_fish_id, loser_fish_id return size_diff_bigger, size_diff_smaller, winner_fish_id, loser_fish_id
chirp_winner = len( chirp_winner = len(
@ -182,6 +183,7 @@ def main(datapath: str):
foldernames = [ foldernames = [
datapath + x + '/' for x in os.listdir(datapath) if os.path.isdir(datapath+x)] datapath + x + '/' for x in os.listdir(datapath) if os.path.isdir(datapath+x)]
foldernames, _ = get_valid_datasets(datapath)
path_order_meta = ( path_order_meta = (
'/').join(foldernames[0].split('/')[:-2]) + '/order_meta.csv' '/').join(foldernames[0].split('/')[:-2]) + '/order_meta.csv'
order_meta_df = read_csv(path_order_meta) order_meta_df = read_csv(path_order_meta)
@ -242,24 +244,25 @@ def main(datapath: str):
size_chirps_winner.append(chirp_winner) size_chirps_winner.append(chirp_winner)
size_chirps_loser.append(chirp_loser) size_chirps_loser.append(chirp_loser)
size_winner_pearsonr = pearsonr(size_diffs_winner, size_chirps_winner)
size_winner_pearsonr = pearsonr(size_diffs_winner, size_chirps_winner ) size_loser_pearsonr = pearsonr(size_diffs_loser, size_chirps_loser)
size_loser_pearsonr = pearsonr(size_diffs_loser, size_chirps_loser )
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=( fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(
22*ps.cm, 12*ps.cm), sharey=True) 13*ps.cm, 10*ps.cm), sharey=True)
plt.subplots_adjust(left=0.098, right=0.945, top=0.94, wspace=0.343) plt.subplots_adjust(left=0.098, right=0.945, top=0.94, wspace=0.343)
scatterwinner = 1.15 scatterwinner = 1.15
scatterloser = 1.85 scatterloser = 1.85
chirps_winner = np.asarray(chirps_winner)[~np.isnan(chirps_winner)] chirps_winner = np.asarray(chirps_winner)[~np.isnan(chirps_winner)]
chirps_loser = np.asarray(chirps_loser)[~np.isnan(chirps_loser)] chirps_loser = np.asarray(chirps_loser)[~np.isnan(chirps_loser)]
stat = wilcoxon(chirps_winner, chirps_loser)
print(stat)
bplot1 = ax1.boxplot(chirps_winner, positions=[ bplot1 = ax1.boxplot(chirps_winner, positions=[
1], showfliers=False, patch_artist=True) 0.9], showfliers=False, patch_artist=True)
bplot2 = ax1.boxplot(chirps_loser, positions=[ bplot2 = ax1.boxplot(chirps_loser, positions=[
2], showfliers=False, patch_artist=True) 2.1], showfliers=False, patch_artist=True)
ax1.scatter(np.ones(len(chirps_winner)) * ax1.scatter(np.ones(len(chirps_winner)) *
scatterwinner, chirps_winner, color=ps.red) scatterwinner, chirps_winner, color=ps.red)
ax1.scatter(np.ones(len(chirps_loser)) * ax1.scatter(np.ones(len(chirps_loser)) *
@ -270,19 +273,27 @@ def main(datapath: str):
for w, l in zip(chirps_winner, chirps_loser): for w, l in zip(chirps_winner, chirps_loser):
ax1.plot([scatterwinner, scatterloser], [w, l], ax1.plot([scatterwinner, scatterloser], [w, l],
color='r', alpha=0.5, linewidth=0.5) color=ps.white, alpha=1, linewidth=0.5)
ax1.set_ylabel('Chirps [n]', color=ps.white) ax1.set_ylabel('chirps [n]', color=ps.white)
ax1.set_xlabel('outcome', color=ps.white)
colors1 = ps.red colors1 = ps.red
ps.set_boxplot_color(bplot1, colors1) ps.set_boxplot_color(bplot1, colors1)
colors1 = ps.orange colors1 = ps.orange
ps.set_boxplot_color(bplot2, colors1) ps.set_boxplot_color(bplot2, colors1)
ax2.scatter(size_diffs_winner, size_chirps_winner, color=ps.red) ax2.scatter(size_diffs_winner, size_chirps_winner,
ax2.scatter(size_diffs_loser, size_chirps_loser, color=ps.orange) color=ps.red, label='winner')
ax2.scatter(size_diffs_loser, size_chirps_loser,
color=ps.orange, label='loser')
ax2.set_xlabel('size difference [cm]')
# ax2.set_xticks(np.arange(-10, 10.1, 2))
handles, labels = ax2.get_legend_handles_labels()
fig.legend(handles, labels, loc='upper center', ncol=2)
plt.subplots_adjust(left=0.162, right=0.97, top=0.85, bottom=0.176)
ax2.set_xlabel('Size difference [cm]')
ax2.set_xticks(np.arange(-10, 10.1, 2))
# pearson r # pearson r
plt.savefig('../poster/figs/chirps_winner_loser.pdf') plt.savefig('../poster/figs/chirps_winner_loser.pdf')
plt.show() plt.show()

View File

@ -12,6 +12,7 @@ from modules.logger import makeLogger
from modules.plotstyle import PlotStyle from modules.plotstyle import PlotStyle
from modules.behaviour_handling import Behavior, correct_chasing_events from modules.behaviour_handling import Behavior, correct_chasing_events
from extract_chirps import get_valid_datasets
ps = PlotStyle() ps = PlotStyle()
logger = makeLogger(__name__) logger = makeLogger(__name__)
@ -19,14 +20,16 @@ logger = makeLogger(__name__)
def main(datapath: str): def main(datapath: str):
foldernames = [datapath + x + '/' for x in os.listdir(datapath) if os.path.isdir(datapath+x)] foldernames = [
datapath + x + '/' for x in os.listdir(datapath) if os.path.isdir(datapath+x)]
foldernames, _ = get_valid_datasets(datapath)
for foldername in foldernames: for foldername in foldernames:
#foldername = foldernames[0] #foldername = foldernames[0]
if foldername == '../data/mount_data/2020-05-12-10_00/': if foldername == '../data/mount_data/2020-05-12-10_00/':
continue continue
#behabvior is pandas dataframe with all the data # behabvior is pandas dataframe with all the data
bh = Behavior(foldername) bh = Behavior(foldername)
#2020-06-11-10 # 2020-06-11-10
category = bh.behavior category = bh.behavior
timestamps = bh.start_s timestamps = bh.start_s
# Correct for doubles in chasing on- and offsets to get the right on-/offset pairs # Correct for doubles in chasing on- and offsets to get the right on-/offset pairs
@ -34,46 +37,49 @@ def main(datapath: str):
category, timestamps = correct_chasing_events(category, timestamps) category, timestamps = correct_chasing_events(category, timestamps)
# split categories # split categories
chasing_onset = (timestamps[category == 0]/ 60) /60 chasing_onset = (timestamps[category == 0] / 60) / 60
chasing_offset = (timestamps[category == 1]/ 60) /60 chasing_offset = (timestamps[category == 1] / 60) / 60
physical_contact = (timestamps[category == 2] / 60) /60 physical_contact = (timestamps[category == 2] / 60) / 60
all_fish_ids = np.unique(bh.chirps_ids) all_fish_ids = np.unique(bh.chirps_ids)
fish1_id = all_fish_ids[0] fish1_id = all_fish_ids[0]
fish2_id = all_fish_ids[1] fish2_id = all_fish_ids[1]
# Associate chirps to inidividual fish # Associate chirps to inidividual fish
fish1 = (bh.chirps[bh.chirps_ids == fish1_id] / 60) /60 fish1 = (bh.chirps[bh.chirps_ids == fish1_id] / 60) / 60
fish2 = (bh.chirps[bh.chirps_ids == fish2_id] / 60) /60 fish2 = (bh.chirps[bh.chirps_ids == fish2_id] / 60) / 60
fish1_color = ps.red fish1_color = ps.red
fish2_color = ps.orange fish2_color = ps.orange
fig, ax = plt.subplots(4, 1, figsize=(21*ps.cm, 13*ps.cm), height_ratios=[0.5, 0.5, 0.5, 6], sharex=True) fig, ax = plt.subplots(4, 1, figsize=(
21*ps.cm, 13*ps.cm), height_ratios=[0.5, 0.5, 0.5, 6], sharex=True)
# marker size # marker size
s = 200 s = 200
ax[0].scatter(physical_contact, np.ones(len(physical_contact)), color='firebrick', marker='|', s=s) ax[0].scatter(physical_contact, np.ones(
ax[1].scatter(chasing_onset, np.ones(len(chasing_onset)), color='green', marker='|', s=s ) len(physical_contact)), color='firebrick', marker='|', s=s)
ax[2].scatter(fish1, np.ones(len(fish1))-0.25, color=fish1_color, marker='|', s=s) ax[1].scatter(chasing_onset, np.ones(len(chasing_onset)),
ax[2].scatter(fish2, np.zeros(len(fish2))+0.25, color=fish2_color, marker='|', s=s) color='green', marker='|', s=s)
ax[2].scatter(fish1, np.ones(len(fish1))-0.25,
color=fish1_color, marker='|', s=s)
freq_temp = bh.freq[bh.ident==fish1_id] ax[2].scatter(fish2, np.zeros(len(fish2))+0.25,
time_temp = bh.time[bh.idx[bh.ident==fish1_id]] color=fish2_color, marker='|', s=s)
ax[3].plot((time_temp/ 60) /60, freq_temp, color=fish1_color)
freq_temp = bh.freq[bh.ident == fish1_id]
freq_temp = bh.freq[bh.ident==fish2_id] time_temp = bh.time[bh.idx[bh.ident == fish1_id]]
time_temp = bh.time[bh.idx[bh.ident==fish2_id]] ax[3].plot((time_temp / 60) / 60, freq_temp, color=fish1_color)
ax[3].plot((time_temp/ 60) /60, freq_temp, color=fish2_color)
freq_temp = bh.freq[bh.ident == fish2_id]
time_temp = bh.time[bh.idx[bh.ident == fish2_id]]
ax[3].plot((time_temp / 60) / 60, freq_temp, color=fish2_color)
#ax[3].imshow(decibel(bh.spec), extent=[bh.time[0]/60/60, bh.time[-1]/60/60, 0, 2000], aspect='auto', origin='lower') #ax[3].imshow(decibel(bh.spec), extent=[bh.time[0]/60/60, bh.time[-1]/60/60, 0, 2000], aspect='auto', origin='lower')
# Hide grid lines # Hide grid lines
ax[0].grid(False) ax[0].grid(False)
ax[0].set_frame_on(False) ax[0].set_frame_on(False)
ax[0].set_xticks([]) ax[0].set_xticks([])
ax[0].set_yticks([]) ax[0].set_yticks([])
ps.hide_ax(ax[0]) ps.hide_ax(ax[0])
ax[1].grid(False) ax[1].grid(False)
ax[1].set_frame_on(False) ax[1].set_frame_on(False)
ax[1].set_xticks([]) ax[1].set_xticks([])
@ -86,26 +92,26 @@ def main(datapath: str):
ax[2].set_xticks([]) ax[2].set_xticks([])
ps.hide_ax(ax[2]) ps.hide_ax(ax[2])
ax[3].axvspan(3, 6, 0, 5, facecolor='grey', alpha=0.5) ax[3].axvspan(3, 6, 0, 5, facecolor='grey', alpha=0.5)
ax[3].set_xticks(np.arange(0, 6.1, 0.5)) ax[3].set_xticks(np.arange(0, 6.1, 0.5))
labelpad = 40 labelpad = 40
fsize = 12 fsize = 12
ax[0].set_ylabel('Physical contact', rotation=0, labelpad=labelpad, fontsize=fsize) ax[0].set_ylabel('Physical contact', rotation=0,
ax[1].set_ylabel('Chasing events', rotation=0, labelpad=labelpad, fontsize=fsize) labelpad=labelpad, fontsize=fsize)
ax[2].set_ylabel('Chirps', rotation=0, labelpad=labelpad, fontsize=fsize) ax[1].set_ylabel('Chasing events', rotation=0,
labelpad=labelpad, fontsize=fsize)
ax[2].set_ylabel('Chirps', rotation=0,
labelpad=labelpad, fontsize=fsize)
ax[3].set_ylabel('EODf') ax[3].set_ylabel('EODf')
ax[3].set_xlabel('Time [h]') ax[3].set_xlabel('Time [h]')
ax[0].set_title(foldername.split('/')[-2]) ax[0].set_title(foldername.split('/')[-2])
# 2020-03-31-9_59 # 2020-03-31-9_59
plt.subplots_adjust(left=0.158, right=0.987, top=0.918) plt.subplots_adjust(left=0.158, right=0.987, top=0.918)
#plt.savefig('../poster/figs/timeline.pdf') # plt.savefig('../poster/figs/timeline.pdf')
plt.show() plt.show()
# plot chirps # plot chirps

Binary file not shown.

BIN
poster/main.pdf Normal file

Binary file not shown.