From 6ca78567c4b16076e4194f429e9adca5cd4b3bdb Mon Sep 17 00:00:00 2001
From: Loic-Lenof <loic.lenof@gmail.com>
Date: Mon, 19 Sep 2022 14:09:09 +0200
Subject: [PATCH] Correction of errors

+ added unit for "Mean whistling time per dolphin per min"
+ removed factor 2 that was left by mistake
---
 Stats/.Rhistory                               | 148 +++++++++---------
 Stats/BBP-click-whistles_3models.R            |  49 +++---
 Stats/Rplot.pdf                               | Bin 0 -> 14079 bytes
 Whistles/1-Identification_of_whistles.py      |   2 +-
 .../__pycache__/WhistleUtils.cpython-39.pyc   | Bin 0 -> 12247 bytes
 5 files changed, 100 insertions(+), 99 deletions(-)
 create mode 100644 Stats/Rplot.pdf
 create mode 100644 Whistles/__pycache__/WhistleUtils.cpython-39.pyc

diff --git a/Stats/.Rhistory b/Stats/.Rhistory
index 0557ac4..eaeec58 100644
--- a/Stats/.Rhistory
+++ b/Stats/.Rhistory
@@ -1,29 +1,3 @@
-library(multcompView) # "multcompLetters" function
-library(ggplot2)
-library(pgirmess)
-library(postHoc)
-#library(tidyquant)    # geom_ma() if rolling average needed
-################# DATASET IMPORTS #####################################
-folder <- './../'
-whistles.dta <-read.table(file=paste0(folder,
-'Whistles/Evaluation/whistles_durations.csv'),
-sep = ',', header=TRUE)
-whistles.dta <- whistles.dta[order(whistles.dta$audio_names),]
-bbp.dta <-read.table(file=paste0(folder,
-'BBPs/Results/16-06-22_14h00_number_of_BBP.csv'),
-sep = ',', header=TRUE)
-bbp.dta <- bbp.dta[order(bbp.dta$audio_names),]
-clicks.dta <-read.table(file=paste0(folder,
-'Clicks/Results/projection_updated_number_of_clicks_02052022.csv'), #number_of_clicks_02052022.csv
-sep = ',', header=TRUE)
-clicks.dta <- clicks.dta[order(clicks.dta$audio_names),]
-# Merge files into 1 dataset
-acoustic.dta <- clicks.dta
-acoustic.dta$number_of_bbp <- bbp.dta$number_of_BBP
-acoustic.dta$total_whistles_duration <- whistles.dta$total_whistles_duration
-rm(whistles.dta, bbp.dta, clicks.dta)
-# add group IDs
-id2020 <- read.table(file=paste0(folder, 'CSV_data/Audio_Data_2020.csv'),
 sep = ',', header=TRUE)[1:396,]
 id2021 <- read.table(file=paste0(folder, 'CSV_data/Audio_Data_2021.csv'),
 sep = ',', header=TRUE)[1:96,]
@@ -93,7 +67,7 @@ shapiro.test(acoustic.dta$total_whistles_duration)
 shapiro.test(acoustic.dta$number_of_bbp)
 shapiro.test(acoustic.dta$number_of_clicks)
 # p-values are significant => they do not follow normal distributions
-# will need a transformation or the use of a glm model
+# will need a transformation or the use of a glim model
 # X Number of individuals per level
 summary(factor(acoustic.dta$acoustic))
 summary(factor(acoustic.dta$fishing_net))
@@ -110,11 +84,11 @@ ftable(factor(acoustic.dta$fishing_net), factor(acoustic.dta$behavior), factor(a
 # => They will be treated apart from the rest as they are likely to be biased
 ##################### STATISTICAL MODELLING ###########################
 ### Model tested
-# LM: Linear model (residual hypothesis: normality, homoscedasticity, independant)
-# GLM: Generalized linear model (residual hypothesis: homoscedasticity, independant)
-# NB : Negative Binomial model (usually, when overdispersion with GLM)
-# ZINB: Zero inflated negative binomial model (residual hypothesis: homoscedasticity, independant
-# using number as an offset (more dolphins => more signals)
+# GLM: General linear model (residual hypothesis: normality, homoscedasticity, independant)
+# GLIM: Generalized linear model (residual hypothesis: uncorrelated residuals)
+# NB : Negative Binomial model (residual hypothesis: independantM)
+# ZINB: Zero inflated negative binomial model (residual hypothesis: independant)
+# We are using number as an offset (more dolphins => more signals)
 # beacon and net explanatory variables could not be tested in models
 # as they contain information already present in "fishing_net" which is more
 # interesting to keep for our study. They will be treated after
@@ -123,8 +97,8 @@ ftable(factor(acoustic.dta$fishing_net), factor(acoustic.dta$behavior), factor(a
 # If a variable is it in a model, it is because it had no significant effect.
 par(mfrow=c(1,1))
 ### Model for whistles
-# Residual hypotheses not verified for LM
-# Overdipsersion when using GLM (negative binomial)
+# Residual hypotheses not verified for GLM
+# Overdipsersion when using GLIM (negative binomial)
 # Using ZINB:
 zero.whi <- zeroinfl(total_whistles_duration ~
 acoustic + fishing_net + behavior + offset(log(number)),
@@ -138,11 +112,12 @@ mod.whi <- zero.whi # => zeroinflated model is indeed better suited
 car::Anova(mod.whi, type=3)
 dwtest(mod.whi) # H0 -> independent if p>0.05 (autocorrelation if p<0.05)
 bptest(mod.whi) # H0 -> homoscedasticity if p<0.05
-# No normality but we do not need it
+mod.whi$df.null/mod.whi$df.residual
+# no dispersion, perfect
 ### Model for BBP
-# No normality of residuals for LM
-# overdispersion with GLM quasipoisson
-#try with glm NB:
+# No normality of residuals for GLM
+# overdispersion with GLIM quasipoisson
+#try with glim NB:
 mod.bbp <- glm.nb(number_of_bbp ~ acoustic + fishing_net + behavior
 + offset(log(number)),
 data=acoustic.dta)
@@ -156,7 +131,6 @@ mod.bbp$deviance/mod.bbp$df.residual
 mod.cli <- glm.nb(number_of_clicks ~ acoustic + fishing_net + acoustic:fishing_net + offset(log(number)),
 data=acoustic.dta)
 car::Anova(mod.cli, type=3)
-shapiro.test(residuals(mod.cli)) # H0 : normality -> cannot be rejected if p > 0.05
 dwtest(mod.cli) # H0 -> independent if p>0.05 (autocorrelation if p<0.05)
 bptest(mod.cli) # H0 -> homoscedasticity if p<0.05
 mod.cli$deviance/mod.cli$df.residual
@@ -216,11 +190,11 @@ acoustic.dta$clicks_per_dolphin <- acoustic.dta$number_of_clicks/acoustic.dta$nu
 table <- cld(emmeans(mod.whi, pairwise~fishing_net, adjust="tukey"), Letters = letters)
 myletters_df <- data.frame(fishing_net=table$fishing_net,
 letter = trimws(table$.group))
-barPlot(computeStats(acoustic.dta, fishing_net, whistling_time_per_dolphin/375), # 375 bins = 1 sec
+barPlot(computeStats(acoustic.dta, fishing_net, whistling_time_per_dolphin/n_bins),
 myletters_df, fishing_net,
 old_names = c("SSF","F"), new_names = c("Absent", "Present"),
 xname="Presence/Asence of fishing net", height=.5,
-ytitle="Mean whistling time per dolphin per min")
+ytitle="Mean whistling time per dolphin per min (in sec)")
 # BBP
 table <- cld(emmeans(mod.bbp, pairwise~fishing_net, adjust="tukey"), Letters = letters)
 myletters_df <- data.frame(fishing_net=table$fishing_net,
@@ -243,8 +217,8 @@ ytitle="Mean number of clicks per dolphin per min")
 # Whistles
 table <- cld(emmeans(mod.whi, pairwise~acoustic, adjust="tukey"), Letters = letters)
 myletters_df <- data.frame(acoustic=table$acoustic,letter = trimws(table$.group))
-barPlot(computeStats(acoustic.dta, acoustic, whistling_time_per_dolphin/375),
-myletters_df, acoustic, height=0.65, ytitle="Mean whistling time per dolphin per min",
+barPlot(computeStats(acoustic.dta, acoustic, whistling_time_per_dolphin/n_bins),
+myletters_df, acoustic, height=0.65, ytitle="Mean whistling time per dolphin per min (in sec)",
 old_names = c("AV","AV+D","D","D+AP","AP"),
 new_names = c("BEF","BEF+DUR","DUR", "DUR+AFT", "AFT"),
 xname="Activation sequence")
@@ -272,9 +246,9 @@ letters_df$acoustic <- computeLetters(emmeans(mod.whi, pairwise~fishing_net:acou
 "acoustic")$acoustic
 letters_df <- letters_df[, c("acoustic","fishing_net","letter")]
 letters_df$letter <- gsub(" ", "", letters_df$letter)
-barPlot(computeStats(acoustic.dta, fishing_net, whistling_time_per_dolphin/375, two=acoustic),
+barPlot(computeStats(acoustic.dta, fishing_net, whistling_time_per_dolphin/n_bins, two=acoustic),
 NULL, acoustic, fill=fishing_net,
-old_names = c("AV","AV+D","D","D+AP","AP"), ytitle="Mean whistling time per dolphin per min",
+old_names = c("AV","AV+D","D","D+AP","AP"), ytitle="Mean whistling time per dolphin per min (in sec)",
 new_names = c("BEF","BEF+DUR","DUR", "DUR+AFT", "AFT"),
 xname="Activation sequence", height=c(.95,.95,.95,1,.95,1,.95,1,1,1),
 colours=c("#E69F00","#999999"), size=5,
@@ -311,8 +285,8 @@ legend_title="Fishing net", legend_labs=c("Present", "Absent"))
 # Whistles
 table <- cld(emmeans(mod.whi, pairwise~behavior, adjust="tukey"), Letters = letters)
 myletters_df <- data.frame(behavior=table$behavior,letter = trimws(table$.group))
-barPlot(computeStats(acoustic.dta, behavior, whistling_time_per_dolphin/375),
-myletters_df, behavior, height=0.75, ytitle="Mean whistling time per dolphin per min",
+barPlot(computeStats(acoustic.dta, behavior, whistling_time_per_dolphin/n_bins),
+myletters_df, behavior, height=0.75, ytitle="Mean whistling time per dolphin per min (in sec)",
 old_names = c("CHAS", "DEPL", "SOCI"),
 new_names = c("Foraging", "Travelling", "Socialising"),
 xname="Behaviours of dolphins")
@@ -344,12 +318,12 @@ kruskalmc(acoustic.dta$whistling_time_per_dolphin, acoustic.dta$net)
 # DIY : letters
 myletters_df <- data.frame(net=c("SSF", "chalut_blanc", "chalut_vert", "tremail", "grand_filet"),
 letter = c("a","ad","bd","cd","a"))
-barPlot(computeStats(acoustic.dta, net, whistling_time_per_dolphin/375),
+barPlot(computeStats(acoustic.dta, net, whistling_time_per_dolphin/n_bins),
 NULL,
 net, old_names = c("SSF", "chalut_blanc", "chalut_vert", "tremail", "grand_filet"),
 new_names = c("Absent", "Nylon trawl net", "PE trawl net", "Nylon gill net", "Long nylon gill net"),
 xname="Fishing nets", height=.6,
-ytitle="Mean whistling time per dolphin per min")+
+ytitle="Mean whistling time per dolphin per min (in sec)")+
 theme(axis.text.x=element_text(size=8.5))
 # BBPs
 #KW test
@@ -385,19 +359,19 @@ theme(axis.text.x=element_text(size=8.5))
 # Whistles
 #KW test
 kruskal.test(acoustic.dta$whistling_time_per_dolphin ~ acoustic.dta$beacon)
-names = computeStats(acoustic.dta, beacon, whistling_time_per_dolphin/375)["beacon"]
-barPlot(computeStats(acoustic.dta, beacon, whistling_time_per_dolphin/375),
+names = computeStats(acoustic.dta, beacon, whistling_time_per_dolphin/n_bins)["beacon"]
+barPlot(computeStats(acoustic.dta, beacon, whistling_time_per_dolphin/n_bins),
 NULL,
 beacon, old_names = unlist(names), new_names = unlist(names),
 xname="Signals from bio-inspired beacon", height=0.9, size=3,
-ytitle="Mean whistling time per dolphin per min")+
+ytitle="Mean whistling time per dolphin per min (in sec)")+
 theme(axis.text.x=element_text(size=8))+
 scale_x_discrete(guide=guide_axis(n.dodge = 2))
 # NC stands for "Unknown". Corresponding to categories where the beacon was not turned on yet ('BEF')
 # BBPs
 #KW test
 kruskal.test(acoustic.dta$BBPs_per_dolphin ~ acoustic.dta$beacon)
-names = computeStats(acoustic.dta, beacon, whistling_time_per_dolphin/375)["beacon"]
+names = computeStats(acoustic.dta, beacon, BBPs_per_dolphin)["beacon"]
 barPlot(computeStats(acoustic.dta, beacon, BBPs_per_dolphin),
 NULL,
 beacon, old_names = unlist(names), new_names = unlist(names),
@@ -409,7 +383,7 @@ scale_x_discrete(guide=guide_axis(n.dodge = 2))
 # Clicks
 #KW test
 kruskal.test(acoustic.dta$clicks_per_dolphin ~ acoustic.dta$beacon)
-names = computeStats(acoustic.dta, beacon, whistling_time_per_dolphin/375)["beacon"]
+names = computeStats(acoustic.dta, beacon, clicks_per_dolphin)["beacon"]
 barPlot(computeStats(acoustic.dta, beacon, clicks_per_dolphin),
 NULL,
 beacon, old_names = unlist(names), unlist(names),
@@ -420,7 +394,7 @@ scale_x_discrete(guide=guide_axis(n.dodge = 2))
 # NC stands for "Unknown". Corresponding to categories where the beacon was not turned on yet ('BEF')
 #### Plots by number of dolphins ####
 # Whistles
-numb_stats_w <- computeStats(acoustic.dta, number, total_whistles_duration/375)
+numb_stats_w <- computeStats(acoustic.dta, number, total_whistles_duration/n_bins)
 numb_stats_w[is.na(numb_stats_w)] <- 0
 numb_stats_w$number <- as.factor(numb_stats_w$number)
 numb_stats_w %>%
@@ -429,7 +403,7 @@ geom_errorbar(aes(x=number, ymin=mean-ic, ymax=mean+ic),
 color="red", width=.1, show.legend = FALSE)+
 geom_point() + geom_line() +
 theme_classic() + theme(text=element_text(size=12)) +
-ylab("Mean whistling time per min")+
+ylab("Mean whistling time per dolphin per min (in sec)")+
 xlab("Number of dolphins in group")
 # BBPs
 numb_stats_b <- computeStats(acoustic.dta, number, number_of_bbp)
@@ -441,7 +415,7 @@ geom_errorbar(aes(x=number, ymin=mean-ic, ymax=mean+ic),
 color="red", width=.1, show.legend = FALSE)+
 geom_point() + geom_line() +
 theme_classic() + theme(text=element_text(size=12)) +
-ylab("Number of BBPs per min")+
+ylab("Number of BBPs per dolphin per min")+
 xlab("Number of dolphins in group")
 # Clicks
 numb_stats_c <- computeStats(acoustic.dta, number, number_of_clicks)
@@ -453,11 +427,11 @@ geom_errorbar(aes(x=number, ymin=mean-ic, ymax=mean+ic),
 color="red", width=.1)+
 geom_point() + geom_line() +
 theme_classic() + theme(text=element_text(size=12)) +
-ylab("Mean number of clicks per min")+
+ylab("Mean number of clicks per dolphin per min")+
 xlab("Number of echolocation clicks in group")
 #### Plots by Group ID ####
 # Whistles
-numb_stats_w <- computeStats(acoustic.dta, ID, whistling_time_per_dolphin/375)
+numb_stats_w <- computeStats(acoustic.dta, ID, whistling_time_per_dolphin/n_bins)
 numb_stats_w[is.na(numb_stats_w)] <- 0
 numb_stats_w$ID <- as.factor(numb_stats_w$ID)
 numb_stats_w %>%
@@ -466,7 +440,7 @@ geom_errorbar(aes(x=ID, ymin=mean-sd, ymax=mean+sd),
 color="red", width=.1, show.legend = FALSE)+
 geom_point() + scale_x_discrete(guide = guide_axis(n.dodge = 2))+
 theme_light() + theme(text=element_text(size=12)) +
-ylab("Mean whistling time per min")+
+ylab("Mean whistling time per dolphin per min (in sec)")+
 xlab("ID of dolphins group")
 # BBPs
 numb_stats_b <- computeStats(acoustic.dta, ID, BBPs_per_dolphin)
@@ -478,7 +452,7 @@ geom_errorbar(aes(x=ID, ymin=mean-sd, ymax=mean+sd),
 color="red", width=.1, show.legend = FALSE)+
 geom_point() + scale_x_discrete(guide = guide_axis(n.dodge = 2))+
 theme_light() + theme(text=element_text(size=12)) +
-ylab("Number of BBPs per min")+
+ylab("Number of BBPs per dolphin per min")+
 xlab("ID of dolphins group")
 # Clicks
 numb_stats_c <- computeStats(acoustic.dta, ID, clicks_per_dolphin)
@@ -490,7 +464,7 @@ geom_errorbar(aes(x=ID, ymin=mean-sd, ymax=mean+sd),
 color="red", width=.1)+
 geom_point() + scale_x_discrete(guide = guide_axis(n.dodge = 2))+
 theme_light() + theme(text=element_text(size=12)) +
-ylab("Mean number of clicks per min")+
+ylab("Mean number of clicks per dolphin per min")+
 xlab("ID of dolphin group")
 # KW test on IDs
 # whistles (excluding groups "2" because 1 sample and groups because no whistles recorded )
@@ -498,15 +472,41 @@ data_test <- acoustic.dta[acoustic.dta$ID!="2",]
 print( posthocKW(data_test$whistling_time_per_dolphin, data_test$ID))
 print( posthocKW(data_test$BBPs_per_dolphin, data_test$ID))
 print( posthocKW(data_test$clicks_per_dolphin, data_test$ID))
-mod.cli$deviance/mod.cli$df.residual
-mod.bbp$deviance/mod.bbp$df.residual
-mod.whi$deviance/mod.whi$df.residual
-mod.whi$deviance/mod.whi$df.residual
-mod.whi$deviance
-mod.whi
-mod.whi$fitted.values
-mod.whi$df.null
-mod.whi$df.residual
-mod.whi$df.null/mod.whi$df.residual
-mod.bbp$deviance/mod.bbp$df.residual
-mod.cli$deviance/mod.cli$df.residual
+#### Fishing net  ####
+# whistles
+table <- cld(emmeans(mod.whi, pairwise~fishing_net, adjust="tukey"), Letters = letters)
+myletters_df <- data.frame(fishing_net=table$fishing_net,
+letter = trimws(table$.group))
+barPlot(computeStats(acoustic.dta, fishing_net, whistling_time_per_dolphin/n_bins),
+myletters_df, fishing_net,
+old_names = c("SSF","F"), new_names = c("Absent", "Present"),
+xname="Presence/Asence of fishing net", height=1,
+ytitle="Mean whistling time per dolphin per min (in sec)")
+#### Acoustic plots  ####
+# Whistles
+table <- cld(emmeans(mod.whi, pairwise~acoustic, adjust="tukey"), Letters = letters)
+myletters_df <- data.frame(acoustic=table$acoustic,letter = trimws(table$.group))
+barPlot(computeStats(acoustic.dta, acoustic, whistling_time_per_dolphin/n_bins),
+myletters_df, acoustic, height=1.2, ytitle="Mean whistling time per dolphin per min (in sec)",
+old_names = c("AV","AV+D","D","D+AP","AP"),
+new_names = c("BEF","BEF+DUR","DUR", "DUR+AFT", "AFT"),
+xname="Activation sequence")
+barPlot(computeStats(acoustic.dta, acoustic, whistling_time_per_dolphin/n_bins),
+myletters_df, acoustic, height=1.3, ytitle="Mean whistling time per dolphin per min (in sec)",
+old_names = c("AV","AV+D","D","D+AP","AP"),
+new_names = c("BEF","BEF+DUR","DUR", "DUR+AFT", "AFT"),
+xname="Activation sequence")
+#### Behaviour plots ####
+# Whistles
+table <- cld(emmeans(mod.whi, pairwise~behavior, adjust="tukey"), Letters = letters)
+myletters_df <- data.frame(behavior=table$behavior,letter = trimws(table$.group))
+barPlot(computeStats(acoustic.dta, behavior, whistling_time_per_dolphin/n_bins),
+myletters_df, behavior, height=1.5, ytitle="Mean whistling time per dolphin per min (in sec)",
+old_names = c("CHAS", "DEPL", "SOCI"),
+new_names = c("Foraging", "Travelling", "Socialising"),
+xname="Behaviours of dolphins")
+25.8/19.1
+5.65/(25.8/19.1)
+25.15/20.9
+5.65/(25.15/20.9)
+5.65/(25.8/23.4)
diff --git a/Stats/BBP-click-whistles_3models.R b/Stats/BBP-click-whistles_3models.R
index d00efb1..17d7dcd 100644
--- a/Stats/BBP-click-whistles_3models.R
+++ b/Stats/BBP-click-whistles_3models.R
@@ -19,6 +19,7 @@ library(pgirmess)
 library(postHoc)
 #library(tidyquant)    # geom_ma() if rolling average needed
 
+n_bins = 187.5 # number of bins per sec for spectrograms (whistles)
 
 ################# DATASET IMPORTS #####################################
 folder <- './../'
@@ -268,11 +269,11 @@ acoustic.dta$clicks_per_dolphin <- acoustic.dta$number_of_clicks/acoustic.dta$nu
 table <- cld(emmeans(mod.whi, pairwise~fishing_net, adjust="tukey"), Letters = letters)
 myletters_df <- data.frame(fishing_net=table$fishing_net,
                            letter = trimws(table$.group))
-barPlot(computeStats(acoustic.dta, fishing_net, whistling_time_per_dolphin/375), # 375 bins = 1 sec
+barPlot(computeStats(acoustic.dta, fishing_net, whistling_time_per_dolphin/n_bins),
         myletters_df, fishing_net, 
         old_names = c("SSF","F"), new_names = c("Absent", "Present"),
-        xname="Presence/Asence of fishing net", height=.5, 
-        ytitle="Mean whistling time per dolphin per min")
+        xname="Presence/Asence of fishing net", height=1, 
+        ytitle="Mean whistling time per dolphin per min (in sec)")
 
 # BBP
 table <- cld(emmeans(mod.bbp, pairwise~fishing_net, adjust="tukey"), Letters = letters)
@@ -299,8 +300,8 @@ barPlot(computeStats(acoustic.dta, fishing_net, clicks_per_dolphin),
 # Whistles
 table <- cld(emmeans(mod.whi, pairwise~acoustic, adjust="tukey"), Letters = letters)
 myletters_df <- data.frame(acoustic=table$acoustic,letter = trimws(table$.group))
-barPlot(computeStats(acoustic.dta, acoustic, whistling_time_per_dolphin/375),
-        myletters_df, acoustic, height=0.65, ytitle="Mean whistling time per dolphin per min",
+barPlot(computeStats(acoustic.dta, acoustic, whistling_time_per_dolphin/n_bins),
+        myletters_df, acoustic, height=1.3, ytitle="Mean whistling time per dolphin per min (in sec)",
         old_names = c("AV","AV+D","D","D+AP","AP"),
         new_names = c("BEF","BEF+DUR","DUR", "DUR+AFT", "AFT"),
         xname="Activation sequence")
@@ -332,9 +333,9 @@ letters_df$acoustic <- computeLetters(emmeans(mod.whi, pairwise~fishing_net:acou
                                       "acoustic")$acoustic
 letters_df <- letters_df[, c("acoustic","fishing_net","letter")]
 letters_df$letter <- gsub(" ", "", letters_df$letter)
-barPlot(computeStats(acoustic.dta, fishing_net, whistling_time_per_dolphin/375, two=acoustic),
+barPlot(computeStats(acoustic.dta, fishing_net, whistling_time_per_dolphin/n_bins, two=acoustic),
         NULL, acoustic, fill=fishing_net,
-        old_names = c("AV","AV+D","D","D+AP","AP"), ytitle="Mean whistling time per dolphin per min",
+        old_names = c("AV","AV+D","D","D+AP","AP"), ytitle="Mean whistling time per dolphin per min (in sec)",
         new_names = c("BEF","BEF+DUR","DUR", "DUR+AFT", "AFT"),
         xname="Activation sequence", height=c(.95,.95,.95,1,.95,1,.95,1,1,1), 
         colours=c("#E69F00","#999999"), size=5,
@@ -374,8 +375,8 @@ barPlot(computeStats(acoustic.dta, fishing_net, clicks_per_dolphin, two=acoustic
 # Whistles
 table <- cld(emmeans(mod.whi, pairwise~behavior, adjust="tukey"), Letters = letters)
 myletters_df <- data.frame(behavior=table$behavior,letter = trimws(table$.group))
-barPlot(computeStats(acoustic.dta, behavior, whistling_time_per_dolphin/375),
-        myletters_df, behavior, height=0.75, ytitle="Mean whistling time per dolphin per min",
+barPlot(computeStats(acoustic.dta, behavior, whistling_time_per_dolphin/n_bins),
+        myletters_df, behavior, height=1.5, ytitle="Mean whistling time per dolphin per min (in sec)",
         old_names = c("CHAS", "DEPL", "SOCI"),
         new_names = c("Foraging", "Travelling", "Socialising"),
         xname="Behaviours of dolphins")
@@ -410,12 +411,12 @@ kruskalmc(acoustic.dta$whistling_time_per_dolphin, acoustic.dta$net)
 # DIY : letters
 myletters_df <- data.frame(net=c("SSF", "chalut_blanc", "chalut_vert", "tremail", "grand_filet"),
                            letter = c("a","ad","bd","cd","a"))
-barPlot(computeStats(acoustic.dta, net, whistling_time_per_dolphin/375),
+barPlot(computeStats(acoustic.dta, net, whistling_time_per_dolphin/n_bins),
         NULL,
         net, old_names = c("SSF", "chalut_blanc", "chalut_vert", "tremail", "grand_filet"),
         new_names = c("Absent", "Nylon trawl net", "PE trawl net", "Nylon gill net", "Long nylon gill net"),
         xname="Fishing nets", height=.6,
-        ytitle="Mean whistling time per dolphin per min")+
+        ytitle="Mean whistling time per dolphin per min (in sec)")+
     theme(axis.text.x=element_text(size=8.5))
 
 # BBPs
@@ -455,12 +456,12 @@ barPlot(computeStats(acoustic.dta, net, clicks_per_dolphin),
 # Whistles
 #KW test
 kruskal.test(acoustic.dta$whistling_time_per_dolphin ~ acoustic.dta$beacon)
-names = computeStats(acoustic.dta, beacon, whistling_time_per_dolphin/375)["beacon"]
-barPlot(computeStats(acoustic.dta, beacon, whistling_time_per_dolphin/375),
+names = computeStats(acoustic.dta, beacon, whistling_time_per_dolphin/n_bins)["beacon"]
+barPlot(computeStats(acoustic.dta, beacon, whistling_time_per_dolphin/n_bins),
         NULL,
         beacon, old_names = unlist(names), new_names = unlist(names),
         xname="Signals from bio-inspired beacon", height=0.9, size=3,
-        ytitle="Mean whistling time per dolphin per min")+
+        ytitle="Mean whistling time per dolphin per min (in sec)")+
   theme(axis.text.x=element_text(size=8))+
   scale_x_discrete(guide=guide_axis(n.dodge = 2))
 # NC stands for "Unknown". Corresponding to categories where the beacon was not turned on yet ('BEF')
@@ -468,7 +469,7 @@ barPlot(computeStats(acoustic.dta, beacon, whistling_time_per_dolphin/375),
 # BBPs
 #KW test
 kruskal.test(acoustic.dta$BBPs_per_dolphin ~ acoustic.dta$beacon)
-names = computeStats(acoustic.dta, beacon, whistling_time_per_dolphin/375)["beacon"]
+names = computeStats(acoustic.dta, beacon, BBPs_per_dolphin)["beacon"]
 barPlot(computeStats(acoustic.dta, beacon, BBPs_per_dolphin),
         NULL,
         beacon, old_names = unlist(names), new_names = unlist(names),
@@ -481,7 +482,7 @@ barPlot(computeStats(acoustic.dta, beacon, BBPs_per_dolphin),
 # Clicks
 #KW test
 kruskal.test(acoustic.dta$clicks_per_dolphin ~ acoustic.dta$beacon)
-names = computeStats(acoustic.dta, beacon, whistling_time_per_dolphin/375)["beacon"]
+names = computeStats(acoustic.dta, beacon, clicks_per_dolphin)["beacon"]
 barPlot(computeStats(acoustic.dta, beacon, clicks_per_dolphin),
         NULL,
         beacon, old_names = unlist(names), unlist(names),
@@ -494,7 +495,7 @@ barPlot(computeStats(acoustic.dta, beacon, clicks_per_dolphin),
 
 #### Plots by number of dolphins ####
 # Whistles
-numb_stats_w <- computeStats(acoustic.dta, number, total_whistles_duration/375)
+numb_stats_w <- computeStats(acoustic.dta, number, total_whistles_duration/n_bins)
 numb_stats_w[is.na(numb_stats_w)] <- 0
 numb_stats_w$number <- as.factor(numb_stats_w$number)
 
@@ -504,7 +505,7 @@ numb_stats_w %>%
                 color="red", width=.1, show.legend = FALSE)+
   geom_point() + geom_line() +
   theme_classic() + theme(text=element_text(size=12)) +
-  ylab("Mean whistling time per min")+
+  ylab("Mean whistling time per dolphin per min (in sec)")+
   xlab("Number of dolphins in group")
 
 # BBPs
@@ -518,7 +519,7 @@ numb_stats_b %>%
                 color="red", width=.1, show.legend = FALSE)+
   geom_point() + geom_line() +
   theme_classic() + theme(text=element_text(size=12)) +
-  ylab("Number of BBPs per min")+
+  ylab("Number of BBPs per dolphin per min")+
   xlab("Number of dolphins in group")
 
 # Clicks
@@ -532,13 +533,13 @@ numb_stats_c %>%
                 color="red", width=.1)+
   geom_point() + geom_line() +
   theme_classic() + theme(text=element_text(size=12)) +
-  ylab("Mean number of clicks per min")+
+  ylab("Mean number of clicks per dolphin per min")+
   xlab("Number of echolocation clicks in group")
 
 
 #### Plots by Group ID ####
 # Whistles
-numb_stats_w <- computeStats(acoustic.dta, ID, whistling_time_per_dolphin/375)
+numb_stats_w <- computeStats(acoustic.dta, ID, whistling_time_per_dolphin/n_bins)
 numb_stats_w[is.na(numb_stats_w)] <- 0
 numb_stats_w$ID <- as.factor(numb_stats_w$ID)
 numb_stats_w %>%
@@ -547,7 +548,7 @@ numb_stats_w %>%
                 color="red", width=.1, show.legend = FALSE)+
   geom_point() + scale_x_discrete(guide = guide_axis(n.dodge = 2))+
   theme_light() + theme(text=element_text(size=12)) +
-  ylab("Mean whistling time per min")+
+  ylab("Mean whistling time per dolphin per min (in sec)")+
   xlab("ID of dolphins group")
 
 # BBPs
@@ -561,7 +562,7 @@ numb_stats_b %>%
                 color="red", width=.1, show.legend = FALSE)+
   geom_point() + scale_x_discrete(guide = guide_axis(n.dodge = 2))+
   theme_light() + theme(text=element_text(size=12)) +
-  ylab("Number of BBPs per min")+
+  ylab("Number of BBPs per dolphin per min")+
   xlab("ID of dolphins group")
 
 # Clicks
@@ -575,7 +576,7 @@ numb_stats_c %>%
                 color="red", width=.1)+
   geom_point() + scale_x_discrete(guide = guide_axis(n.dodge = 2))+
   theme_light() + theme(text=element_text(size=12)) +
-  ylab("Mean number of clicks per min")+
+  ylab("Mean number of clicks per dolphin per min")+
   xlab("ID of dolphin group")
 
 # KW test on IDs 
diff --git a/Stats/Rplot.pdf b/Stats/Rplot.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..c0a784b09ff71619a9a38531c657c12fea02ae3c
GIT binary patch
literal 14079
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%0AmA)Js>u+ON@*_Nzp(7M1#x)$-}S#*bk-#25=vm
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
az{$F}B(bOj9MguzrshUms;aL3Zd?FK1&(L{

literal 0
HcmV?d00001

diff --git a/Whistles/1-Identification_of_whistles.py b/Whistles/1-Identification_of_whistles.py
index 82cb471..ec49c2d 100644
--- a/Whistles/1-Identification_of_whistles.py
+++ b/Whistles/1-Identification_of_whistles.py
@@ -55,7 +55,7 @@ print("Parameters ready to use!")
 
 #%% Importation of data and functions
 print("\rImportation of csv data...", end="\r")
-from WhistleUtils import get_csv, plot_spectrums, get_local_maxima, get_trajectories, \
+from WhistleUtils import get_csv, get_local_maxima, get_trajectories, \
 	select_trajectories, sparsity_ridoff, harmonize_trajectories
 data_20_21, audio_paths = get_csv(csv_f, slash="/")
 print("Importation of csv data complete!\n")
diff --git a/Whistles/__pycache__/WhistleUtils.cpython-39.pyc b/Whistles/__pycache__/WhistleUtils.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..74433f17a2ffe316c18bfcba11f488fd62e37294
GIT binary patch
literal 12247
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
A-v9sr

literal 0
HcmV?d00001

-- 
GitLab