analysis.R 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. library(tidyverse)
  2. library(lubridate)
  3. library(nlme)
  4. birthdates <- tribble(~calling_bat, ~calling_bat_birthdate,
  5. "b2", "2017-01-26",
  6. "b4", "2017-01-30",
  7. "b7", "2017-02-08",
  8. "b3", "2017-01-29",
  9. "b5", "2017-02-02",
  10. "b8", "2017-02-08")
  11. birthdates <- birthdates %>%
  12. mutate(calling_bat_birthdate=ymd(calling_bat_birthdate))
  13. load_pup_data <- function(filename) {
  14. data <- read_csv(filename, na="--",
  15. col_types=cols(.default="?", session_id="f",
  16. calling_bat="f", calling_bat_deaf="l", before_deafening="l"))
  17. data <- inner_join(data, birthdates)
  18. # annotate with ages in weeks
  19. data <- data %>%
  20. mutate(age_in_weeks=
  21. floor(as.numeric(as.duration(data$calling_bat_birthdate %--% data$start_time),
  22. "weeks")),
  23. bandwidth=f_max - f_min) %>%
  24. filter(!before_deafening)
  25. data
  26. }
  27. load_pup_activity_data <- function(filename) {
  28. data <- read_csv(filename,
  29. col_types=cols(.default="?", session_id="f",
  30. calling_bat="f", calling_bat_deaf="l", before_deafening="l")) %>%
  31. rename(age_in_weeks=calling_bat_age_in_weeks)
  32. data
  33. }
  34. pup_data <- load_pup_data("../output/pup_calls_for_model.csv")
  35. pup_activity_data <- load_pup_activity_data("../output/pup_activity_for_model.csv")
  36. fit_pup_model <- function(data, response) {
  37. frm <- as.formula(paste(response, "~ calling_bat_deaf*age_in_weeks"))
  38. lme(frm, random=~1 + age_in_weeks | calling_bat,
  39. data=data, control=lmeControl(opt="optim"))
  40. }
  41. anova_p <- function(model) {
  42. result <- as.data.frame(anova(model))
  43. as.data.frame.list(c(p_group=result[["calling_bat_deaf", "p-value"]],
  44. p_age=result[["age_in_weeks", "p-value"]],
  45. p_interaction=result[["calling_bat_deaf:age_in_weeks", "p-value"]]))
  46. }
  47. parameters <- c("call_rms", "call_duration", "f_min", "f_max", "bandwidth",
  48. "f0_mean", "f0_min", "f0_max", "f0_start", "f0_end", "f0_slope",
  49. "spectral_centroid", "mean_aperiodicity")
  50. pup_p <- bind_rows(lapply(parameters,
  51. function(parameter)
  52. anova_p(fit_pup_model(pup_data, parameter))),
  53. anova_p(fit_pup_model(pup_activity_data, "calls_per_10s"))) %>%
  54. mutate(p_group_adjusted=p.adjust(p_group, "BH"),
  55. p_age_adjusted=p.adjust(p_age, "BH"),
  56. p_interaction_adjusted=p.adjust(p_age, "BH"),
  57. parameter=c(parameters, "calls_per_10s"))
  58. write_csv(pup_p, "../output/pup_model_results.csv")