## All R code for: #The mtDNA mutation spectrum in the PolG mutator mouse reveals germline and somatic selection (2021) #Maclaine, Kendra D, Stebbings, Kevin A, Havird, Justin C ## Edited 8_30_21 ##This is the main figures and data processing ## Author: KM #data processing and graphing library(tidyverse) library(gridExtra) library(ggpubr) library(colorspace) library(ggoutlier) #statistics library(lmerTest) library(lattice) library(car) library(zoo) library(scales) library(rstatix) #Open PolG files, guess max allows for proper identification of some of the columns that have NAs early on PolGData = read_csv("Additional_File_5.csv",guess_max = 5000,skip=1); PolGData_indels = read_csv("Additional_File_6.csv",skip=1); #Open coding status file, this has all the gene annotations coding_status_sheet = read_csv("Additional_File_7.csv",skip=1); #Open WT file WTData = read_csv("Additional_File_3.csv",skip=1) WTData_indels = read_csv("Additional_File_4.csv",skip=1); #open nucleotide bias file c_bias = read_csv("Additional_File_8.csv") #ci95 function ci95 <- function(x) sd(x)/sqrt(length(x))*qt(1 - (0.05 / 2), n() - 1) mt_genome_length = 16299 #function to normalize count and freq lines #changed min to zero normal <- function(x){(x/max(x))} ######FIG 2 Data Prep###### #collapse by animal and divide by genome length, also label as liver WT.fig2 <- WTData %>% group_by(Animal,tissue) %>% summarise(freq = sum(mut_freq), count = n()) %>% mutate(count = count/mt_genome_length,freq = freq/mt_genome_length) #groups by Animal, tissue, somatic status, gets counts and frequncies, divides by genome length. # needs a dataframe that excludes the totals for the lmer fig_2_data_exclude_total <- PolGData %>% group_by(Animal, tissue, som_germ) %>% summarise(freq = sum(mut_freq), count = n())%>% mutate(count = count/mt_genome_length,freq = freq/mt_genome_length) %>% mutate(count_cube_root = count^(1/3),freq_cube_root = freq^(1/3)) #Rremoves brain germline in a separate column, since the data is repeated in liver in count, adds totals (som+germ) fig2_data <- bind_rows (fig_2_data_exclude_total, PolGData %>% group_by(Animal, tissue) %>% summarise(freq = sum(mut_freq), count = n())%>% mutate(count = count/mt_genome_length,freq = freq/mt_genome_length,som_germ = "Total"))%>% mutate(count_no_brn_germ=replace(count, tissue=="Brain"&som_germ =="Germline", NA)) #Get the standard error of the count values fig2_data.error <- fig2_data %>% ungroup() %>% group_by(som_germ,tissue) %>% summarise(ci_count=ci95(count_no_brn_germ),ci_freq=ci95(freq),count_no_brn_germ=mean(count_no_brn_germ),freq=mean(freq)) ######Fig 2 Plotting###### fig2_text_size= 16 fig2_axis_size = 14 twoaa <- ggplot(fig2_data,aes(x =factor(som_germ), y=count_no_brn_germ,fill=tissue))+ geom_dotplot(binwidth = .001,binaxis="y",stackdir="center",position=position_dodge(width=0.9))+ scale_fill_grey(start=0.95, end =0.5)+ geom_errorbar(data=na.omit(fig2_data.error), aes(ymax=count_no_brn_germ+ci_count, ymin=count_no_brn_germ-ci_count),color="black",position=position_dodge(width=0.9),size=.6,width=0.5)+ stat_summary(fun=median,geom="point",position=position_dodge(width=0.9),color="black",show.legend=FALSE,size=3.5)+ theme_classic()+ labs(x="PolG",y="Mutation Count",size= fig2_text_size)+ scale_y_continuous(expand = c(0.02, 0),limits=c(0,0.05))+ annotate("text", x="Germline",y=0, label="*",color="Black",size=8)+ theme(legend.position = c(0.2, 0.95),legend.text=element_text(size=fig2_text_size,face="bold"),legend.title=element_blank(),axis.text=element_text(size = fig2_axis_size),axis.title=element_text(size=fig2_text_size),plot.margin = unit(c(0.5,-0.5,0.5,0.5),"cm")) twoab<-ggplot(WT.fig2,aes(x=factor("Total"),y=count,fill=tissue))+ geom_dotplot(binwidth = .001,binaxis="y",stackdir="center",position=position_dodge(width=0.9))+ scale_fill_grey(start=0.95, end =0.5)+ theme_classic()+ scale_y_continuous(expand = c(0.02, 0),limits=c(0,0.05))+ labs(x="WT",y="",size= fig2_text_size)+ theme(legend.position="ntwo",axis.text.y=element_blank(),axis.text=element_text(size = fig2_axis_size),axis.title=element_text(size=fig2_text_size),plot.margin = unit(c(0.5,0.5,0.5,-0.5),"cm")) twoa<-grid.arrange(twoaa,twoab,widths=c(1,0.25),ncol=2) twoba<-ggplot(fig2_data,aes(x =som_germ, y=freq,fill=factor(tissue)))+ geom_dotplot(binwidth = .000015,binaxis="y",stackdir="center",position=position_dodge(width=0.9))+ geom_errorbar(data=fig2_data.error, aes(ymax=freq+ci_freq, ymin=freq-ci_freq),color="black",position=position_dodge(width=0.9),size=.6,width=0.5)+ stat_summary(fun=median,geom="point",position=position_dodge(width=0.9),color="black",show.legend=FALSE,size=3.5)+ scale_fill_grey(start=0.95, end =0.5)+ theme_classic()+ scale_y_continuous(expand = c(0.025, 0),limits=c(0,7e-04))+ labs(x="PolG",y="Mutation Frequency",size=fig2_text_size)+ theme(legend.position = "ntwo",axis.text=element_text(size = fig2_axis_size),axis.title=element_text(size=fig2_text_size),plot.margin = unit(c(0.5,-0.5,0.5,0.5),"cm")) twobb<-ggplot(WT.fig2,aes(x=factor("Total"),y=freq,fill=tissue))+ geom_dotplot(binwidth = .000015,binaxis="y",stackdir="center",position=position_dodge(width=0.9))+ scale_fill_grey(start = 0.5)+ theme_classic()+ scale_y_continuous(expand = c(0.025, 0),limits=c(0,7e-04))+ labs(x="WT",y="",size= fig2_text_size)+ theme(axis.text.y=element_blank(),axis.text=element_text(size = fig2_axis_size),axis.title=element_text(size=fig2_text_size),plot.margin = unit(c(0.5,0.5,0.5,-0.5),"cm"),legend.position="ntwo") twob<-grid.arrange(twoba,twobb,widths=c(1,0.25),ncol=2) ggarrange(twoa,twob,labels=c('A','B'),align="hv",font.label = list(size = 24, color = "black")) ######Fig 3 Data Prep###### level_order=c("CDS","tRNA","rRNA","D-loop") #Fig 3AB Data Prep #filters by liver, groups by reference number and gene fig3a_data <- PolGData %>% filter(tissue == "Liver") %>% group_by(refl=ref_num,gene=coding_non) %>% summarise(freq=mean(mut_freq),count=n()) %>% ungroup %>% mutate(normal_freq = normal(freq),normal_count = normal(count))%>% complete(refl=1:16299,fill=list(freq=0,count=0,normal_freq=0,normal_count=0)) #fig3B,D Data Prep #Filters by liver, groups by coding status fig3bd_data <- PolGData %>% filter(tissue =="Liver") %>% group_by(Animal,coding_status=coding_non) %>% summarise(freq = sum(mut_freq_div_len), count = sum(count_div_len)) %>% filter(coding_status!="") #fig3B,C error fig3bd_data.error <- fig3bd_data %>% ungroup() %>% group_by(coding_status) %>% summarise(ci_count=ci95(count),ci_freq=ci95(freq),count=mean(count),freq=mean(freq)) #fig3 fig3ce_data <- PolGData %>% filter(tissue =="Liver") %>% group_by(Animal,coding_status=coding_non,som_germ) %>% summarise(freq = sum(mut_freq_div_len), count = sum(count_div_len)) %>% filter(coding_status!="")%>% ungroup%>% complete(coding_status,nesting(som_germ,Animal)) ######Fig 3 Plotting###### fig3_median_dot_size = 2.5 fig3A_text_size=7 y_pos_labels=.28 threeaa<- ggplot(fig3a_data, aes(x=refl, y=freq)) + geom_rect(data=coding_status_sheet, mapping=aes(xmin=start, xmax=end, ymin=-Inf, ymax=Inf,fill=factor(coding_status,levels = c("tRNA","rRNA","CDS","D-loop"))),inherit.aes = FALSE,alpha=0.8)+ geom_vline(xintercept=coding_status_sheet$start,color="black",size=0.1,alpha=1)+ scale_fill_discrete_sequential(palette = "YlOrBr",nmax = 6, order = 2:6)+ geom_point(size=0.5) + scale_x_continuous(limits = c(0,mt_genome_length), expand = c(.01, .01))+ scale_y_continuous(limits = c(0,.3), expand = c(0.001, 0.0001))+ theme_classic()+ ylab("Mean Mutation Frequency")+ annotate(geom="text", x=c(550,1800,3229,4432.5,6100,7354.5,8267,8998.5,10855.5,12653.5,13811,14716.5), y=y_pos_labels, label=c("12S rRNA","16S rRNA","ND1","ND2","COXI","COXII","ATP6","COXIII","ND4","ND5","ND6","CYTB"),color="Black",size=3)+ annotate(geom="text", x=c(7867.5,9632.5,10025), y=y_pos_labels, label=c("ATP8","ND3","ND4L"),color="Black",size=3,angle=-90)+ theme(legend.title=element_blank(),axis.text=element_text(size=fig3A_text_size-2),axis.title=element_text(size=fig3A_text_size),axis.title.x=element_blank(),axis.text.x=element_blank(),axis.title.y = element_text(margin = margin(t = 0, r = 5.2, b = 0, l = 0)),plot.margin = unit(c(0,.10,0,.10), "cm"),axis.ticks.length.x = unit(0, "mm"),legend.position="top") threeab<- ggplot(fig3a_data) + geom_rect(data=coding_status_sheet, mapping=aes(xmin=start, xmax=end, ymin=-Inf, ymax=Inf,fill=factor(coding_status,levels = c("tRNA","rRNA","CDS","D-loop"))),inherit.aes = FALSE,alpha=0.8)+ geom_vline(xintercept=coding_status_sheet$start,color="black",size=0.1,alpha=1)+ guides(fill=FALSE)+ scale_fill_discrete_sequential(palette = "YlOrBr",nmax = 6, order = 2:6)+ geom_line(aes(x=refl,y=normal(rollmean(count,250,na.pad=TRUE,fill=0)),color="black"))+ geom_line(aes(x=refl,y=normal(rollmean(freq,250,na.pad=TRUE,fill=0)),color="darkgrey"))+ scale_colour_manual("", values = c("black", "darkgrey"),labels=c("Frequency","Count")) + scale_x_continuous(limits = c(0,mt_genome_length), expand = c(.01, .01))+ scale_y_continuous(limits = c(0,1.05))+ xlab("Reference")+ ylab("Relative Rolling Mean")+ theme_classic()+ theme( axis.text.y=element_text(size=fig3A_text_size-2),axis.text.x=element_text(size=fig3A_text_size),axis.title.y=element_text(size=fig3A_text_size),axis.title.x=element_text(size=fig3A_text_size+2), plot.margin = unit(c(0.05,.10,.10,.10), "cm"),legend.position=c(.09,.87),legend.background = element_rect(color="white"),legend.margin = margin(0.1, 0.02,2, 0.02),legend.direction = "horizontal", plot.background = element_rect(fill = "transparent", color = NA),legend.text = element_text(size=fig3A_text_size-1) ) #combines 3Aa and 3Ab threea<-grid.arrange(threeaa,threeab,heights=c(1,.75)) threeb<-ggplot(fig3bd_data,aes(x =factor(coding_status,level=level_order), y=count))+ geom_dotplot(binwidth = .0007,binaxis="y",stackdir="center",fill="darkgrey")+ stat_summary(fun=median,geom="point",position=position_dodge(width=0.7),color="black",size=fig3_median_dot_size,show.legend=FALSE)+ geom_errorbar(data=fig3bd_data.error, aes(ymax=count+ci_count, ymin=count-ci_count),color="black",position=position_dodge(width=0.7),size=.6,width=0.5)+ theme_classic()+ labs(x="",y="Mutation Count")+ theme(axis.text=element_text(size=8),axis.title=element_text(size=10)) threec<-ggplot(fig3ce_data,aes(factor(coding_status,level=level_order),Animal,fill=count))+ geom_tile(color="darkgrey")+ scale_fill_continuous_sequential(palette = "Blues",begin=0.1,p1=1.1,p2=.9,na.value="white")+ theme_minimal()+ labs(title="Mutation Count")+ facet_grid(rows=factor(fig3ce_data$som_germ))+ theme(axis.title.x=element_blank(),legend.position="bottom",axis.text=element_text(size=8),axis.title=element_text(size=10),legend.title=element_blank(),title=element_text(size=8)) threed<-ggplot(fig3bd_data,aes(x =factor(coding_status,level=level_order), y=freq))+ geom_dotplot(binwidth = .000015,binaxis="y",stackdir="center",fill="darkgrey")+ geom_errorbar(data=fig3bd_data.error, aes(ymax=freq+ci_freq, ymin=freq-ci_freq),color="black",position=position_dodge(width=0.7),size=.6,width=0.5)+ stat_summary(fun=median,geom="point",position=position_dodge(width=0.7),color="black",size=fig3_median_dot_size,show.legend=FALSE)+ theme_classic()+ labs(x="",y="Mutation Frequency",size=10)+ theme(axis.text=element_text(size=8),axis.title=element_text(size=10)) threee<-ggplot(fig3ce_data,aes(factor(coding_status,level=level_order),Animal,fill=freq))+ geom_tile(color="darkgrey")+ facet_grid(rows=factor(fig3ce_data$som_germ))+ scale_fill_continuous_sequential(palette = "Blues",begin=0.1,p1=1.1,p2=.9,na.value="white")+ theme_minimal()+ ggtitle("Mutation Frequency")+ theme(legend.position="bottom")+ theme(axis.title.x=element_blank(),legend.position="bottom",axis.text=element_text(size=8),axis.title=element_text(size=10),legend.title=element_blank(),title=element_text(size=8),legend.text=element_text(size=5)) #combines all of fig3 ggarrange(threea,ggarrange(threeb,threec,threed,threee,ncol=4,labels=c("B","C","D","E"),widths=c(1,1,1,1)),nrow=2,labels=c("A"),heights=c(1.5,2)) ######fig4 Data Prep###### level_order=c("silent","missense","nonsense") #gets rid of non coding regions, groups by animal, mut type and completes the dataframe with zeroes fig4ad_data <- PolGData %>% filter(tissue == "Liver"&!is.na(mut_type)) %>% group_by(Animal,mut_type) %>% summarise(freq = sum(mut_freq), count = n()) %>% mutate(freq = freq/mt_genome_length,count=count/mt_genome_length)%>% ungroup()%>% complete(mut_type,nesting(Animal),fill=list(freq=0,count=0)) #means and ci for error bars fig4ad_data.error <- fig4ad_data %>% ungroup() %>% group_by(mut_type) %>% summarise(ci_count=ci95(count),ci_freq=ci95(freq),count=mean(count),freq=mean(freq)) #Aggregates mut count data by animal, tissue, som germ status, and mutation type fig4be_data <- PolGData %>% filter(tissue == "Liver"&!is.na(mut_type)) %>% group_by(Animal,som_germ,mut_type) %>% summarise(freq = sum(mut_freq), count = n()) %>% mutate(freq = freq/mt_genome_length,count=count/mt_genome_length)%>% ungroup%>% complete(mut_type,nesting(som_germ,Animal)) #Fig 4 position graphs fig4cf_position_data <- PolGData %>% filter(tissue == "Liver"&!is.na(position)) %>% group_by(Animal,position) %>% summarise(freq = sum(mut_freq), count = n()) %>% mutate(freq = freq/mt_genome_length,count=count/mt_genome_length)%>% mutate(count_cube_root = count^(1/3),freq_cube_root = freq^(1/3)) fig4cf_position.error <- fig4cf_position_data %>% ungroup() %>% group_by(position) %>% summarise(ci_count=ci95(count),ci_freq=ci95(freq),count=mean(count),freq=mean(freq)) ######Fig 4 Plotting###### foura<- ggplot(fig4ad_data,aes(x =factor(mut_type,level=level_order), y=count))+ geom_dotplot(binwidth = 0.00032,binaxis="y",stackdir="center",fill="darkgrey")+ geom_errorbar(data=fig4ad_data.error, aes(ymax=count+ci_count, ymin=count-ci_count),color="black",position=position_dodge(width=0.7),size=.6,width=0.5)+ stat_summary(fun=median,geom="point",position=position_dodge(width=0.7),color="black",show.legend=FALSE,size=3)+ ylab("count")+ scale_fill_grey()+ theme_classic()+ labs(x="",y="Mutation Count",size=12)+ theme(axis.text=element_text(size=10),axis.title=element_text(size=12)) fourb<- ggplot(fig4be_data,aes(factor(mut_type,level=level_order),Animal,fill=count))+ geom_tile(color="grey")+ facet_grid(rows=factor(fig4be_data$som_germ))+ scale_fill_continuous_sequential(palette = "Reds 2",begin=0.1,p1=1.1,p2=.9,na.value="white")+ theme_minimal()+ ggtitle("Mutation Count")+ theme(legend.position="bottom")+ theme(axis.title.x=element_blank(),legend.position="bottom",axis.text=element_text(size=10),axis.title=element_text(size=10),legend.title=element_blank(),title=element_text(size=8),legend.text=element_text(size=8),legend.key.width=unit(35,"pt")) fourc<- ggplot(na.omit(fig4cf_position_data),aes(x=factor(position),y=count,fill="grey"))+ geom_dotplot(binwidth = 0.00030,binaxis="y",stackdir="center",position=position_dodge(width=0.7),fill="darkgrey")+ ylab("count")+ geom_errorbar(data=fig4cf_position.error, aes(ymax=count+ci_count, ymin=count-ci_count),color="black",position=position_dodge(width=0.7),size=.6,width=0.5)+ stat_summary(fun=median,geom="point",position=position_dodge(width=0.7),color="black",show.legend=FALSE,size=3.5)+ theme_classic()+ labs(x="Codon Position",y="Mutation Count",size= fig2_text_size)+ scale_y_continuous(expand = c(0.02, 0),limits=c(0,0.02))+ theme(legend.position ="none",legend.text=element_text(size=fig2_text_size,face="bold"),legend.title=element_blank(),axis.text=element_text(size = 10),axis.title=element_text(size=12)) fourd<- ggplot(fig4ad_data,aes(x =factor(mut_type,level=level_order), y=freq))+ geom_dotplot(binwidth = .000004,binaxis="y",stackdir="center",fill="darkgrey")+ geom_errorbar(data=na.omit(fig4ad_data.error), aes(ymax=freq+ci_freq, ymin=freq-ci_freq),color="black",position=position_dodge(width=0.7),size=.6,width=0.5)+ stat_summary(fun=median,geom="point",position=position_dodge(width=0.7),color="black",show.legend=FALSE,size=3)+ ylab("count")+ xlab("")+ theme_classic()+ labs(x="",y="Mutation Frequency",size=12)+ theme(axis.text=element_text(size=10),axis.title=element_text(size=12)) foure<- ggplot(fig4be_data,aes(factor(mut_type,level=level_order),Animal,fill=freq))+ geom_tile(color="grey")+ facet_grid(rows=factor(fig4be_data$som_germ))+ scale_fill_continuous_sequential(palette = "Reds 2",begin=0.1,p1=1.1,p2=.9,na.value="white")+ theme_minimal()+ ggtitle("Mutation Frequency")+ theme(legend.position="bottom")+ theme(axis.title.x=element_blank(),legend.position="bottom",axis.text=element_text(size=10),axis.title=element_text(size=10),legend.title=element_blank(),title=element_text(size=8),legend.text=element_text(size=8),legend.key.width=unit(35,"pt")) fourf<- ggplot(na.omit(fig4cf_position_data),aes(x=factor(position),y=freq,fill="grey"))+ geom_dotplot(binwidth = .000004,binaxis="y",stackdir="center",position=position_dodge(width=0.7),fill="darkgrey")+ ylab("freq")+ scale_fill_grey()+ geom_errorbar(data=fig4cf_position.error, aes(ymax=freq+ci_freq, ymin=freq-ci_freq),color="black",position=position_dodge(width=0.7),size=.6,width=0.5)+ stat_summary(fun=median,geom="point",position=position_dodge(width=0.7),color="black",show.legend=FALSE,size=3.5)+ theme_classic()+ labs(x="Codon Position",y="Mutation Frequency",size= fig2_text_size)+ scale_y_continuous(expand = c(0.02, 0),limits=c(0,0.0003))+ theme(legend.position = "none",legend.text=element_text(size=fig2_text_size,face="bold"),legend.title=element_blank(),axis.text=element_text(size = 10),axis.title=element_text(size=12)) fourad<-ggarrange(foura,fourd,labels = c("A","D"),ncol=1,align="hv") fourbe<-ggarrange(fourb,foure,labels = c("B","E"),ncol=1,align="hv") fourcf<-ggarrange(fourc,fourf,labels = c("C","F"),ncol=1,align="hv") ggarrange(fourad,fourbe,fourcf,ncol=3,widths=c(1,1,0.75)) ######Fig 5 Data Prep###### #filters to only liver, replaces redundant mutations fig5ab_data <- PolGData %>% filter(tissue=="Liver") %>% unite("mut",ref,mutated_base) %>% mutate(type=str_replace_all(mut, c( "C_T"="C->T(G->A)","G_A"="C->T(G->A)", "T_C"="T->C(A->G)","A_G"="T->C(A->G)", "C_A"="C->A(G->T)","G_T"="C->A(G->T)", "C_G"="C->G(G->C)","G_C"="C->G(G->C)", "T_A"="T->A(A->T)","A_T"="T->A(A->T)", "T_G"="T->G(A->C)","A_C"="T->G(A->C)") ) ) %>% group_by(Animal,type) %>% summarise(freq = sum(mut_freq), count = n()) %>% mutate(freq = freq/mt_genome_length,count=count/mt_genome_length) %>% ungroup %>% complete(type,nesting(Animal),fill=list(freq=0,count=0))%>% mutate(count_cube_root = count^(1/3),freq_cube_root = freq^(1/3)) #mean, ci for graph fig5ab_data.error <- fig5ab_data %>% ungroup() %>% group_by(type) %>% summarise(ci_count=ci95(count),ci_freq=ci95(freq),count=mean(count),freq=mean(freq)) #Need this for plotting. Has all of the groups fig5c_data <- PolGData %>% filter(tissue=="Liver") %>% filter(mut_type != "silent")%>% unite("mut",ref,mutated_base) %>% mutate(type=str_replace_all(mut, c("C_T"="CT","G_A"="CT", "T_C"="TC","A_G"="TC", "C_A"="CA","G_T"="CA", "C_G"=NA,"G_C"=NA, "T_A"="TA","A_T"="TA", "T_G"=NA,"A_C"=NA) ) ) %>% drop_na%>% group_by(Animal,type,amino_start_group,amino_mut_group)%>% summarise(freq = sum(mut_freq), count = n()) %>% ungroup %>% mutate(ratio=freq/count,freq = freq/mt_genome_length,count=count/mt_genome_length) %>% complete(type,amino_mut_group,amino_start_group,nesting(Animal),fill=list(freq=NA,count=NA)) #Need this for plotting. Has all of the groups fig5c_data <- PolGData %>% filter(tissue=="Liver") %>% filter(mut_type != "silent")%>% unite("mut",ref,mutated_base) %>% mutate(type=str_replace_all(mut, c("C_T"="CT","G_A"="CT", "T_C"="TC","A_G"="TC", "C_A"="CA","G_T"="CA", "C_G"=NA,"G_C"=NA, "T_A"="TA","A_T"="TA", "T_G"=NA,"A_C"=NA) ) ) %>% drop_na%>% group_by(Animal,type,amino_start_group,amino_mut_group)%>% summarise(freq = sum(mut_freq), count = n()) %>% ungroup %>% mutate(ratio=freq/count,freq = freq/mt_genome_length,count=count/mt_genome_length) %>% complete(type,amino_mut_group,amino_start_group,nesting(Animal),fill=list(freq=NA,count=NA)) #This is for stats. Only C to T hydrophobic and hydrophilic fig5c_data_ratio <- PolGData %>% filter(tissue=="Liver") %>% filter(mut_type != "silent")%>% unite("mut",ref,mutated_base) %>% mutate(type=str_replace_all(mut, c("C_T"="C->T(G->A)","G_A"="C->T(G->A)", "T_C"="T->C(A->G)","A_G"="T->C(A->G)", "C_A"="C->A(G->T)","G_T"="C->A(G->T)", "C_G"=NA,"G_C"=NA, "T_A"="T->A(A->T)","A_T"="T->A(A->T)", "T_G"=NA,"A_C"=NA) ) ) %>% drop_na%>% group_by(type,amino_start_group,amino_mut_group)%>% summarise(freq = sum(mut_freq), count = n()) %>% ungroup %>% mutate(ratio=freq/count,freq = freq/mt_genome_length,count=count/mt_genome_length) %>% complete(type,amino_mut_group,amino_start_group,fill=list(freq=NA,count=NA))%>% filter((amino_start_group == "Hydrophobic" | amino_start_group =="Hydrophilic") & (amino_mut_group == "Hydrophilic" | amino_mut_group =="Hydrophobic")) ######Fig 5 Plotting###### fivea<- ggplot(fig5ab_data,aes(x =factor(type), y=count))+ geom_dotplot(binwidth = .0005,binaxis="y",stackdir="center",fill="darkgrey")+ geom_errorbar(data=fig5ab_data.error, aes(ymax=count+ci_count, ymin=count-ci_count),color="black",position=position_dodge(width=0.5),size=.6,width=0.3)+ stat_summary(fun=median,geom="point",position=position_dodge(width=0.7),color="black",show.legend=FALSE,size=3)+ ylab("Mutation Count")+ xlab("")+ scale_fill_grey()+ theme_classic()+ labs(x="",y="Mutation Count",size=10)+ theme(axis.text=element_text(size=8),axis.title=element_text(size=10)) fiveb<- ggplot(fig5ab_data,aes(x =factor(type), y=freq))+ geom_dotplot(binwidth = .0000075,binaxis="y",stackdir="center",fill="darkgrey")+ geom_errorbar(data=fig5ab_data.error, aes(ymax=freq+ci_freq, ymin=freq-ci_freq),color="black",position=position_dodge(width=0.5),size=.6,width=0.3)+ stat_summary(fun=median,geom="point",position=position_dodge(width=0.7),color="black",show.legend=FALSE,size=3)+ ylab("Mutation Count")+ xlab("")+ scale_fill_grey()+ theme_classic()+ labs(x="",y="Mutation Frequency",size=10)+ theme(axis.text=element_text(size=8),axis.title=element_text(size=10)) fivec<- ggplot(fig5c_data_ratio, aes(x=factor(type),y=amino_start_group))+ geom_tile(aes(fill=count),color="grey")+ theme_minimal()+ facet_grid(~amino_mut_group)+ scale_fill_continuous_sequential(palette = "YlOrBr",begin=0.0001,p1=1.1,p2=.9,na.value="white")+ ylab("Reference Amino Acid ")+ xlab("Mutation Type")+ ggtitle("Count")+ theme(axis.text.y=element_text(angle=90,hjust=0.5),axis.text=element_text(size=8),axis.title=element_text(size=10),legend.title=element_blank(),title=element_text(size=8),legend.text=element_text(size=8),plot.title=element_text(size=14),legend.position="right") fived<- ggplot(fig5c_data_ratio, aes(x=factor(type),y=amino_start_group))+ geom_tile(aes(fill=freq),color="grey")+ theme_minimal()+ facet_grid(~amino_mut_group)+ scale_fill_continuous_sequential(palette = "YlOrBr",begin=0.0001,p1=1.1,p2=.9,na.value="white")+ ylab("Reference Amino Acid ")+ xlab("Mutation Type")+ ggtitle("Frequency")+ theme(axis.text.y=element_text(angle=90,hjust=0.5),axis.text=element_text(size=8),axis.title=element_text(size=10),legend.title=element_blank(),title=element_text(size=8),legend.text=element_text(size=8),plot.title=element_text(size=14),legend.position="right") ggarrange(fivea,fiveb,fivec,fived,labels=c('A','B','C','D'),ncol=1) ######Fig 6 Data Prep###### #filters to only liver, no redudant mutations fig6a_data <- PolGData %>% filter(tissue=="Liver",som_germ=="Somatic") %>% unite("mut",ref,mutated_base) %>% mutate(mut=str_replace_all(mut, c( "C_T"="C->T","G_A"="G->A", "T_C"="T->C","A_G"="A->G", "C_A"="C->A","G_T"="G->T", "C_G"="C->G","G_C"="G->C", "T_A"="T->A","A_T"="A->T", "T_G"="T->G","A_C"="A->C") ) ) %>% group_by(Animal,mut) %>% summarise(freq = sum(mut_freq), count = n()) %>% mutate(ref = str_split(mut,"-",simplify = TRUE)[ , 1]) %>% left_join(.,c_bias,by = c("ref" = "Nucleotide","Animal")) %>% mutate(freq = (freq/C_normalized)/mt_genome_length,count=(count/C_normalized)/mt_genome_length) %>% ungroup %>% complete(mut,nesting(Animal),fill=list(freq=0,count=0))%>% mutate(count_cube_root = count^(1/3),freq_cube_root = freq^(1/3))%>% filter(mut!="T->G",mut!="A->C",mut!="C->G",mut!="G->C") #mean, ci for fig 6 fig6a_data.error <- fig6a_data %>% ungroup() %>% group_by(mut) %>% summarise(ci_count=ci95(count),ci_freq=ci95(freq),count=mean(count),freq=mean(freq)) fig6b_data <-PolGData %>% filter(tissue=="Liver",som_germ=="Somatic") %>% unite("mut",ref,mutated_base) %>% mutate(mut=str_replace_all(mut, c( "C_T"="C->T","G_A"="G->A", "T_C"="T->C","A_G"="A->G", "C_A"="C->A","G_T"="G->T", "C_G"="C->G","G_C"="G->C", "T_A"="T->A","A_T"="A->T", "T_G"="T->G","A_C"="A->C") ) ) %>% filter((mut=="C->T" | mut=="G->A")&( mut_type=="missense"|mut_type=="silent"))%>% group_by(Animal,mut,mut_type) %>% summarise(freq = sum(mut_freq), count = n()) %>% mutate(freq = (freq)/mt_genome_length,count=(count)/mt_genome_length) %>% ungroup %>% complete(mut,nesting(Animal),fill=list(freq=0,count=0))%>% mutate(count_cube_root = count^(1/3),freq_cube_root = freq^(1/3)) #mean, ci for graph no redund fig6b_data.error <- fig6b_data %>% ungroup() %>% group_by(mut,mut_type) %>% summarise(ci_count=ci95(count),count=mean(count)) sixa<- ggplot(fig6a_data,aes(x =factor(mut, levels=c("C->A","G->T","C->T","G->A","T->A","A->T","T->C","A->G")), y=count))+ geom_dotplot(binwidth = .0002,binaxis="y",stackdir="center",fill="darkgrey")+ stat_summary(fun=median,geom="point",position=position_dodge(width=0.7),color="black",show.legend=FALSE,size=3)+ geom_errorbar(data=fig6a_data.error, aes(ymax=count+ci_count, ymin=count-ci_count),color="black",position=position_dodge(width=0.5),size=.6,width=0.3)+ scale_fill_grey()+ theme_classic()+ labs(x="Light Strand Mutation",y="Nucleotide-bias Corrected Mutation Count",size=10,title="")+ theme(axis.text=element_text(size=12),axis.title=element_text(size=14))+ geom_vline(xintercept=c(2.5,4.5,6.5,8.5,10.5))+ geom_rect(xmin=2.75,xmax=4.25,ymin=0,ymax=0.018,fill="transparent",color="red") sixb<-ggplot(fig6b_data,aes(x =factor(mut, levels=c("C->T","G->A")), y=count, fill=mut_type))+ geom_dotplot(binwidth = .0002,binaxis="y",stackdir="center",position=position_dodge(width=0.7))+ geom_errorbar(data=fig6b_data.error, aes(ymax=count+ci_count, ymin=count-ci_count),color="black",position=position_dodge(width=0.7),size=1,width=0.2)+ stat_summary(fun=median,geom="point",position=position_dodge(width=0.7),color="black",show.legend=FALSE,size=3)+ scale_fill_grey(start = 0.5)+ geom_vline(xintercept = 1.5)+ theme_classic()+ labs(x="Light Strand Mutation",y="Mutation Count",size=10,title="")+ theme(legend.position = c(0.2, 0.95),legend.text=element_text(size=fig2_text_size,face="bold"),legend.title=element_blank(),axis.text=element_text(size = fig2_axis_size-2),axis.title=element_text(size=fig2_text_size-2),plot.margin = unit(c(0.5,-0.5,0.5,0.5),"cm")) ggarrange(sixa,sixb,labels=c("A","B"),align="h",widths=c(1,0.75)) ######FIG 7 Data Prep###### PolGData_indels_L<-filter(PolGData_indels,tissue=="Liver") #collapse by animal and divide by genome length, alose label as liver WT.fig7 <- WTData_indels %>% group_by(Animal) %>% filter(tissue=="Liver")%>% summarise(freq = sum(mut_freq), count = n()) %>% mutate(count = count/mt_genome_length,freq = freq/mt_genome_length,WT_Liver = "WT Liver") #Get the standard error of the count values WT.fig7.error <- WT.fig7 %>% summarise(ci95(count),ci95(freq),.groups=drop) #Need for 7A fig7_data_dots <- PolGData_indels %>% filter(tissue == "Liver") %>% group_by(refl=ref_num,gene=coding_non) %>% summarise(freq=sum(mut_freq),count=n()) %>% ungroup %>% mutate(normal_freq = normal(freq),normal_count = normal(count))%>% complete(refl=1:16299,fill=list(freq=0,count=0,normal_freq=0,normal_count=0)) #Need for stats. Excludes somgerm totals fig_7_data_exclude_total <- PolGData_indels_L %>% group_by(Animal, tissue, som_germ) %>% summarise(freq = sum(mut_freq), count = n())%>% mutate(count = count/mt_genome_length,freq = freq/mt_genome_length) %>% mutate(count_cube_root = count^(1/3),freq_cube_root = freq^(1/3)) #includes totals for graphing fig7_data <- bind_rows (fig_7_data_exclude_total, PolGData_indels_L %>% group_by(Animal, tissue) %>% summarise(freq = sum(mut_freq), count = n())%>% mutate(count = count/mt_genome_length,freq = freq/mt_genome_length,som_germ = "Total") )%>% mutate(count_no_brn_germ=replace(count, tissue=="Brain"&som_germ =="Germline", NA)) #error bars for graphing fig7_data.error <- fig7_data %>% ungroup() %>% group_by(som_germ,tissue) %>% summarise(ci_count=ci95(count),ci_freq=ci95(freq),count=mean(count),freq=mean(freq)) ######Fig 7 Plotting###### y_pos_labels_fig7=.2 sevena<- ggplot(fig7_data_dots, aes(x=refl, y=freq)) + geom_rect(data=coding_status_sheet, mapping=aes(xmin=start, xmax=end, ymin=-Inf, ymax=Inf,fill=factor(coding_status,levels = c("tRNA","rRNA","CDS","D-loop"))),inherit.aes = FALSE,alpha=0.8)+ geom_vline(xintercept=coding_status_sheet$start,color="black",size=0.1,alpha=1)+ scale_fill_discrete_sequential(palette = "YlOrBr",nmax = 6, order = 2:6)+ geom_point(size=0.5) + scale_x_continuous(limits = c(0,16299), expand = c(.01, .01))+ scale_y_continuous(limits = c(0,.22), expand = c(0.001, 0.0001))+ theme_classic()+ xlab("Reference")+ ylab("Mean Mutation Frequency")+ annotate(geom="text", x=c(550,1800,3229,4432.5,6100,7354.5,8267,8998.5,10855.5,12653.5,13811,14716.5), y=y_pos_labels_fig7, label=c("12S rRNA","16S rRNA","ND1","ND2","COXI","COXII","ATP6","COXIII","ND4","ND5","ND6","CYTB"),color="Black",size=3)+ annotate(geom="text", x=c(7867.5,9632.5,10025), y=y_pos_labels_fig7, label=c("ATP8","ND3","ND4L"),color="Black",size=3,angle=-90)+ theme(legend.title=element_blank(),axis.text=element_text(size=fig3A_text_size),axis.title=element_text(size=fig3A_text_size+4),plot.margin = unit(c(0,.10,0,.10), "cm"),axis.ticks.length.x = unit(0, "mm"),legend.position="top") sevenba<- ggplot(fig7_data,aes(x =som_germ, y=count))+ geom_dotplot(binwidth = .0002,binaxis="y",stackdir="center",position=position_dodge(width=0.7),fill="darkgrey")+ geom_errorbar(data=fig7_data.error, aes(ymax=count+ci_count, ymin=count-ci_count),color="black",position=position_dodge(width=0.7),size=.6,width=0.5)+ stat_summary(fun=median,geom="point",position=position_dodge(width=.7),color="black",show.legend=FALSE,size=3)+ scale_fill_grey()+ theme_classic()+ scale_y_continuous(expand = c(0.02, 0),limits=c(0,0.0075))+ labs(x="PolG",y="Mutation Count")+ theme(axis.text=element_text(size=fig2_text_size-4),axis.title=element_text(size=fig2_text_size),plot.margin = unit(c(0.5,-0.5,0.5,0.5),"cm")) sevenbb<- ggplot(WT.fig7,aes(x=factor("Total"),y=count))+ geom_dotplot(binwidth = .0002,binaxis="y",stackdir="center",position=position_dodge(width=0.7),fill="darkgrey")+ scale_fill_grey()+ theme_classic()+ scale_y_continuous(expand = c(0.02, 0),limits=c(0,0.0075))+ labs(x="WT",y="",size= fig2_text_size)+ theme(axis.text.y=element_blank(),axis.text=element_text(size = fig2_axis_size-2),axis.title=element_text(size=fig2_text_size),plot.margin = unit(c(0.5,0.5,0.5,-0.5),"cm")) sevenb<-grid.arrange(sevenba,sevenbb,widths=c(1,0.2),ncol=2) sevenca<- ggplot(fig7_data,aes(x =som_germ, y=freq))+ geom_dotplot(binwidth = .000003,binaxis="y",stackdir="center",position=position_dodge(width=0.7),fill="darkgrey")+ scale_fill_grey()+ geom_errorbar(data=fig7_data.error, aes(ymax=freq+ci_freq, ymin=freq-ci_freq),color="black",position=position_dodge(width=0.7),size=.6,width=0.5)+ stat_summary(fun=median,geom="point",position=position_dodge(width=.7),color="black",show.legend=FALSE,size=3)+ scale_y_continuous(expand = c(0.02, 0),limits=c(0,1.2e-04))+ theme_classic()+ labs(x="PolG",y="Mutation Frequency")+ theme(axis.text=element_text(size=fig2_text_size-4),axis.title=element_text(size=fig2_text_size),plot.margin = unit(c(0.5,-0.5,0.5,0.5),"cm")) sevencb<-ggplot(WT.fig7,aes(x=factor("Total"),y=freq))+ geom_dotplot(binwidth = .000003,binaxis="y",stackdir="center",position=position_dodge(width=0.7),fill="darkgrey")+ scale_fill_grey()+ theme_classic()+ scale_y_continuous(expand = c(0.02, 0),limits=c(0,1.2e-04))+ labs(x="WT",y="",size= fig2_text_size)+ theme(axis.text.y=element_blank(),axis.text=element_text(size = fig2_axis_size-2),axis.title=element_text(size=fig2_text_size),plot.margin = unit(c(0.5,0.5,0.5,-0.5),"cm")) sevenc<-grid.arrange(sevenca,sevencb,widths=c(1,0.2),ncol=2) sevend<- ggoutlier_hist(PolGData_indels_L,"Change",-15,15,binwidth=1,fill="grey")+ theme_bw()+ scale_y_continuous(trans = log2_trans(), breaks = trans_breaks("log2", function(x) 2^x), labels = trans_format("log2", math_format(2^.x)))+ ylab("Count")+ theme_classic()+ theme(axis.text=element_text(size = fig2_axis_size-5),axis.title=element_text(size=fig2_text_size),plot.margin = unit(c(0.5,0.5,0.5,-0.5),"cm")) ggarrange(sevena,ggarrange(sevenb,sevenc,sevend,ncol=3,labels=c("B","C","D"),widths=c(1,1,1),align="hv"),nrow=2,labels=c("A"),heights=c(1.5,2)) #KM 08/30/2021 #Statistics for "The mtDNA mutation spectrum in the PolG mutator mouse reveals germline and somatic selection" #Need to run figure file first ######FIG 2 Stats###### #count_pct_change_tissue fig2_data.error %>% ungroup%>% filter(som_germ=="Total")%>% select(count_no_brn_germ,tissue)%>% pivot_wider(names_from=tissue,values_from=count_no_brn_germ)%>% mutate(percent_diff = (Liver-Brain)/abs(Brain)*100) #freq_pct_change_tissue fig2_data.error %>% ungroup%>% filter(som_germ=="Total")%>% select(freq,tissue)%>% pivot_wider(names_from=tissue,values_from=freq)%>% mutate(percent_diff = (Liver-Brain)/abs(Brain)*100) #tissue_t_tests_dataframe tissue_stats <-PolGData %>% group_by(Animal, tissue) %>% summarise(freq = sum(mut_freq), count = n())%>% mutate(count = count/mt_genome_length,freq = freq/mt_genome_length,som_germ = "Total")%>% mutate(count_cube_root = count^(1/3), freq_cube_root= freq^(1/3)) ##count_t_test #significant shapiro_test(tissue_stats$count) #not significant shapiro_test(tissue_stats$count_cube_root) #equal variance not significant var.test(count_cube_root~tissue,tissue_stats) #t_test_count_tissue tissue_stats %>% ungroup%>% t_test(.,count_cube_root~tissue,paired=TRUE,ref.group = "Liver") ##frequency_t_test #barely not significant shapiro_test(tissue_stats$freq) #not significant shapiro_test(tissue_stats$freq_cube_root) #equal variance not significant var.test(freq_cube_root~tissue,tissue_stats) #t_test_frequency_tissue tissue_stats %>% ungroup%>% t_test(.,freq_cube_root~tissue,paired=TRUE,ref.group = "Liver") #############Here forward, looking at liver only fig_2_data_exclude_total_liver <- fig_2_data_exclude_total%>%filter(tissue=="Liver") #som_germ_count_pct_change_liver <- fig_2_data_exclude_total_liver %>% ungroup%>% group_by(som_germ)%>% summarise(mean_count = mean(count))%>% select(mean_count,som_germ)%>% pivot_wider(names_from=som_germ,values_from=mean_count)%>% mutate(percent_diff = (Somatic-Germline)/abs(Germline)*100) #som_germ_freq_pct_change_liver <- fig_2_data_exclude_total_liver%>% ungroup%>% group_by(som_germ)%>% summarise(mean_freq = mean(freq))%>% select(mean_freq,som_germ)%>% pivot_wider(names_from=som_germ,values_from=mean_freq)%>% mutate(percent_diff = (Somatic-Germline)/abs(Germline)*100) ##2A## #lmer for somatic germline status with animal as random effect for count fig2A.lmer<- lmer(count~som_germ+(1|Animal),fig_2_data_exclude_total_liver) summary(fig2A.lmer) #homogeniety test for lmer leveneTest(residuals(fig2A.lmer) ~ fig_2_data_exclude_total_liver$som_germ) #normality test qqmath(fig2A.lmer, id=0.05) #cube root transform. This is on manuscript fig2A.lmer.cube_root<- lmer(count_cube_root~som_germ+(1|Animal),fig_2_data_exclude_total_liver) summary(fig2A.lmer.cube_root) #homogeniety test for cube root lmer leveneTest(residuals(fig2A.lmer.cube_root) ~ fig_2_data_exclude_total_liver$som_germ) #normality test qqmath(fig2A.lmer.cube_root, id=0.05) ##2B## #lmer for somatic germline status with animal as random effect for count fig2B.lmer<- lmer(freq~som_germ+(1|Animal),fig_2_data_exclude_total_liver) summary(fig2B.lmer) #homogeniety test for lmer leveneTest(residuals(fig2B.lmer) ~ fig_2_data_exclude_total_liver$som_germ) #normality test qqmath(fig2B.lmer, id=0.05) #cube root transform. This is on manuscript fig2B.lmer.cube_root<- lmer(freq_cube_root~som_germ+(1|Animal),fig_2_data_exclude_total_liver) summary(fig2B.lmer.cube_root) #homogeniety test for cube root lmer leveneTest(residuals(fig2B.lmer.cube_root) ~ fig_2_data_exclude_total_liver$som_germ) #normality test qqmath(fig2B.lmer.cube_root, id=0.05) ######FIG 3 Stats###### #need NAs to show up as white on graph, but zeroes for stats fig3_data_stats <- fig3ce_data %>% replace_na(list(count=0,freq=0))%>% mutate(count_cube_root = count^(1/3),freq_cube_root = freq^(1/3)) fig3_data_stats$coding_status <- factor(fig3_data_stats$coding_status, levels=c("CDS","D-loop","tRNA","rRNA")) #count percent change d loop coding region fig3bd_data.error %>% ungroup%>% select(count,coding_status)%>% pivot_wider(names_from=coding_status,values_from=count)%>% mutate(percent_diff_dloopcds = (`D-loop`-CDS)/abs(CDS)*100,percent_diff_trnacds=(tRNA-CDS)/abs(CDS)*100) #freq percent change fig3bd_data.error %>% ungroup%>% select(freq,coding_status)%>% pivot_wider(names_from=coding_status,values_from=freq)%>% mutate(percent_diff_dloopcds = (`D-loop`-CDS)/abs(CDS)*100,percent_diff_trnacds=(tRNA-CDS)/abs(CDS)*100,percent_diff_rrnacds=(rRNA-CDS)/abs(CDS)*100) #BC fig3bd_data_stats.lmer<- lmer(count~som_germ*coding_status+(1|Animal),fig3_data_stats) summary(fig3bd_data_stats.lmer) qqmath(fig3bd_data_stats.lmer, id=0.05) #BC on manuscript fig3bd_data_stats.lmer.cube_root<- lmer(count_cube_root~som_germ*coding_status+(1|Animal),fig3_data_stats) qqmath(fig3bd_data_stats.lmer.cube_root, id=0.05) summary(fig3bd_data_stats.lmer.cube_root) #3CD fig3ce_data_stats.lmer<- lmer(freq~som_germ+coding_status+(1|Animal),fig3_data_stats) summary(fig3ce_data_stats.lmer) qqmath(fig3ce_data_stats.lmer, id=0.05) #3CE on manuscript fig3ce_data_stats.lmer.cube_root<- lmer(freq_cube_root~som_germ*coding_status+(1|Animal),fig3_data_stats) qqmath(fig3ce_data_stats.lmer.cube_root, id=0.05) summary(fig3ce_data_stats.lmer.cube_root) ######FIG 4 Stats###### #need NA for graph, zeroes for stats fig4_data_stats <- PolGData %>% filter(tissue == "Liver"&!is.na(mut_type)) %>% group_by(Animal,som_germ,mut_type) %>% summarise(freq = sum(mut_freq), count = n()) %>% mutate(freq = freq/mt_genome_length,count=count/mt_genome_length)%>% ungroup%>% complete(mut_type,nesting(som_germ,Animal),fill=list(freq=0,count=0))%>% mutate(count_cube_root = count^(1/3),freq_cube_root = freq^(1/3)) #count_percent_diff fig4ad_data.error %>% ungroup%>% select(count,mut_type)%>% pivot_wider(names_from=mut_type,values_from=count)%>% mutate(percent_diff_missilet = (missense-silent)/abs(silent)*100) #freq_percent_diff fig4ad_data.error %>% ungroup%>% select(freq,mut_type)%>% pivot_wider(names_from=mut_type,values_from=freq)%>% mutate(percent_diff_missilet = (missense-silent)/abs(silent)*100) #4B #lmer for somatic germline status and mutation type(silent,missense,nonsense) with animal as random effect for count fig4b_data_stats.lmer<- lmer(count~som_germ*mut_type+(1|Animal),fig4_data_stats) summary(fig4b_data_stats.lmer) #homogeniety test for lmer leveneTest(residuals(fig4b_data_stats.lmer) ~ factor(fig4_data_stats$som_germ)*fig4_data_stats$mut_type) #normality test qqmath(fig4b_data_stats.lmer, id=0.05) #cube root transform. This is on manuscript fig4b_data_stats.lmer.cube_root<- lmer(count_cube_root~som_germ*mut_type+(1|Animal),fig4_data_stats%>%mutate(mut_type=fct_relevel(mut_type,"silent","missense"))) summary(fig4b_data_stats.lmer.cube_root) #homogeniety test for cube root lmer leveneTest(residuals(fig4b_data_stats.lmer.cube_root) ~ factor(fig4_data_stats$som_germ)*fig4_data_stats$mut_type) #normality test qqmath(fig4b_data_stats.lmer.cube_root, id=0.05) #4E #lmer for somatic germline status and mutation type(silent,missense,nonsense) with animal as random effect for freq fig4e_data_stats.lmer<- lmer(freq~som_germ*mut_type+(1|Animal),fig4_data_stats) summary(fig4e_data_stats.lmer) #homogeniety test for lmer leveneTest(residuals(fig4e_data_stats.lmer) ~ factor(fig4_data_stats$som_germ)*fig4_data_stats$mut_type) #normality test qqmath(fig4e_data_stats.lmer, id=0.05) #cube root transform. This is on manuscript fig4e_data_stats.lmer.cube_root<- lmer(freq_cube_root~som_germ*mut_type+(1|Animal),fig4_data_stats%>%mutate(mut_type=fct_relevel(mut_type,"silent","missense"))) summary(fig4e_data_stats.lmer.cube_root) #homogeniety test for cube root lmer leveneTest(residuals(fig4e_data_stats.lmer.cube_root) ~ factor(fig4_data_stats$som_germ)*fig4_data_stats$mut_type) #normality test qqmath(fig4e_data_stats.lmer.cube_root, id=0.05) #4C ##codon position anova tukey for count fig4C.aov<-aov(count~factor(position),data=fig4cf_position_data) summary(fig4C.aov) TukeyHSD(fig4C.aov) #Normality qqnorm(fig4cf_position_data$count) qqline(fig4cf_position_data$count) ##codon position anova tukey cube root for count fig4C.aov.cuberoot<-aov(count_cube_root~factor(position),data=fig4cf_position_data) summary(fig4C.aov.cuberoot) TukeyHSD(fig4C.aov.cuberoot) #Normality qqnorm(fig4cf_position_data$count_cube_root) qqline(fig4cf_position_data$count_cube_root) #4F ##codon position anova tukey for freq fig4F.aov<-aov(freq~factor(position),data=fig4cf_position_data) summary(fig4F.aov) TukeyHSD(fig4F.aov) #Normality qqnorm(fig4cf_position_data$freq) qqline(fig4cf_position_data$freq) ##codon position anova tukey cube root for freq fig4F.aov.cuberoot<-aov(freq~factor(position),data=fig4cf_position_data) summary(fig4F.aov.cuberoot) TukeyHSD(fig4F.aov.cuberoot) #Normality qqnorm(fig4cf_position_data$freq_cube_root) qqline(fig4cf_position_data$freq_cube_root) #percent diffs fig4cf_position.error %>% ungroup%>% select(freq,position)%>% pivot_wider(names_from=position,values_from=freq)%>% mutate(percent_diff_position23 = (`3`-`2`)/abs(`2`)*100,percent_diff_position13 = (`3`-`1`)/abs(`1`)*100) ######FIG 5 Stats###### #5A anova count fig5a.aov<-aov(count~factor(type),data=fig5ab_data) summary(fig5a.aov) #Normality qqnorm(fig5ab_data$count) qqline(fig5ab_data$count) #5A anova with cube root transformation manuscript fig5a.aov_cube<-aov(count_cube_root~factor(type),data=fig5ab_data) summary(fig5a.aov_cube) #Tukey tests TukeyHSD(fig5a.aov_cube) #Normality qqnorm(fig5ab_data$count_cube_root) qqline(fig5ab_data$count_cube_root) #5B anova frequency fig5b.aov<-aov(freq~factor(type),data=fig5ab_data) summary(fig5b.aov) #Normality qqnorm(fig5ab_data$freq) qqline(fig5ab_data$freq) #5B anova with cube root transformation manuscript fig5b.aov_cube<-aov(freq_cube_root~factor(type),data=fig5ab_data) summary(fig5b.aov_cube) #Tukey Tests TukeyHSD(fig5b.aov_cube) #Normality qqnorm(fig5ab_data$freq_cube_root) qqline(fig5ab_data$freq_cube_root) #5C #need to make dataframe that only has hydrophobic and hydrophillic and has zeroes #old way, remember to delete fig5c_data.stats_<- fig5c_data %>% filter(type=="CT"&Animal!="b"&Animal!="d"&Animal!="g")%>% filter((amino_start_group == "Hydrophobic" | amino_start_group =="Hydrophilic") & (amino_mut_group == "Hydrophilic" | amino_mut_group =="Hydrophobic")) %>% replace_na(list(freq=0,count=0))%>% mutate(amino_start_group=fct_relevel(amino_start_group,"Hydrophobic","Hydrophilic"))%>% mutate(amino_mut_group=fct_relevel(amino_mut_group,"Hydrophobic","Hydrophilic"))%>% unite("both",amino_start_group,amino_mut_group) fig5c_data.stats<- fig5c_data %>% filter(type=="CT"&Animal!="b"&Animal!="d"&Animal!="g")%>% filter((amino_start_group == "Hydrophobic" | amino_start_group =="Hydrophilic") & (amino_mut_group == "Hydrophilic" | amino_mut_group =="Hydrophobic")) %>% replace_na(list(freq=0,count=0))%>% mutate(amino_start_group=fct_relevel(amino_start_group,"Hydrophobic","Hydrophilic"))%>% mutate(amino_mut_group=fct_relevel(amino_mut_group,"Hydrophilic","Hydrophobic"))%>% mutate(count_cube_root = count^(1/3),freq_cube_root = freq^(1/3)) #fig5c_data.error <- fig5c_data.stats %>% ungroup() %>% group_by(amino_start_group,amino_mut_group) %>% summarise(ci_count=ci95(count),ci_freq=ci95(freq),count=mean(count),freq=mean(freq)) fig5c_data.stats %>% ungroup() %>% group_by(amino_start_group) %>% summarise(ci_count=ci95(count),ci_freq=ci95(freq),count=mean(count),freq=mean(freq)) fig5c_data.stats %>% ungroup() %>% group_by(amino_mut_group) %>% summarise(ci_count=ci95(count),ci_freq=ci95(freq),count=mean(count),freq=mean(freq)) #untransformed data was better #linear mixed model for count for mutation type as fixed effect and animal as random effect fig_5c.lmer<- lmer(count~amino_start_group+amino_mut_group+(1|Animal),fig5c_data.stats) summary(fig_5c.lmer) #not significant homogeniety test for lmer leveneTest(residuals(fig_5c.lmer) ~ fig5c_data.stats$amino_start_group*fig5c_data.stats$amino_mut_group) #Normality qqmath(fig_5c.lmer, id=0.05) #linear mixed model for count for mutation type as fixed effect and animal as random effect fig_5c.lmer.cuberoot<- lmer(count_cube_root~amino_start_group*amino_mut_group+(1|Animal),fig5c_data.stats) summary(fig_5c.lmer.cuberoot) #Signifcant homogeniety test for lmer leveneTest(residuals(fig_5c.lmer.cuberoot) ~ fig5c_data.stats$amino_start_group*fig5c_data.stats$amino_mut_group) #Normality qqmath(fig_5c.lmer.cuberoot, id=0.05) #linear mixed model for count for mutation type as fixed effect and animal as random effect fig_5d.lmer<- lmer(freq~amino_start_group*amino_mut_group+(1|Animal),fig5c_data.stats) summary(fig_5d.lmer) #Signifcant homogeniety test for lmer leveneTest(residuals(fig_5d.lmer) ~ fig5c_data.stats$amino_start_group*fig5c_data.stats$amino_mut_group) #Normality qqmath(fig_5d.lmer, id=0.05) #transformed data was better #linear mixed model for count for mutation type as fixed effect and animal as random effect fig_5d.lmer.cuberoot<- lmer(freq_cube_root~amino_start_group+amino_mut_group+(1|Animal),fig5c_data.stats) summary(fig_5d.lmer.cuberoot) #Signifcant homogeniety test for lmer leveneTest(residuals(fig_5d.lmer.cuberoot) ~ fig5c_data.stats$amino_start_group*fig5c_data.stats$amino_mut_group) #Normality qqmath(fig_5d.lmer.cuberoot, id=0.05) ######FIG 6 Stats###### ##6A fig6a_stats <- fig6a_data %>% filter(mut=="C->T" | mut=="G->A") fig_6a.aov<-aov(count_cube_root~factor(mut),data=fig6a_stats) summary(fig_6a.aov) #Normality qqnorm(fig_6a.aov$count_cube_root) qqline(fig_6a.aov$count_cube_root) ###6B fig6b_data_C <- fig6b_data %>% filter(mut=="C->T") #anova for C to T somatic changes between missense and silent fig_6_C.aov<-aov(count_cube_root~factor(mut_type),data=fig6b_data_C) summary(fig_6_C.aov) #Normality qqnorm(fig6b_data_C$count_cube_root) qqline(fig6b_data_C$count_cube_root) #anova for G to A somatic changes between missense and silent fig6b_data_G <- fig6b_data %>% filter(mut=="G->A") fig_C_3.aov<-aov(count_cube_root~factor(mut_type),data=fig6b_data_G) summary(fig_C_3.aov) #Normality qqnorm(fig6b_data_G$count_cube_root) qqline(fig6b_data_G$count_cube_root) ######FIG 7 Stats###### #count_pct_change_somgerm fig7_data.error %>% ungroup%>% filter(som_germ!="Total")%>% select(count,som_germ)%>% pivot_wider(names_from=som_germ,values_from=count)%>% mutate(percent_diff = (Somatic-Germline)/abs(Germline)*100) #freq_pct_change_som_germ fig7_data.error %>% ungroup%>% filter(som_germ!="Total")%>% select(freq,som_germ)%>% pivot_wider(names_from=som_germ,values_from=freq)%>% mutate(percent_diff = (Somatic-Germline)/abs(Germline)*100) #7B #linear mixed model for count somgerm status indels fig7b.lmer<- lmer(count~som_germ+(1|Animal),fig_7_data_exclude_total) summary(fig7b.lmer) #homogeniety test for lmer leveneTest(residuals(fig7b.lmer) ~ fig_7_data_exclude_total$som_germ) #normality test qqmath(fig7b.lmer, id=0.05) #linear mixed model for count cube root somgerm status indels fig7b.lmer.cuberoot<- lmer(count_cube_root~som_germ+(1|Animal),fig_7_data_exclude_total) summary(fig7b.lmer.cuberoot) #homogeniety test for lmer leveneTest(residuals(fig7b.lmer) ~ fig_7_data_exclude_total$som_germ) #normality test qqmath(fig7b.lmer, id=0.05) #7C #linear mixed model for freq somgerm status indels fig7c.lmer<- lmer(freq~som_germ+(1|Animal),fig_7_data_exclude_total) summary(fig7c.lmer) #homogeniety test for lmer leveneTest(residuals(fig7c.lmer) ~ fig_7_data_exclude_total$som_germ) #normality test qqmath(fig7c.lmer, id=0.05) #linear mixed model for freq cube root somgerm status indels fig7c.lmer.cuberoot<- lmer(freq_cube_root~som_germ+(1|Animal),fig_7_data_exclude_total) summary(fig7c.lmer.cuberoot) #homogeniety test for lmer leveneTest(residuals(fig7c.lmer) ~ fig_7_data_exclude_total$som_germ) #normality test qqmath(fig7c.lmer, id=0.05) #7D PolGData_indels_L%>% group_by(frame,i_d,coding_non)%>% summarise(sum=n()) PolGData_indels_L%>% group_by(i_d)%>% summarise(sum=n()) PolGData_indels_L%>% group_by(frame,coding_non)%>% summarise(sum=n()) ## Edited 8_30_21 ##This is the supplementary figures ## Author: KM #data processing and graphing library(tidyverse) library(gridExtra) library(ggpubr) library(colorspace) library(ggoutlier) #statistics library(lmerTest) library(lattice) library(car) library(zoo) library(scales) library(rstatix) #Open PolG files, guess max allows for proper identification of some of the columns that have NAs early on PolGData = read_csv("Additional_File_5.csv",guess_max = 5000,skip=1); PolGData_indels = read_csv("Additional_File_6.csv",skip=1); #Open coding status file, this has all the gene annotations coding_status_sheet = read_csv("Additional_File_7.csv",skip=1); #Open WT file WTData = read_csv("Additional_File_3.csv",skip=1) WTData_indels = read_csv("Additional_File_4.csv",skip=1); #ci95 function ci95 <- function(x) sd(x)/sqrt(length(x))*qt(1 - (0.05 / 2), n() - 1) mt_genome_length = 16299 #function to normalize count and freq lines #changed min to zero normal <- function(x){(x/max(x))} ######Supplementary Figure 1###### #Supp1 AA Data Prep level_order=c("CDS","tRNA","rRNA","D-loop") #Supp1 AB Data Prep #filters by brain, groups by reference number and gene supp1a_data <- PolGData %>% filter(tissue == "Brain") %>% group_by(refl=ref_num,gene=coding_non) %>% summarise(freq=mean(mut_freq),count=n()) %>% ungroup %>% mutate(normal_freq = normal(freq),normal_count = normal(count))%>% complete(refl=1:16299,fill=list(freq=0,count=0,normal_freq=0,normal_count=0)) #supp1B,D Data Prep #Filters by brain, groups by coding status supp1bd_data <- PolGData %>% filter(tissue =="Brain") %>% group_by(Animal,coding_status=coding_non) %>% summarise(freq = sum(mut_freq_div_len), count = sum(count_div_len)) %>% filter(coding_status!="") #supp1B,C error supp1bd_data.error <- supp1bd_data %>% ungroup() %>% group_by(coding_status) %>% summarise(ci_count=ci95(count),ci_freq=ci95(freq),count=mean(count),freq=mean(freq)) #supp1 supp1ce_data <- PolGData %>% filter(tissue =="Brain") %>% group_by(Animal,coding_status=coding_non,som_germ) %>% summarise(freq = sum(mut_freq_div_len), count = sum(count_div_len)) %>% filter(coding_status!="")%>% ungroup%>% complete(coding_status,nesting(som_germ,Animal)) ######Supp1 Plotting###### supp1_median_dot_size = 2.5 supp1A_text_size=7 y_pos_labels=.28 supp1aa<- ggplot(supp1a_data, aes(x=refl, y=freq)) + geom_rect(data=coding_status_sheet, mapping=aes(xmin=start, xmax=end, ymin=-Inf, ymax=Inf,fill=factor(coding_status,levels = c("tRNA","rRNA","CDS","D-loop"))),inherit.aes = FALSE,alpha=0.8)+ geom_vline(xintercept=coding_status_sheet$start,color="black",size=0.1,alpha=1)+ scale_fill_discrete_sequential(palette = "YlOrBr",nmax = 6, order = 2:6)+ geom_point(size=0.5) + scale_x_continuous(limits = c(0,mt_genome_length), expand = c(.01, .01))+ scale_y_continuous(limits = c(0,.3), expand = c(0.001, 0.0001))+ theme_classic()+ ylab("Mean Mutation Frequency")+ annotate(geom="text", x=c(550,1800,3229,4432.5,6100,7354.5,8267,8998.5,10855.5,12653.5,13811,14716.5), y=y_pos_labels, label=c("12S rRNA","16S rRNA","ND1","ND2","COXI","COXII","ATP6","COXIII","ND4","ND5","ND6","CYTB"),color="Black",size=3)+ annotate(geom="text", x=c(7867.5,9632.5,10025), y=y_pos_labels, label=c("ATP8","ND3","ND4L"),color="Black",size=3,angle=-90)+ theme(legend.title=element_blank(),axis.text=element_text(size=supp1A_text_size-2),axis.title=element_text(size=supp1A_text_size),axis.title.x=element_blank(),axis.text.x=element_blank(),axis.title.y = element_text(margin = margin(t = 0, r = 5.2, b = 0, l = 0)),plot.margin = unit(c(0,.10,0,.10), "cm"),axis.ticks.length.x = unit(0, "mm"),legend.position="top") supp1ab<- ggplot(supp1a_data) + geom_rect(data=coding_status_sheet, mapping=aes(xmin=start, xmax=end, ymin=-Inf, ymax=Inf,fill=factor(coding_status,levels = c("tRNA","rRNA","CDS","D-loop"))),inherit.aes = FALSE,alpha=0.8)+ geom_vline(xintercept=coding_status_sheet$start,color="black",size=0.1,alpha=1)+ guides(fill=FALSE)+ scale_fill_discrete_sequential(palette = "YlOrBr",nmax = 6, order = 2:6)+ geom_line(aes(x=refl,y=normal(rollmean(count,250,na.pad=TRUE,fill=0)),color="black"))+ geom_line(aes(x=refl,y=normal(rollmean(freq,250,na.pad=TRUE,fill=0)),color="darkgrey"))+ scale_colour_manual("", values = c("black", "darkgrey"),labels=c("Frequency","Count")) + scale_x_continuous(limits = c(0,mt_genome_length), expand = c(.01, .01))+ scale_y_continuous(limits = c(0,1.05))+ xlab("Reference")+ ylab("Relative Rolling Mean")+ theme_classic()+ theme( axis.text.y=element_text(size=supp1A_text_size-2),axis.text.x=element_text(size=supp1A_text_size),axis.title.y=element_text(size=supp1A_text_size),axis.title.x=element_text(size=supp1A_text_size+2), plot.margin = unit(c(0.05,.10,.10,.10), "cm"),legend.position=c(.09,.87),legend.background = element_rect(color="white"),legend.margin = margin(0.1, 0.02,2, 0.02),legend.direction = "horizontal", plot.background = element_rect(fill = "transparent", color = NA),legend.text = element_text(size=supp1A_text_size-1) ) #combines supp1Aa and supp1Ab supp1a<-grid.arrange(supp1aa,supp1ab,heights=c(1,.75)) supp1b<-ggplot(supp1bd_data,aes(x =factor(coding_status,level=level_order), y=count))+ geom_dotplot(binwidth = .0007,binaxis="y",stackdir="center",fill="darkgrey")+ stat_summary(fun=median,geom="point",position=position_dodge(width=0.7),color="black",size=supp1_median_dot_size,show.legend=FALSE)+ geom_errorbar(data=supp1bd_data.error, aes(ymax=count+ci_count, ymin=count-ci_count),color="black",position=position_dodge(width=0.7),size=.6,width=0.5)+ theme_classic()+ labs(x="",y="Mutation Count")+ theme(axis.text=element_text(size=8),axis.title=element_text(size=10)) supp1c<-ggplot(supp1ce_data,aes(factor(coding_status,level=level_order),Animal,fill=count))+ geom_tile(color="darkgrey")+ scale_fill_continuous_sequential(palette = "Blues",begin=0.1,p1=1.1,p2=.9,na.value="white")+ theme_minimal()+ labs(title="Mutation Count")+ facet_grid(rows=factor(supp1ce_data$som_germ))+ theme(axis.title.x=element_blank(),legend.position="bottom",axis.text=element_text(size=8),axis.title=element_text(size=10),legend.title=element_blank(),title=element_text(size=8)) supp1d<-ggplot(supp1bd_data,aes(x =factor(coding_status,level=level_order), y=freq))+ geom_dotplot(binwidth = .000015,binaxis="y",stackdir="center",fill="darkgrey")+ geom_errorbar(data=supp1bd_data.error, aes(ymax=freq+ci_freq, ymin=freq-ci_freq),color="black",position=position_dodge(width=0.7),size=.6,width=0.5)+ stat_summary(fun=median,geom="point",position=position_dodge(width=0.7),color="black",size=supp1_median_dot_size,show.legend=FALSE)+ theme_classic()+ labs(x="",y="Mutation Frequency",size=10)+ theme(axis.text=element_text(size=8),axis.title=element_text(size=10)) supp1e<-ggplot(supp1ce_data,aes(factor(coding_status,level=level_order),Animal,fill=freq))+ geom_tile(color="darkgrey")+ facet_grid(rows=factor(supp1ce_data$som_germ))+ scale_fill_continuous_sequential(palette = "Blues",begin=0.1,p1=1.1,p2=.9,na.value="white")+ theme_minimal()+ ggtitle("Mutation Frequency")+ theme(legend.position="bottom")+ theme(axis.title.x=element_blank(),legend.position="bottom",axis.text=element_text(size=8),axis.title=element_text(size=10),legend.title=element_blank(),title=element_text(size=8),legend.text=element_text(size=5)) #combines all of supp1 ggarrange(supp1a,ggarrange(supp1b,supp1c,supp1d,supp1e,ncol=4,labels=c("B","C","D","E"),widths=c(1,1,1,1)),nrow=2,labels=c("A"),heights=c(1.5,2)) ######Supplementary Figure 2###### level_order=c("silent","missense","nonsense") #gets rid of non coding regions, groups by animal, mut type and completes the dataframe with zeroes supp2ad_data <- PolGData %>% filter(tissue == "Brain"&!is.na(mut_type)) %>% group_by(Animal,mut_type) %>% summarise(freq = sum(mut_freq), count = n()) %>% mutate(freq = freq/mt_genome_length,count=count/mt_genome_length)%>% ungroup()%>% complete(mut_type,nesting(Animal),fill=list(freq=0,count=0)) #means and ci for error bars supp2ad_data.error <- supp2ad_data %>% ungroup() %>% group_by(mut_type) %>% summarise(ci_count=ci95(count),ci_freq=ci95(freq),count=mean(count),freq=mean(freq)) #Aggregates mut count data by animal, tissue, som germ status, and mutation type supp2be_data <- PolGData %>% filter(tissue == "Brain"&!is.na(mut_type)) %>% group_by(Animal,som_germ,mut_type) %>% summarise(freq = sum(mut_freq), count = n()) %>% mutate(freq = freq/mt_genome_length,count=count/mt_genome_length)%>% ungroup%>% complete(mut_type,nesting(som_germ,Animal)) #supp2 position graphs supp2cf_position_data <- PolGData %>% filter(tissue == "Brain"&!is.na(position)) %>% group_by(Animal,position) %>% summarise(freq = sum(mut_freq), count = n()) %>% mutate(freq = freq/mt_genome_length,count=count/mt_genome_length)%>% mutate(count_cube_root = count^(1/3),freq_cube_root = freq^(1/3)) supp2cf_position.error <- supp2cf_position_data %>% ungroup() %>% group_by(position) %>% summarise(ci_count=ci95(count),ci_freq=ci95(freq),count=mean(count),freq=mean(freq)) supp2a<- ggplot(supp2ad_data,aes(x =factor(mut_type,level=level_order), y=count))+ geom_dotplot(binwidth = 0.00032,binaxis="y",stackdir="center",fill="darkgrey")+ geom_errorbar(data=supp2ad_data.error, aes(ymax=count+ci_count, ymin=count-ci_count),color="black",position=position_dodge(width=0.7),size=.6,width=0.5)+ stat_summary(fun=median,geom="point",position=position_dodge(width=0.7),color="black",show.legend=FALSE,size=3)+ ylab("count")+ scale_fill_grey()+ theme_classic()+ labs(x="",y="Mutation Count",size=12)+ theme(axis.text=element_text(size=10),axis.title=element_text(size=12)) supp2b<- ggplot(supp2be_data,aes(factor(mut_type,level=level_order),Animal,fill=count))+ geom_tile(color="grey")+ facet_grid(rows=factor(supp2be_data$som_germ))+ scale_fill_continuous_sequential(palette = "Reds 2",begin=0.1,p1=1.1,p2=.9,na.value="white")+ theme_minimal()+ ggtitle("Mutation Count")+ theme(legend.position="bottom")+ theme(axis.title.x=element_blank(),legend.position="bottom",axis.text=element_text(size=10),axis.title=element_text(size=10),legend.title=element_blank(),title=element_text(size=8),legend.text=element_text(size=8),legend.key.width=unit(35,"pt")) supp2c<- ggplot(na.omit(supp2cf_position_data),aes(x=factor(position),y=count,fill="grey"))+ geom_dotplot(binwidth = 0.00030,binaxis="y",stackdir="center",position=position_dodge(width=0.7),fill="darkgrey")+ ylab("count")+ geom_errorbar(data=supp2cf_position.error, aes(ymax=count+ci_count, ymin=count-ci_count),color="black",position=position_dodge(width=0.7),size=.6,width=0.5)+ stat_summary(fun=median,geom="point",position=position_dodge(width=0.7),color="black",show.legend=FALSE,size=3.5)+ theme_classic()+ labs(x="Codon Position",y="Mutation Count",size= 12)+ scale_y_continuous(expand = c(0.02, 0),limits=c(0,0.02))+ theme(legend.position ="none",legend.text=element_text(size=12,face="bold"),legend.title=element_blank(),axis.text=element_text(size = 10),axis.title=element_text(size=12)) supp2d<- ggplot(supp2ad_data,aes(x =factor(mut_type,level=level_order), y=freq))+ geom_dotplot(binwidth = .000004,binaxis="y",stackdir="center",fill="darkgrey")+ geom_errorbar(data=na.omit(supp2ad_data.error), aes(ymax=freq+ci_freq, ymin=freq-ci_freq),color="black",position=position_dodge(width=0.7),size=.6,width=0.5)+ stat_summary(fun=median,geom="point",position=position_dodge(width=0.7),color="black",show.legend=FALSE,size=3)+ ylab("count")+ xlab("")+ theme_classic()+ labs(x="",y="Mutation Frequency",size=12)+ theme(axis.text=element_text(size=10),axis.title=element_text(size=12)) supp2e<- ggplot(supp2be_data,aes(factor(mut_type,level=level_order),Animal,fill=freq))+ geom_tile(color="grey")+ facet_grid(rows=factor(supp2be_data$som_germ))+ scale_fill_continuous_sequential(palette = "Reds 2",begin=0.1,p1=1.1,p2=.9,na.value="white")+ theme_minimal()+ ggtitle("Mutation Frequency")+ theme(legend.position="bottom")+ theme(axis.title.x=element_blank(),legend.position="bottom",axis.text=element_text(size=10),axis.title=element_text(size=10),legend.title=element_blank(),title=element_text(size=8),legend.text=element_text(size=8),legend.key.width=unit(35,"pt")) supp2f<- ggplot(na.omit(supp2cf_position_data),aes(x=factor(position),y=freq,fill="grey"))+ geom_dotplot(binwidth = .000004,binaxis="y",stackdir="center",position=position_dodge(width=0.7),fill="darkgrey")+ ylab("freq")+ scale_fill_grey()+ geom_errorbar(data=supp2cf_position.error, aes(ymax=freq+ci_freq, ymin=freq-ci_freq),color="black",position=position_dodge(width=0.7),size=.6,width=0.5)+ stat_summary(fun=median,geom="point",position=position_dodge(width=0.7),color="black",show.legend=FALSE,size=3.5)+ theme_classic()+ labs(x="Codon Position",y="Mutation Frequency",size= 12)+ scale_y_continuous(expand = c(0.02, 0),limits=c(0,0.0003))+ theme(legend.position = "none",legend.text=element_text(size=12,face="bold"),legend.title=element_blank(),axis.text=element_text(size = 10),axis.title=element_text(size=12)) supp2ad<-ggarrange(supp2a,supp2d,labels = c("A","D"),ncol=1,align="hv") supp2be<-ggarrange(supp2b,supp2e,labels = c("B","E"),ncol=1,align="hv") supp2cf<-ggarrange(supp2c,supp2f,labels = c("C","F"),ncol=1,align="hv") ggarrange(supp2ad,supp2be,supp2cf,ncol=3,widths=c(1,1,0.75)) ######Supplementary Figure 3###### #filters to only brain, replaces redundant mutations supp3ab_data <- PolGData %>% filter(tissue=="Brain") %>% unite("mut",ref,mutated_base) %>% mutate(type=str_replace_all(mut, c( "C_T"="C->T(G->A)","G_A"="C->T(G->A)", "T_C"="T->C(A->G)","A_G"="T->C(A->G)", "C_A"="C->A(G->T)","G_T"="C->A(G->T)", "C_G"="C->G(G->C)","G_C"="C->G(G->C)", "T_A"="T->A(A->T)","A_T"="T->A(A->T)", "T_G"="T->G(A->C)","A_C"="T->G(A->C)") ) ) %>% group_by(Animal,type) %>% summarise(freq = sum(mut_freq), count = n()) %>% mutate(freq = freq/mt_genome_length,count=count/mt_genome_length) %>% ungroup %>% complete(type,nesting(Animal),fill=list(freq=0,count=0))%>% mutate(count_cube_root = count^(1/3),freq_cube_root = freq^(1/3)) #mean, ci for graph supp3ab_data.error <- supp3ab_data %>% ungroup() %>% group_by(type) %>% summarise(ci_count=ci95(count),ci_freq=ci95(freq),count=mean(count),freq=mean(freq)) #Need this for plotting. Has all of the groups supp3c_data <- PolGData %>% filter(tissue=="Brain") %>% filter(mut_type != "silent")%>% unite("mut",ref,mutated_base) %>% mutate(type=str_replace_all(mut, c("C_T"="CT","G_A"="CT", "T_C"="TC","A_G"="TC", "C_A"="CA","G_T"="CA", "C_G"=NA,"G_C"=NA, "T_A"="TA","A_T"="TA", "T_G"=NA,"A_C"=NA) ) ) %>% drop_na%>% group_by(Animal,type,amino_start_group,amino_mut_group)%>% summarise(freq = sum(mut_freq), count = n()) %>% ungroup %>% mutate(ratio=freq/count,freq = freq/mt_genome_length,count=count/mt_genome_length) %>% complete(type,amino_mut_group,amino_start_group,nesting(Animal),fill=list(freq=NA,count=NA)) #This is for stats. Only C to T hydrophobic and hydrophilic supp3c_data_ratio <- PolGData %>% filter(tissue=="Brain") %>% filter(mut_type != "silent")%>% unite("mut",ref,mutated_base) %>% mutate(type=str_replace_all(mut, c("C_T"="C>T","G_A"="C>T", "T_C"="T>C","A_G"="T>C", "C_A"="C>A","G_T"="C>A", "C_G"=NA,"G_C"=NA, "T_A"="T>A","A_T"="T>A", "T_G"=NA,"A_C"=NA) ) ) %>% drop_na%>% group_by(type,amino_start_group,amino_mut_group)%>% summarise(freq = sum(mut_freq), count = n()) %>% ungroup %>% mutate(ratio=freq/count,freq = freq/mt_genome_length,count=count/mt_genome_length) %>% complete(type,amino_mut_group,amino_start_group,fill=list(freq=NA,count=NA))%>% filter((amino_start_group == "Hydrophobic" | amino_start_group =="Hydrophilic") & (amino_mut_group == "Hydrophilic" | amino_mut_group =="Hydrophobic")) ######supp3 Plotting###### supp3a<- ggplot(supp3ab_data,aes(x =factor(type), y=count))+ geom_dotplot(binwidth = .0005,binaxis="y",stackdir="center",fill="darkgrey")+ geom_errorbar(data=supp3ab_data.error, aes(ymax=count+ci_count, ymin=count-ci_count),color="black",position=position_dodge(width=0.7),size=.6,width=0.5)+ stat_summary(fun=median,geom="point",position=position_dodge(width=0.7),color="black",show.legend=FALSE,size=3)+ ylab("Mutation Count")+ xlab("")+ scale_fill_grey()+ theme_classic()+ labs(x="",y="Mutation Count",size=10)+ theme(axis.text=element_text(size=8),axis.title=element_text(size=10)) supp3b<- ggplot(supp3ab_data,aes(x =factor(type), y=freq))+ geom_dotplot(binwidth = .0000075,binaxis="y",stackdir="center",fill="darkgrey")+ geom_errorbar(data=supp3ab_data.error, aes(ymax=freq+ci_freq, ymin=freq-ci_freq),color="black",position=position_dodge(width=0.7),size=.6,width=0.5)+ stat_summary(fun=median,geom="point",position=position_dodge(width=0.7),color="black",show.legend=FALSE,size=3)+ ylab("Mutation Count")+ xlab("")+ scale_fill_grey()+ theme_classic()+ labs(x="",y="Mutation Frequency",size=10)+ theme(axis.text=element_text(size=8),axis.title=element_text(size=10)) supp3c<- ggplot(supp3c_data_ratio, aes(x=factor(type),y=amino_start_group))+ geom_tile(aes(fill=count),color="grey")+ theme_minimal()+ facet_grid(~amino_mut_group)+ scale_fill_continuous_sequential(palette = "YlOrBr",begin=0.0001,p1=1.1,p2=.9,na.value="white")+ ylab("Reference Amino Acid ")+ xlab("Mutation Type")+ ggtitle("Count")+ theme(axis.text.y=element_text(angle=90,hjust=0.5),axis.text=element_text(size=10),axis.title=element_text(size=10),legend.title=element_blank(),title=element_text(size=8),legend.text=element_text(size=8),plot.title=element_text(size=14),legend.position="right") supp3d<- ggplot(supp3c_data_ratio, aes(x=factor(type),y=amino_start_group))+ geom_tile(aes(fill=freq),color="grey")+ theme_minimal()+ facet_grid(~amino_mut_group)+ scale_fill_continuous_sequential(palette = "YlOrBr",begin=0.0001,p1=1.1,p2=.9,na.value="white")+ ylab("Reference Amino Acid ")+ xlab("Mutation Type")+ ggtitle("Frequency")+ theme(axis.text.y=element_text(angle=90,hjust=0.5),axis.text=element_text(size=10),axis.title=element_text(size=10),legend.title=element_blank(),title=element_text(size=8),legend.text=element_text(size=8),plot.title=element_text(size=14),legend.position="right") ggarrange(supp3a,supp3b,supp3c,supp3d,labels=c('A','B','C'),ncol=1) ######Supplementary Figure 4-7###### supp4_7_data_brain <- PolGData %>% filter(tissue=="Brain") %>% filter(mut_type != "silent")%>% unite("mut",ref,mutated_base) %>% mutate(type=str_replace_all(mut, c("C_T"="CT","G_A"="CT", "T_C"="TC","A_G"="TC", "C_A"="CA","G_T"="CA", "C_G"=NA,"G_C"=NA, "T_A"="TA","A_T"="TA", "T_G"=NA,"A_C"=NA) ) ) %>% drop_na%>% group_by(Animal,type,amino_start_group,amino_mut_group)%>% summarise(freq = sum(mut_freq), count = n()) %>% ungroup %>% mutate(freq = freq/mt_genome_length,count=count/mt_genome_length) %>% complete(type,amino_mut_group,amino_start_group,nesting(Animal),fill=list(freq=NA,count=NA)) supp4_7_data_liver <- PolGData %>% filter(tissue=="Liver") %>% filter(mut_type != "silent")%>% unite("mut",ref,mutated_base) %>% mutate(type=str_replace_all(mut, c("C_T"="CT","G_A"="CT", "T_C"="TC","A_G"="TC", "C_A"="CA","G_T"="CA", "C_G"=NA,"G_C"=NA, "T_A"="TA","A_T"="TA", "T_G"=NA,"A_C"=NA) ) ) %>% drop_na%>% group_by(Animal,type,amino_start_group,amino_mut_group)%>% summarise(freq = sum(mut_freq), count = n()) %>% ungroup %>% mutate(freq = freq/mt_genome_length,count=count/mt_genome_length) %>% complete(type,amino_mut_group,amino_start_group,nesting(Animal),fill=list(freq=NA,count=NA)) ######Supplementary Figure 4###### ggplot(supp4_7_data_brain, aes(x=factor(type), y=Animal))+ geom_tile(aes(fill=count),color="grey")+ theme_minimal()+ facet_grid(factor(supp4_7_data_brain$amino_start_group,level=c("Acidic","Basic","Hydrophilic","Hydrophobic","Stop"))~factor(supp4_7_data_brain$amino_mut_group))+ scale_fill_continuous_sequential(palette = "YlOrBr",begin=0.1,p1=1.1,p2=.9,na.value="white")+ ggtitle("Brain Mutation Count")+ theme(axis.title.x=element_blank(),axis.text=element_text(size=8),axis.title=element_text(size=10),legend.title=element_blank(),title=element_text(size=8),legend.text=element_text(size=8),plot.title=element_text(size=14)) ######Supplementary Figure 5###### ggplot(supp4_7_data_liver, aes(x=factor(type), y=Animal))+ geom_tile(aes(fill=count),color="grey")+ theme_minimal()+ facet_grid(factor(supp4_7_data_liver$amino_start_group,level=c("Acidic","Basic","Hydrophilic","Hydrophobic","Stop"))~factor(supp4_7_data_liver$amino_mut_group))+ scale_fill_continuous_sequential(palette = "YlOrBr",begin=0.1,p1=1.1,p2=.9,na.value="white")+ ggtitle("Liver Mutation Count")+ theme(axis.title.x=element_blank(),axis.text=element_text(size=8),axis.title=element_text(size=10),legend.title=element_blank(),title=element_text(size=8),legend.text=element_text(size=8),plot.title=element_text(size=14)) ######Supplementary Figure 6###### ggplot(supp4_7_data_brain, aes(x=factor(type), y=Animal))+ geom_tile(aes(fill=freq),color="grey")+ theme_minimal()+ facet_grid(factor(supp4_7_data_brain$amino_start_group,level=c("Acidic","Basic","Hydrophilic","Hydrophobic","Stop"))~factor(supp4_7_data_brain$amino_mut_group))+ scale_fill_continuous_sequential(palette = "YlOrBr",begin=0.1,p1=1.1,p2=.9,na.value="white")+ ggtitle("Brain Mutation Frequency")+ theme(axis.title.x=element_blank(),axis.text=element_text(size=8),axis.title=element_text(size=10),legend.title=element_blank(),title=element_text(size=8),legend.text=element_text(size=8),plot.title=element_text(size=14)) ######Supplementary Figure 7###### ggplot(supp4_7_data_liver, aes(x=factor(type), y=Animal))+ geom_tile(aes(fill=freq),color="grey")+ theme_minimal()+ facet_grid(factor(supp4_7_data_liver$amino_start_group,level=c("Acidic","Basic","Hydrophilic","Hydrophobic","Stop"))~factor(supp4_7_data_liver$amino_mut_group))+ scale_fill_continuous_sequential(palette = "YlOrBr",begin=0.1,p1=1.1,p2=.9,na.value="white")+ ggtitle("Liver Mutation Frequency")+ theme(axis.title.x=element_blank(),axis.text=element_text(size=8),axis.title=element_text(size=10),legend.title=element_blank(),title=element_text(size=8),legend.text=element_text(size=8),plot.title=element_text(size=14)) ######Supplementary Figure 8###### PolGData_indels_B<-filter(PolGData_indels,tissue=="Brain") #collapse by animal and divide by genome length, alose label as liver WT.supp8 <- WTData_indels %>% group_by(Animal) %>% filter(tissue=="Brain")%>% summarise(freq = sum(mut_freq), count = n()) %>% mutate(count = count/mt_genome_length,freq = freq/mt_genome_length,WT_Liver = "WT Brain") #Get the standard error of the count values WT.supp8.error <- WT.supp8 %>% summarise(ci95(count),ci95(freq),.groups=drop) #Need for 5A supp8_data_dots <- PolGData_indels %>% filter(tissue == "Brain") %>% group_by(refl=ref_num,gene=coding_non) %>% summarise(freq=sum(mut_freq),count=n()) %>% ungroup %>% mutate(normal_freq = normal(freq),normal_count = normal(count))%>% complete(refl=1:16299,fill=list(freq=0,count=0,normal_freq=0,normal_count=0)) #Need for stats. Excludes somgerm totals fig_5_data_exclude_total <- PolGData_indels_B %>% group_by(Animal, tissue, som_germ) %>% summarise(freq = sum(mut_freq), count = n())%>% mutate(count = count/mt_genome_length,freq = freq/mt_genome_length) %>% mutate(count_cube_root = count^(1/3),freq_cube_root = freq^(1/3)) #includes totals for graphing supp8_data <- bind_rows (fig_5_data_exclude_total, PolGData_indels_B %>% group_by(Animal, tissue) %>% summarise(freq = sum(mut_freq), count = n())%>% mutate(count = count/mt_genome_length,freq = freq/mt_genome_length,som_germ = "Total") )%>% mutate(count_no_brn_germ=replace(count, tissue=="Brain"&som_germ =="Germline", NA)) #error bars for graphing supp8_data.error <- supp8_data %>% ungroup() %>% group_by(som_germ,tissue) %>% summarise(ci_count=ci95(count),ci_freq=ci95(freq),count=mean(count),freq=mean(freq)) y_pos_labels_supp8=.2 supp8a<- ggplot(supp8_data_dots, aes(x=refl, y=freq)) + geom_rect(data=coding_status_sheet, mapping=aes(xmin=start, xmax=end, ymin=-Inf, ymax=Inf,fill=factor(coding_status,levels = c("tRNA","rRNA","CDS","D-loop"))),inherit.aes = FALSE,alpha=0.8)+ geom_vline(xintercept=coding_status_sheet$start,color="black",size=0.1,alpha=1)+ scale_fill_discrete_sequential(palette = "YlOrBr",nmax = 6, order = 2:6)+ geom_point(size=0.5) + scale_x_continuous(limits = c(0,16299), expand = c(.01, .01))+ scale_y_continuous(limits = c(0,.22), expand = c(0.001, 0.0001))+ theme_classic()+ xlab("Reference")+ ylab("Mean Mutation Frequency")+ annotate(geom="text", x=c(550,1800,3229,4432.5,6100,7354.5,8267,8998.5,10855.5,12653.5,13811,14716.5), y=y_pos_labels_supp8, label=c("12S rRNA","16S rRNA","ND1","ND2","COXI","COXII","ATP6","COXIII","ND4","ND5","ND6","CYTB"),color="Black",size=3)+ annotate(geom="text", x=c(7867.5,9632.5,10025), y=y_pos_labels_supp8, label=c("ATP8","ND3","ND4L"),color="Black",size=3,angle=-90)+ theme(legend.title=element_blank(),axis.text=element_text(size=supp1A_text_size),axis.title=element_text(size=supp1A_text_size+2),plot.margin = unit(c(0,.10,0,.10), "cm"),axis.ticks.length.x = unit(0, "mm"),legend.position="top") supp8ba<- ggplot(supp8_data,aes(x =som_germ, y=count))+ geom_dotplot(binwidth = .00007,binaxis="y",stackdir="center",position=position_dodge(width=0.7))+ geom_errorbar(data=supp8_data.error, aes(ymax=count+ci_count, ymin=count-ci_count),color="black",position=position_dodge(width=0.7),size=.6,width=0.5)+ stat_summary(fun=median,geom="point",position=position_dodge(width=.7),color="black",show.legend=FALSE,size=3)+ scale_fill_grey(start = 0.35)+ theme_classic()+ scale_y_continuous(expand = c(0.02, 0),limits=c(0,0.0075))+ labs(x="PolG",y="Mutation Count",size=12)+ theme(legend.position = c(0.2, 0.90),legend.text=element_text(size=12,face="bold"),legend.title=element_blank(),axis.text=element_text(size=8),axis.title=element_text(size=12),plot.margin = unit(c(0.5,-0.5,0.5,0.5),"cm")) supp8bb<- ggplot(WT.supp8,aes(x=factor("Total"),y=count))+ geom_dotplot(binwidth = .00007,binaxis="y",stackdir="center",position=position_dodge(width=0.7),fill="darkgrey")+ scale_fill_grey()+ theme_classic()+ scale_y_continuous(expand = c(0.02, 0),limits=c(0,0.0075))+ labs(x="WT",y="",size= fig2_text_size)+ theme(axis.text.y=element_blank(),axis.text=element_text(size = 8),axis.title=element_text(size=12),plot.margin = unit(c(0.5,0.5,0.5,-0.5),"cm")) supp8b<-grid.arrange(supp8ba,supp8bb,widths=c(1,0.2),ncol=2) supp8ca<- ggplot(supp8_data,aes(x =som_germ, y=freq))+ geom_dotplot(binwidth = .000001,binaxis="y",stackdir="center",position=position_dodge(width=0.7))+ geom_errorbar(data=supp8_data.error, aes(ymax=freq+ci_freq, ymin=freq-ci_freq),color="black",position=position_dodge(width=0.7),size=.6,width=0.5)+ stat_summary(fun=median,geom="point",position=position_dodge(width=.7),color="black",show.legend=FALSE,size=3)+ scale_fill_grey()+ scale_y_continuous(expand = c(0.02, 0),limits=c(0,1.2e-04))+ theme_classic()+ labs(x="PolG",y="Mutation Frequency",size=10)+ theme(legend.position = c(0.2, 0.90),legend.text=element_text(size=12,face="bold"),legend.title=element_blank(),axis.text=element_text(size=8),axis.title=element_text(size=12),plot.margin = unit(c(0.5,-0.5,0.5,0.5),"cm")) supp8cb<- ggplot(WT.supp8,aes(x=factor("Total"),y=freq))+ geom_dotplot(binwidth = .00007,binaxis="y",stackdir="center",position=position_dodge(width=0.7),fill="darkgrey")+ scale_fill_grey()+ theme_classic()+ scale_y_continuous(expand = c(0.02, 0),limits=c(0,0.0075))+ labs(x="WT",y="",size= fig2_text_size)+ theme(axis.text.y=element_blank(),axis.text=element_text(size = 8),axis.title=element_text(size=12),plot.margin = unit(c(0.5,0.5,0.5,-0.5),"cm")) supp8c<-grid.arrange(supp8ca,supp8cb,widths=c(1,0.2),ncol=2) supp8d<-ggoutlier_hist(PolGData_indels_B,"Change",-20,10,binwidth=1,fill="grey")+theme_bw() + scale_y_continuous(trans = log2_trans(), breaks = trans_breaks("log2", function(x) 2^x), labels = trans_format("log2", math_format(2^.x)))+ theme_classic() ggarrange(supp8a,ggarrange(supp8b,supp8c,supp8d,ncol=3,labels=c("B","C","D"),widths=c(1,1,.75),align="hv"),nrow=2,labels=c("A"),heights=c(1.5,2)) ###supplementary analysis brain_liver_missense_test <- PolGData %>% filter(!is.na(mut_type),mut_type!="nonsense",som_germ=="Somatic") %>% group_by(Animal,tissue,mut_type)%>% summarise(freq = sum(mut_freq), count = n())%>% mutate(count = count/mt_genome_length,freq = freq/mt_genome_length) %>% mutate(count_cube_root = count^(1/3),freq_cube_root = freq^(1/3)) brain_liver_missense_test$mut_type <- factor(brain_liver_missense_test$mut_type, levels=c("silent","missense")) brain_liver_missense_test.lmer<- lmer(count~tissue*mut_type+(1|Animal),brain_liver_missense_test) summary(brain_liver_missense_test.lmer) #homogeniety test for lmer leveneTest(residuals(brain_liver_missense_test.lmer) ~ brain_liver_missense_test$mut_type*brain_liver_missense_test$tissue) #normality test qqmath(brain_liver_missense_test.lmer, id=0.05) brain_liver_missense_test.cube.lmer<- lmer(count_cube_root~tissue*mut_type+(1|Animal),brain_liver_missense_test) summary(brain_liver_missense_test.cube.lmer) #homogeniety test for lmer leveneTest(residuals(brain_liver_missense_test.cube.lmer) ~ brain_liver_missense_test$mut_type*brain_liver_missense_test$tissue) #normality test qqmath(brain_liver_missense_test.cube.lmer, id=0.05) brain_liver_missense_test.lmer<- lmer(freq~tissue*mut_type+(1|Animal),brain_liver_missense_test) summary(brain_liver_missense_test.lmer) #homogeniety test for lmer leveneTest(residuals(brain_liver_missense_test.lmer) ~ brain_liver_missense_test$mut_type*brain_liver_missense_test$tissue) #normality test qqmath(brain_liver_missense_test.lmer, id=0.05) brain_liver_missense_test.cube.lmer<- lmer(freq_cube_root~tissue*mut_type+(1|Animal),brain_liver_missense_test) summary(brain_liver_missense_test.cube.lmer) #homogeniety test for lmer leveneTest(residuals(brain_liver_missense_test.cube.lmer) ~ brain_liver_missense_test$mut_type*brain_liver_missense_test$tissue) #normality test qqmath(brain_liver_missense_test.cube.lmer, id=0.05)