## This script analyzes choice data collected for Experiment 1. # By running this script, you will be able to make figures used in Figure 3 and perform statistical analysis associated with this figure # Read packages library("dplyr") library("ggplot2") library("binom") library("geepack") library("emmeans") ## Read data for Exp 1 in which same target signal was presented from two speakers data_samechoice <- read.csv("Figure3_ChoiceTest_IdenticalSignals_IM.csv",header = T, check.names=F) # full data data_samechoice$ID = factor(data_samechoice$ID) # Analyzing choice data for target signal of 1.25 kHz and 2.5kHz data_samechoice2 <- data_samechoice %>% group_by(Target_freq,Test_type) summary_samechoice_signal_alone <- data_samechoice2 %>% summarise(Choice = sum(Choice), N = n()) %>% mutate(Stimulus = c("Signal alone","Signal alone","Signal alone")) # Proportions choosing signal alone alternative summary_samechoice_signal_masker <- data_samechoice2 %>% summarise(Choice = n() - sum(Choice), N = n()) %>% mutate(Stimulus = c("Signal+masker","Signal+masker","Signal+masker")) # Proportions choosing signal with concurrent masker alternative summary_samechoice <- rbind(summary_samechoice_signal_alone,summary_samechoice_signal_masker) # Analyzing choice data for both target signals pooled together data_samechoice3 <- data_samechoice %>% group_by(Test_type) summary_samechoice_pooled_signal_alone <- data_samechoice3 %>% summarise(Choice = sum(Choice), N = n()) %>% mutate (Stimulus = c("Signal alone","Signal alone","Signal alone")) %>% mutate (Target_freq = c("Pooled","Pooled","Pooled")) # Proportions choosing signal alone alternative summary_samechoice_pooled_signal_masker <- data_samechoice3 %>% summarise(Choice = n() - sum(Choice), N = n()) %>% mutate(Stimulus = c("Signal+masker","Signal+masker","Signal+masker")) %>% mutate (Target_freq = c("Pooled","Pooled","Pooled"))# Proportions choosing signal with concurrent masker alternative summary_samechoice_pooled <- rbind(summary_samechoice_pooled_signal_alone,summary_samechoice_pooled_signal_masker) # Combining data for the two target frequencies pooled and separately summary_samechoice_all <- rbind(summary_samechoice,summary_samechoice_pooled) binomial_samechoice <- binom.exact(summary_samechoice_all$Choice, summary_samechoice_all$N) %>% mutate(Test_type = summary_samechoice_all$Test_type) %>% mutate(Signal = summary_samechoice_all$Target_freq) %>% mutate(Stimulus = summary_samechoice_all$Stimulus) binomial_samechoice$mean <- binomial_samechoice$mean *100 # Convert proportions to percentage choosing binomial_samechoice$lower <- binomial_samechoice$lower *100 # Convert proportions to percentage choosing binomial_samechoice$upper <- binomial_samechoice$upper *100 # Convert proportions to percentage choosing ## Making three plots for Fig 2 (one for each test type) ## # For IM Test Condition binomial_samechoice_IM_test <- binomial_samechoice %>% filter(Test_type == "IM Test") binomial_samechoice_IM_test$Signal <- factor(binomial_samechoice_IM_test$Signal, c("Pooled","1.25kHz", "2.5kHz")) # Fig. 2B ggplot(binomial_samechoice_IM_test, aes(x = Signal, y = mean, fill= Stimulus)) + geom_bar(stat="identity",position=position_dodge(0.95)) + geom_errorbar(aes(ymin=lower, ymax=upper), width=.2, position=position_dodge(0.95)) + theme_classic() + ylab("Choices of each alternative (%)") + scale_fill_manual(values=c("#999999", "#E69F00")) + ylim (0,100) + theme(axis.title.x=element_text(size=20),axis.title.y=element_text(size=20), axis.text.x=element_text(size=18),axis.text.y=element_text(size=18),legend.position="top",legend.title=element_blank(), panel.spacing.x=unit(1, "lines")) # For IM Control Condition binomial_samechoice_IM_control <- binomial_samechoice %>% filter(Test_type == "IM Control") binomial_samechoice_IM_control$Signal <- factor(binomial_samechoice_IM_control$Signal, c("Pooled","1.25kHz", "2.5kHz")) # Fig. 2C ggplot(binomial_samechoice_IM_control, aes(x = Signal, y = mean, fill= Stimulus)) + geom_bar(stat="identity",position=position_dodge(0.95)) + geom_errorbar(aes(ymin=lower, ymax=upper), width=.2, position=position_dodge(0.95)) + theme_classic() + ylab("Choices of each alternative (%)") + scale_fill_manual(values=c("#999999", "#00BA38")) + ylim (0,100) + theme(axis.title.x=element_text(size=20),axis.title.y=element_text(size=20), axis.text.x=element_text(size=18),axis.text.y=element_text(size=18),legend.position="top",legend.title=element_blank(), panel.spacing.x=unit(1, "lines")) # For EM Control Condition binomial_samechoice_EM_control <- binomial_samechoice %>% filter(Test_type == "EM Control") binomial_samechoice_EM_control$Signal <- factor(binomial_samechoice_EM_control$Signal, c("Pooled","1.25kHz", "2.5kHz")) # Fig. 2D ggplot(binomial_samechoice_EM_control, aes(x = Signal, y = mean, fill= Stimulus)) + geom_bar(stat="identity",position=position_dodge(0.95)) + geom_errorbar(aes(ymin=lower, ymax=upper), width=.2, position=position_dodge(0.95)) + theme_classic() + ylab("Choices of each alternative (%)") + scale_fill_manual(values=c("#999999", "#56B4E9")) + ylim (0,100) + theme(axis.title.x=element_text(size=20),axis.title.y=element_text(size=20), axis.text.x=element_text(size=18),axis.text.y=element_text(size=18),legend.position="top",legend.title=element_blank(), panel.spacing.x=unit(1, "lines")) ## Statistical analysis for Experiment 1: identical signals in two-alternative choice tests # Using GEE to test if there is an effect of signal frequency gee.pooled.frequency <- geeglm(Choice ~ Target_freq, id = ID, data = data_samechoice, family = binomial(link="logit"), corstr = "ex", std.err = "san.se") gee.pooled.null <- geeglm(Choice ~ 1, id = ID, data = data_samechoice, family = binomial(link="logit"), corstr = "ex", std.err = "san.se") anova(gee.pooled.frequency, gee.pooled.null) # Using GEE to test for differences between IM Test, IM Control, and EM Control gee_samechoice <- geeglm(Choice ~ Test_type, id = ID, data = data_samechoice, family = binomial(link="logit"), corstr = "ex", std.err = "san.se") emmeans(gee_samechoice, pairwise ~ Test_type, adjust = "none") # Binomial tests to analyze if proportions of subjects choosing one alternative over other are different than chance (0.5) # IM Test Condition binom.test(50, 69, p =0.5, alternative = "two.sided") # Pooled data binom.test(31, 38, p =0.5, alternative = "two.sided") # Target signal 1.25kHz binom.test(19, 31, p =0.5, alternative = "two.sided") # Target signal 2.5kHz # IM Control Condition binom.test(18, 69, p =0.5, alternative = "two.sided") # Pooled data binom.test(8, 37, p =0.5, alternative = "two.sided") # Target signal 1.25kHz binom.test(10, 31, p =0.5, alternative = "two.sided") # Target signal 2.5kHz # EM Control Condition binom.test(29, 68, p =0.5, alternative = "two.sided") # Pooled data binom.test(17, 36, p =0.5, alternative = "two.sided") # Target signal 1.25kHz binom.test(12, 32, p =0.5, alternative = "two.sided") # Target signal 2.5kHz