Datos y limpieza

Author

Luis La Cruz & German Chacón

library(readxl)
library(tidyverse)
Warning: package 'ggplot2' was built under R version 4.3.3
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(egg)
Loading required package: gridExtra

Attaching package: 'gridExtra'

The following object is masked from 'package:dplyr':

    combine
library(tidyverse)
library(ggplot2)
library(ggpmisc)
Warning: package 'ggpmisc' was built under R version 4.3.3
Loading required package: ggpp
Warning: package 'ggpp' was built under R version 4.3.3
Registered S3 methods overwritten by 'ggpp':
  method                  from   
  heightDetails.titleGrob ggplot2
  widthDetails.titleGrob  ggplot2

Attaching package: 'ggpp'

The following object is masked from 'package:ggplot2':

    annotate

Registered S3 method overwritten by 'ggpmisc':
  method                  from   
  as.character.polynomial polynom
library(broom)
Warning: package 'broom' was built under R version 4.3.3
library(ggplot2)
library(patchwork)
library(egg)
library(ggpubr)

Attaching package: 'ggpubr'

The following objects are masked from 'package:ggpp':

    as_npc, as_npcx, as_npcy

The following object is masked from 'package:egg':

    ggarrange
library(readxl)
library(tidyverse)
library(egg)
library(tidyverse)
datos_sv=read_excel("Datos_FM_Tesis_moda.xlsx", sheet="Total_data")

datos_sv_longer=datos_sv %>%
    pivot_longer(cols = c(14:285),
      names_to = c("Frequency"),
      values_to = "Value")

datos_sv_longer$Range=cut(as.numeric(datos_sv_longer$Depth_school), breaks=c(0,5,10,15,20,25,50,100,150,200,250,500),
  include.lowest=F, right=F,labels=c("0-5","5-10","10-15","15-20","20-25","25-50","50-100","100-150","150-200","200-250","250-500"))

datos_sv_longer$Banda_name=cut(as.numeric(datos_sv_longer$Frequency), breaks=c(0,18.1,45,90,170,270),
  include.lowest=F, right=F,labels=c("b0","b1","b2","b3","b4"))

datos_sv_longer$Banda=cut(as.numeric(datos_sv_longer$Frequency), breaks=c(0,18.1,45,90,170,270),
  include.lowest=F, right=F,labels=c("18","35-45","45-90","90-170","170-260"))

Data_Sv=datos_sv_longer[datos_sv_longer$Data=="Sv",]

Datos acústicos por especies

Data_Sv <- Data_Sv %>%
  filter(Class %in% c("Anchoveta", "Múnida","Vinciguerria","Plancton","Salpas","Otros"))

#Data_Std=datos_sv_longer[datos_sv_longer$Data=="Std",]
#Data_Std <- Data_Std %>%
#filter(Class %in% c("Anchoveta", "Múnida","Vinciguerria","Plancton","Salpas","Otros"))


dat=Data_Sv

Plot de densidad “sin filtrar”

ggplot(dat)+
  geom_density(alpha=0.5,size=0.75, aes(fill=Class,x = Value))+
  theme_presentation(base_size = 12)+
  scale_fill_viridis_d()+
   xlab("Sv (dB)")+ 
  ylab("Densidad")+
  facet_wrap(facets = "Class",scales = "free_y",ncol = 1,strip.position = "right")

Limpieza de datos aplicado a los valores acústicos (Sv)

Z-score Modificado

Definir función para filtrar valores atípicos por grupo usando Z-Score modificado

filter_outliers_modified_zscore <- function(data, group_var, value_var, threshold = 3.5) {
  data %>%
    group_by({{group_var}}) %>%
    mutate(median_value = median({{value_var}}, na.rm = TRUE),
           mad_value = mad({{value_var}}, constant = 1, na.rm = TRUE),
           modified_z_score = abs({{value_var}} - median_value) / (mad_value * 1.4826)) %>%
    filter(modified_z_score <= threshold) %>%
    select(-median_value, -mad_value, -modified_z_score)
}

# Aplicar la función para filtrar valores atípicos por grupo usando Z-Score modificado
dat_clean_modified_zscore <- dat %>%
  filter_outliers_modified_zscore(Class, Value, threshold = 3.5)
ggplot(dat_clean_modified_zscore)+
  geom_density(alpha=0.5,size=0.75, aes(fill=Class,x = Value))+
  theme_presentation(base_size = 12)+
  scale_fill_viridis_d(name="Especie")+
   xlab("Sv (dB)")+ 
  ylab("Densidad")+
  facet_wrap(facets = "Class",scales = "free_y",ncol = 1,strip.position = "right")

Box plot utilizando los datos limpios:

library(ggplot2)

ggplot(dat_clean_modified_zscore)+
  geom_boxplot(alpha=0.5,size=0.75, aes(fill=Class,y = Value, x=Class), show.legend = F)+
  theme_presentation(base_size = 15) +
  ylab("Sv (dB)")+
  scale_fill_viridis_d()+
  theme(legend.position = "top")+
  theme(panel.grid.major.y = element_line(color = "gray", linetype = "dashed"))

ggplot(dat_clean_modified_zscore)+
  geom_boxplot(alpha=0.5,size=0.75, aes(fill=Class,y = Value, x=Class), show.legend = F)+
  theme_presentation(base_size = 12) +
  ylab("Sv (dB)")+ 
  scale_fill_viridis_d()+
  theme(legend.position = "top")+ 
  theme(panel.grid.major.y = element_line(color = "gray", linetype = "dashed"))+
  facet_wrap(~Banda)

ggplot(dat_clean_modified_zscore)+
  geom_boxplot(alpha=0.5,size=0.75, aes(fill=Class,y = Value, x=Banda), show.legend = F)+
  theme_presentation(base_size = 12) +
  ylab("Sv (dB)")+ 
  xlab("Frecuencia (kHz)")+
  scale_fill_viridis_d()+
  theme(legend.position = "top")+ 
  theme(panel.grid.major.y = element_line(color = "gray", linetype = "dashed"))+
  facet_wrap(~Class)

write.csv(dat_clean_modified_zscore,"dat_clean_modified_zscore_especies.csv")