From bcc2d875f25cfff8d3c27e7e884eb8009a8086ff Mon Sep 17 00:00:00 2001 From: Bryan Roessler Date: Sat, 27 Jul 2024 17:56:56 -0400 Subject: [PATCH] File refactoring --- workflow/.old/templates/qhtcp/Exp2/.DS_Store | Bin 0 -> 6148 bytes .../.old/templates/qhtcp/Exp2/ExpFrontend.m | 214 ++ .../templates/qhtcp/Exp2/ZScores/.DS_Store | Bin 0 -> 6148 bytes .../qhtcp/Exp2/Z_InteractionTemplate.R | 2730 +++++++++++++++++ .../InteractTemplateB4Prompt4SDinput.R | 2702 ++++++++++++++++ workflow/.old/templates/qhtcp/Exp3/.DS_Store | Bin 0 -> 6148 bytes workflow/.old/templates/qhtcp/Exp3/.Rhistory | 0 .../.old/templates/qhtcp/Exp3/ExpFrontend.m | 53 + workflow/.old/templates/qhtcp/Exp3/NotesExp3 | 0 .../qhtcp/Exp3/Z_InteractionTemplate.R | 2730 +++++++++++++++++ .../InteractTemplateB4Prompt4SDinput.R | 2702 ++++++++++++++++ workflow/.old/templates/qhtcp/Exp4/.DS_Store | Bin 0 -> 6148 bytes .../.old/templates/qhtcp/Exp4/ExpFrontend.m | 53 + workflow/.old/templates/qhtcp/Exp4/NotesExp4 | 0 .../qhtcp/Exp4/Z_InteractionTemplate.R | 2730 +++++++++++++++++ .../InteractTemplateB4Prompt4SDinput.R | 2702 ++++++++++++++++ workflow/.old/templates/qhtcp/REMcJar2.sh | 25 + workflow/.old/templates/qhtcp/REMcJar2old.sh | 10 + workflow/.old/templates/qhtcp/REMcMaster2.sh | 92 + workflow/.old/templates/qhtcp/REMcMaster3.sh | 121 + .../.old/templates/qhtcp/REMcRdy_lm_only.csv | 832 +++++ .../qhtcp/REMcRdy_lm_only.csv-WholeTree.txt | 3 + workflow/.old/templates/qhtcp/mComponent.sh | 32 + workflow/.old/templates/qhtcp/mFunction.sh | 32 + workflow/.old/templates/qhtcp/mProcess.sh | 37 + .../{templates => apps}/easy/DMPexcel2mat.m | 12 +- .../{templates => apps}/easy/DgenResults.m | 6 +- .../{templates => apps}/easy/EASYconsole.fig | Bin .../{templates => apps}/easy/EASYconsole.m | 189 +- .../{templates => apps}/easy/NCdisplayGui.m | 0 .../easy/NCfitImCFparforFailGbl2.m | 0 .../easy/NCscurImCF_3parfor.m | 0 .../easy/NCsingleDisplay.m | 0 workflow/{templates => apps}/easy/NIcircle.m | 0 .../easy/NImParamRadiusGui.m | 4 +- .../easy/NIscanIntensBGpar4GblFnc.m | 2 +- .../easy/PTmats/NCFparms.mat | Bin .../easy/PTmats/NImParameters.mat | Bin .../easy/PTmats/NPTdirectParameters.mat | Bin .../easy/PTmats/NPTmapDirect.mat | Bin .../easy/PTmats/NPTmapSearch.mat | Bin .../easy/PTmats/NPTsearchParameters.mat | Bin .../{templates => apps}/easy/PTmats/Nbdg.mat | Bin workflow/{templates => apps}/easy/datatipp.m | 0 .../easy/figs/NPTdirect.fig | Bin .../easy/figs/searchNPTIm.fig | Bin workflow/{templates => apps}/easy/p4loop8c.m | 0 .../{templates => apps}/easy/par4GblFnc8c.m | 0 .../{templates => apps}/easy/par4Gbl_Main8c.m | 1 - workflow/docs/.~lock.EASY Manual 17_0614.odt# | 1 + .../docs/20_0329_SS_Q_HTCP_Analysis_Readme.md | 491 +++ .../20_0329_SS_Q_HTCP_Analysis_Readme.odt | Bin 0 -> 1819969 bytes workflow/docs/EASY Manual 17_0614.odt | Bin 0 -> 7185425 bytes .../docs/QHTCP - Hartman Lab User's Guide.md | 821 +++++ .../docs/QHTCP - Hartman Lab User's Guide.odt | Bin 0 -> 1211272 bytes .../{script-run-workflow => qhtcp-workflow} | 19 +- 56 files changed, 19243 insertions(+), 103 deletions(-) create mode 100644 workflow/.old/templates/qhtcp/Exp2/.DS_Store create mode 100644 workflow/.old/templates/qhtcp/Exp2/ExpFrontend.m create mode 100644 workflow/.old/templates/qhtcp/Exp2/ZScores/.DS_Store create mode 100644 workflow/.old/templates/qhtcp/Exp2/Z_InteractionTemplate.R create mode 100644 workflow/.old/templates/qhtcp/Exp2/backups/InteractTemplateB4Prompt4SDinput.R create mode 100644 workflow/.old/templates/qhtcp/Exp3/.DS_Store create mode 100644 workflow/.old/templates/qhtcp/Exp3/.Rhistory create mode 100644 workflow/.old/templates/qhtcp/Exp3/ExpFrontend.m create mode 100644 workflow/.old/templates/qhtcp/Exp3/NotesExp3 create mode 100644 workflow/.old/templates/qhtcp/Exp3/Z_InteractionTemplate.R create mode 100644 workflow/.old/templates/qhtcp/Exp3/backups/InteractTemplateB4Prompt4SDinput.R create mode 100644 workflow/.old/templates/qhtcp/Exp4/.DS_Store create mode 100644 workflow/.old/templates/qhtcp/Exp4/ExpFrontend.m create mode 100644 workflow/.old/templates/qhtcp/Exp4/NotesExp4 create mode 100644 workflow/.old/templates/qhtcp/Exp4/Z_InteractionTemplate.R create mode 100644 workflow/.old/templates/qhtcp/Exp4/backups/InteractTemplateB4Prompt4SDinput.R create mode 100644 workflow/.old/templates/qhtcp/REMcJar2.sh create mode 100644 workflow/.old/templates/qhtcp/REMcJar2old.sh create mode 100644 workflow/.old/templates/qhtcp/REMcMaster2.sh create mode 100644 workflow/.old/templates/qhtcp/REMcMaster3.sh create mode 100644 workflow/.old/templates/qhtcp/REMcRdy_lm_only.csv create mode 100644 workflow/.old/templates/qhtcp/REMcRdy_lm_only.csv-WholeTree.txt create mode 100644 workflow/.old/templates/qhtcp/mComponent.sh create mode 100644 workflow/.old/templates/qhtcp/mFunction.sh create mode 100644 workflow/.old/templates/qhtcp/mProcess.sh rename workflow/{templates => apps}/easy/DMPexcel2mat.m (93%) rename workflow/{templates => apps}/easy/DgenResults.m (96%) rename workflow/{templates => apps}/easy/EASYconsole.fig (100%) rename workflow/{templates => apps}/easy/EASYconsole.m (74%) rename workflow/{templates => apps}/easy/NCdisplayGui.m (100%) rename workflow/{templates => apps}/easy/NCfitImCFparforFailGbl2.m (100%) rename workflow/{templates => apps}/easy/NCscurImCF_3parfor.m (100%) rename workflow/{templates => apps}/easy/NCsingleDisplay.m (100%) rename workflow/{templates => apps}/easy/NIcircle.m (100%) rename workflow/{templates => apps}/easy/NImParamRadiusGui.m (94%) rename workflow/{templates => apps}/easy/NIscanIntensBGpar4GblFnc.m (97%) rename workflow/{templates => apps}/easy/PTmats/NCFparms.mat (100%) rename workflow/{templates => apps}/easy/PTmats/NImParameters.mat (100%) rename workflow/{templates => apps}/easy/PTmats/NPTdirectParameters.mat (100%) rename workflow/{templates => apps}/easy/PTmats/NPTmapDirect.mat (100%) rename workflow/{templates => apps}/easy/PTmats/NPTmapSearch.mat (100%) rename workflow/{templates => apps}/easy/PTmats/NPTsearchParameters.mat (100%) rename workflow/{templates => apps}/easy/PTmats/Nbdg.mat (100%) rename workflow/{templates => apps}/easy/datatipp.m (100%) rename workflow/{templates => apps}/easy/figs/NPTdirect.fig (100%) rename workflow/{templates => apps}/easy/figs/searchNPTIm.fig (100%) rename workflow/{templates => apps}/easy/p4loop8c.m (100%) rename workflow/{templates => apps}/easy/par4GblFnc8c.m (100%) rename workflow/{templates => apps}/easy/par4Gbl_Main8c.m (96%) create mode 100644 workflow/docs/.~lock.EASY Manual 17_0614.odt# create mode 100644 workflow/docs/20_0329_SS_Q_HTCP_Analysis_Readme.md create mode 100644 workflow/docs/20_0329_SS_Q_HTCP_Analysis_Readme.odt create mode 100644 workflow/docs/EASY Manual 17_0614.odt create mode 100644 workflow/docs/QHTCP - Hartman Lab User's Guide.md create mode 100644 workflow/docs/QHTCP - Hartman Lab User's Guide.odt rename workflow/{script-run-workflow => qhtcp-workflow} (99%) diff --git a/workflow/.old/templates/qhtcp/Exp2/.DS_Store b/workflow/.old/templates/qhtcp/Exp2/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..cae6fe4dc62ae792d8afb236d9a3da17b79ffcce GIT binary patch literal 6148 zcmeI0&u-H|5XQerL+wzIasbf_QY5aCXsT9F6`>Ns3t$8i|AIG;TC0xNvXe$Aio~TC zIPwAvt!{In<@U!bdAw&;{<>yx?ywnq}WWN>k^dK`=QF(v7 zIAWkX9hGRsdxrY-^3LaLU+*m&75&Ai?4TU&gRJK%0`#DfqmM$3i_Av*qOv3|h8r6{ zsIpSMusRjUbQs2IKR1Fn>Z>q+ z{v=K#J#On!8Wl!s9e&NPb?fVsNo(s?v$1)5Yuao~b~d-0jqRP*bXxPT-nhB@uzQ#c zQvFskP9zqWt)21C{5o@2B^&500duZ$0#<*${-JjpC+XT$bGbknC^ikym zcvZ7vZ+@PmAWsvW?n?!5oGa`t>93uuRXZGxe*y0g4ZE}NS^Gw;**XZ)0uUg@L44d( z@Hv*UWhq;hg80Z-=^n^R$+j3Ia*)VDA_s~5PaP%Oe2|SywnHHk9Uv1OAQRo;aGYdC zPSm;nKftN|zr*49kD+QO=(J5yUJlnNzB A>i_@% literal 0 HcmV?d00001 diff --git a/workflow/.old/templates/qhtcp/Exp2/ExpFrontend.m b/workflow/.old/templates/qhtcp/Exp2/ExpFrontend.m new file mode 100644 index 00000000..25a6399b --- /dev/null +++ b/workflow/.old/templates/qhtcp/Exp2/ExpFrontend.m @@ -0,0 +1,214 @@ +%Frontend240417.m +%augmented ExpFrontend to provide a quick text archive and a robust +%database ammenable archive +%FrontEnd utility to copy source result sheet into Exp_ folders of +%StudiesQHTCP/StudyName/Exp1(2,3,4). This allow the automation of path +%capture to the StudiesDataArchieve.txt study log. +%Select, copy and Capture Study Exp_ details to study log + +%Exp meta data collection +W=pwd; +%Load results file meta data into workspace +try +ExpLabel= strcat('Exp',W(end)) +questdlg('\fontsize{20} Select the !!Results File','File Selection','OK', struct('Default','OK','Interpreter','tex')); +[resFile,resPath]= uigetfile('*.txt') +copyfile((fullfile(resPath,resFile)),fullfile(W)) +resDate= char(regexp(resFile, '(\d\d\_\d\d\d\d)|( \d\d\_\d\d\d\d|\d\d\d\d\d\d)','match')) +cd .. +Wstudy= pwd +studyDate= datetime('now'); +S.sDate(1) = {studyDate}; +if ispc + lastSep=max(strfind(Wstudy,'\')) + studyName= Wstudy((lastSep+1):end) +else + lastSep=max(strfind(Wstudy,'/')) + studyName= Wstudy((lastSep+1):end) +end + +S.sDate(1)= {studyDate}; +S.sName(1)= {studyName} +S.sPath(1)= {Wstudy} +S.ELabel(1)= {ExpLabel} +S.EresDate(1)= {resDate} +S.EresFile(1)= {resFile} +S.EresPath(1)= {resPath} + +cd .. + +fid = fopen('StudiesDataArchive.txt','a'); +fprintf(fid,'StudyDate\tStudyName\tStudyPath\tExpNum\tExpDate\tExpPath\tResultFile\n'); +fprintf(fid, '%s\t %s\t %s\t %s\t %s\t %s\t %s \n',S.sDate{1},S.sName{1},S.sPath{1},S.ELabel{1},S.EresDate{1},S.EresPath{1},S.EresFile{1}); +fclose(fid); +fclose('all'); + +catch + cd(W) + disp('Error: Unable to Execute ExpFrontend.m') +end + +cd(W) +pwd + + + +%************************************************************************************* +%************************************************************************************* +%##################################################################################### +%Improved storage ammenable for database use +%FrontEnd utility to copy source result sheet into Exp_ folders of +%StudiesQHTCP/StudyName/Exp1(2,3,4). This allow the automation of path +%capture to the StudiesDataArchieve.txt study log. +%Select, copy and Capture Study Exp_ details to study log +studyDateNow= studyDate %preserve the 'Now' date +nowNumFNm= strcat((int2str(now)),'.mat') % from previous section incase the /StudyName doesn't have a standard date +%capture the /StudiesQHTCP directory for storing log data +cd ../.. +logPath= pwd %is /.../Exp_ +cd(W) +%Try to load an existing data set from previous Frontend calls +try %end ~ln121 + load(fullfile(logPath,'.studyLog.mat')) %load(fullfile('../../','studyLog.mat')) +catch %If no studyLog.mat found [Initial First Entry] + ExpLabel= strcat('Exp',W(end)) + resDate= char(regexp(resFile, '(\d\d\_\d\d\d\d)|( \d\d\_\d\d\d\d|\d\d\d\d\d\d)','match')) + cd .. %move up to current study folder from ../Exp_ folder; + %Study meta data collection + Wstudy= pwd %Capture the specific current Study directory + try %try to extract study date from folder name + studyDate= char(regexp(Wstudy, '(\d\d\_\d\d\d\d)|( \d\d\_\d\d\d\d|\d\d\d\d\d\d)| \d\d\d\d\d\d)','match')) + S.sDate(1)= {studyDate}; + catch %if unsuccessful, accept the current date and convert to a 6 char string + studyDate= yyyymmdd(studyDateNow); + studyDate= (int2str(studyDate)) + studyDate= studyDate(3:8) + end + %Capture StudyName + if ispc + lastSep=max(strfind(Wstudy,'\')) + studyName= Wstudy((lastSep+1):end) + else + lastSep=max(strfind(Wstudy,'/')) + studyName= Wstudy((lastSep+1):end) + + end + %Put current First data entry into Structure of Save to StudyLog.mat file + S.sDate(1)= {studyDate}; + S.sName(1)= {studyName} + S.sPath(1)= {Wstudy} + S.ELabel(1)= {ExpLabel} + S.EresDate(1)= {resDate} + S.EresFile(1)= {resFile} + S.EresPath(1)= {resPath} + + cd(W) + +logFiletxt= fullfile(logPath,'StudiesDataArchive4DB.txt') %relative .txt path +%Initialize the StudiesDataArchive.txt file with the First row of meta data + +%Print to a .txt spreadsheet the first set of data in the logFiletxt file +fid = fopen(logFiletxt,'w'); +fprintf(fid,'StudyDate\tStudyName\tStudyPath\tExpNum\tExpDate\tExpPath\tResultFile\n'); +fprintf(fid, '%s\t %s\t %s\t %s\t %s\t %s\t %s \n',studyDate,studyName,Wstudy,ExpLabel,resDate,resPath,resFile); +fclose(fid); +%Save the first entry meta data into a permanent .mat files for future recall +save(fullfile(logPath,'studyLog4DB.mat'), 'S') +save(fullfile(logPath,'.studyLog.mat'), 'S') +save(fullfile(logPath,'.nowNumFNm.mat'), 'S') + + + +end %end for try for the First entry only +%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +%++++++++END of FIRST ENTRY startup section++++++++++++++++++++++++++++++++ +%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + + +%Begin routine for all Entries After the Initial data entry**************** +ExpLabel= strcat('Exp',W(end)) +resDate= char(regexp(resFile, '(\d\d\_\d\d\d\d)|( \d\d\_\d\d\d\d|\d\d\d\d\d\d)','match')) %Capture date from !!Results file + +cd .. %Move to the current study folder + +%Capture study meta dat +Wstudy= pwd % Capture the path to the current study + + %Attempt to extract study date from folder name and convert to a + %searchable numeric date + studyDate= char(regexp(Wstudy, '(\d\d\_\d\d\d\d)|( \d\d\_\d\d\d\d|\d\d\d\d\d\d)| \d\d\d\d\d\d)','match')) + if ~isempty(studyDate) %If no date in folder name use current date and convert to 6char string + S.sDate(1)= {studyDate}; + if isequal((str2num(studyDate(3))),'_') %Remove '_' so that date is a number for easy DB search + studyDate= strcat(studyDate(1:2),studyDate(4:6)) + end + else + studyDate= yyyymmdd(studyDateNow); + studyDate= (int2str(studyDate)) + studyDate= studyDate(3:8) + end + +if ispc + lastSep=max(strfind(Wstudy,'\')) + studyName= Wstudy((lastSep+1):end) +else + lastSep=max(strfind(Wstudy,'/')) + studyName= Wstudy((lastSep+1):end) +end + +%Put meta data into a structure for storage (studyLog.mat) and future +%compare operations +lastRow= length(S.sPath) + +%Compare these just obtained paths with those stored in the studyLog.mat +%file and add a new row if the study or results sheet meta data is new or different +cd .. %Move the the /QHTPCstudies folder +logtxt= 'StudiesDataArchive4DB.txt' +logFiletxt= fullfile(logPath,logtxt) % +try + matched=0; + for n= 1:(lastRow) + if strcmp(Wstudy,S.sPath(n)) && strcmp(resPath, S.EresPath(n)) && strcmp(ExpLabel, S.ELabel(n)) + matched= 1; + break + end + end + + +%Update the StudiesDataArchive.txt file with a new row of meta data +if matched== 0 %if no match for this entry then add a line to the text archive file + fid = fopen(logFiletxt,'w'); + S.sDate(lastRow+1)= {studyDate}; + S.sName(lastRow+1)= {studyName}; + S.sPath(lastRow+1)= {Wstudy}; + S.ELabel(lastRow+1)= {ExpLabel}; + S.EresDate(lastRow+1)= {resDate}; + S.EresFile(lastRow+1)= {resFile}; + S.EresPath(lastRow+1)= {resPath}; + for n= 1:(lastRow +1) + %Print to a .txt spreadsheet and Save update to .mat files + if n==1 + fprintf(fid,'StudyDate\tStudyName\tStudyPath\tExpNum\tExpDate\tExpPath\tResultFile\n'); + end + fprintf(fid, '%s\t %s\t %s\t %s\t %s\t %s\t %s \n',S.sDate{n},S.sName{n},S.sPath{n},S.ELabel{n},S.EresDate{n},S.EresPath{n},S.EresFile{n}); + end + + fclose(fid); %close DBase amenable study log file after data update + + save((fullfile(logPath,'studyLog4DB.mat')), 'S') % path for studyLog.mat + save((fullfile(logPath,'.studyLog.mat')), 'S') %path backup studyLogBU.mat + save((fullfile(logPath,strcat('.',nowNumFNm))), 'S') +end +fclose('all'); + +catch + cd(W) %Return to the location of the frontend.m code (/studyName/Exp_) + fclose('all'); + clear S %clear data structure variable 'S.' +end + +cd(W) %Return to the location of the frontend.m code (/studyName/Exp_) +clear all %clear workspace variables + + diff --git a/workflow/.old/templates/qhtcp/Exp2/ZScores/.DS_Store b/workflow/.old/templates/qhtcp/Exp2/ZScores/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..9f5f58c5a437f0badf1ce5b8fa3008d7243a4c5d GIT binary patch literal 6148 zcmeI0u}T9$5QhI*Q$z$wX`$dN1i{*iXDdiLo0GdsV&IMqIZW*XSl9@H?;$r;1m%OOx^VmV-y&mDn{LYX3L2SEZ$C5@m1P5 zP79mz%XT)Y{^!A^cO!-N#KmFbweE{bBql z0XipTu-N&&aAI@+)WnxaQIxfVWX0{RwOhHOD1Qy_5BqYq$C0?uPDkthFWny?zyD99L}|zPcM8o=iu-lzz`&p8~IqcQ+pzjvekot HqBMk0YOZbC literal 0 HcmV?d00001 diff --git a/workflow/.old/templates/qhtcp/Exp2/Z_InteractionTemplate.R b/workflow/.old/templates/qhtcp/Exp2/Z_InteractionTemplate.R new file mode 100644 index 00000000..fe31ca14 --- /dev/null +++ b/workflow/.old/templates/qhtcp/Exp2/Z_InteractionTemplate.R @@ -0,0 +1,2730 @@ +#Based on InteractionTemplate.R which is based on Sean Santose's Interaction_V5 script. +#Adapt SS For Structured Data storage but using command line scripts +###Set up the required libraries, call required plot theme elements and set up the command line arguments +library("ggplot2") +library("plyr") +library("extrafont") +library("gridExtra") +library("gplots") +library("RColorBrewer") +library("stringr") +#library("gdata") +library(plotly) +library(htmlwidgets) + +Args <- commandArgs(TRUE) +input_file <- Args[1] #"!!Results_17_0827_yor1null-rpl12anull misLabeledAsFrom MI 17_0919_yor1-curated.txt" #Args[1] #Arg 1 #"!!ResultsStd_JS 19_1224_HLEG_P53.txt" is the !!results ... .txt +#Tool to find a file and copy it to desired location +destDir= getwd() +#srcFile= file.choose() +#file.copy(srcFile, destDir) +#input_file= tail(strsplit(srcFile,"[/]")[[1]],1) + + + +#Path to Output Directory +#W=getwd() #R is F'd up, Can't use, Any legitamate platform could build out dirs from this +outDir <- "ZScores/" #"Args[2] #paste0(W,"/ZScores/") +subDir <- outDir #Args[2] + +if (file.exists(subDir)){ + outputpath <- subDir +} else { + dir.create(file.path(subDir)) +} + +if (file.exists(paste(subDir,"QC/",sep=""))){ + outputpath_QC <- paste(subDir,"QC/",sep="") +} else { + dir.create(file.path(paste(subDir,"QC/",sep=""))) + outputpath_QC <- paste(subDir,"QC/",sep="") +} +#define the output path (formerly the second argument from Rscript) +outputpath <- outDir + +#Set Args[2] the Background contamination noise filter as a function of standard deviation +#std= as.numeric(Args[2]) +#Sean recommends 3 or 5 SD factor. +#Capture Exp_ number,use it to Save Args[2]{std}to Labels field and then Write to Labels to studyInfo.txt for future reference +Labels <- read.csv(file= "../Code/StudyInfo.csv",stringsAsFactors = FALSE) #,sep= ",") +print("Be sure to enter Background noise filter standard deviation i.e., 3 or 5 per Sean") + +#User prompt for std multiplier Value +cat("Enter a Standard Deviation value to noise filter \n") +inpChar<- readLines(file("stdin"), n = 1L) +cat(paste("Standard Deviation Value is", inpChar, "\n")) +inpNum= as.numeric(inpChar) +#set std deviation multiplier default if no user entry +if(!is.na(inpNum)){ + std= inpNum +}else{std= 3} + + +expNumber<- as.numeric(sub("^.*?(\\d+)$", "\\1", getwd())) +Labels[expNumber,3]= as.numeric(std) +Delta_Background_sdFactor <- std +DelBGFactr <- as.numeric(Delta_Background_sdFactor) +#Write Background SD value to studyInfo.txt file +#write.csv(Labels,file=paste("../Code/StudyInfo.csv"),row.names = FALSE) +write.csv(Labels,file=paste("../Code/StudyInfo.csv"),row.names = FALSE) +print('ln 50 write StudyInfo.csv ') +#write.table(Labels,file=paste(outputpath,"StudyInfo.txt"),sep = "\t",row.names = FALSE) + +#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +#++++++BEGIN USER DATA SELECTION SECTION+++++++++++++++++++++++++++++++++++++++++++++++++ + +#read in the data +X <- read.delim(input_file,skip=2,as.is=T,row.names=1,strip.white=TRUE) +X <- X[!(X[[1]]%in%c("","Scan")),] +#X <- X[!(X[[1]]%in%c(61:76)),] #Remove dAmp plates which are Scans 61 thru 76 + +#X <- X[which(X$Specifics == "WT"),] + +#X_length <- length(X[1,]) +#X_end <- length(X[1,]) - 2 +#X <- X[,c(1:42,X_end:X_length)] + + +#use numeric data to perform operations +X$Col <- as.numeric(X$Col) +X$Row <- as.numeric(X$Row) +X$l <- as.numeric(X$l) +X$K <- as.numeric(X$K) +X$r <- as.numeric(X$r) +X$Scan <- as.numeric(X$Scan) +X$AUC <- as.numeric(X$AUC) +X$LstBackgrd <- as.numeric(X$LstBackgrd) +X$X1stBackgrd <- as.numeric(X$X1stBackgrd) + +#Sometimes the an experimenter may have placed the non-varying drug in the 'Drug' col instead of the 'Modifier1' col +#as was the case in Gemcitabin and Cytarabin experiments. +#The following allows user to rename columns so as to get the appropriate +#data where it needs to be for the script to run properly. +#colnames(X)[7] <- "Modifier1" +#colnames(X)[8] <- "Conc1" +#colnames(X)[10] <- "Drug" +#colnames(X)[11] <- "Conc" + +#set the OrfRep to YDL227C for the ref data +X[X$ORF == "YDL227C",]$OrfRep <- "YDL227C" +#Sean removes the Doxycyclin at 0.0ug.mL so that only the Oligomycin series with Doxycyclin of 0.12ug/mL are used. +#That is the first DM plates are removed from the data set with the following. +#X <- X[X$Conc1 != "0ug/ml",] #This removes data with dox ==0 leaving gene expression on with four different concentrations of Gemcytabin +X <- X[X$Drug != "BMH21",] #This removes data concerning BMH21 for this experiment + +#Mert placed the"bad_spot" text in the ORF col. for particular spots in the RF1 and RF2 plates. +#This code removes those spots from the data set used for the interaction analysis. Dr.Hartman feels that these donot effect Zscores significantly and so "non-currated" files were used. +#try(X <- X[X$ORF != "bad_spot",]) +#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= + +#get total number of drug concentrations +Total_Conc_Nums <- length(unique(X$Conc)) + +#function to ID numbers in string with characters+numbers (ie to get numeric drug conc) +numextract <- function(string){ + str_extract(string, "\\-*\\d+\\.*\\d*") +} + +#generate a new column with the numeric drug concs +X$Conc_Num <- as.numeric(numextract(X$Conc)) +#Generate new column with the numeric drug concs as factors starting at 0 for the graphing later +X$Conc_Num_Factor <- as.numeric(as.factor(X$Conc_Num)) - 1 + +#Get the max factor for concentration +MAX_CONC <- max(X$Conc_Num_Factor) +#if treating numbers not as factors uncomment next line and comment out previous line +#MAX_CONC <- max(X$Conc_Num) + +#remove wells with problems for making graphs and to not include in summary statistics +X <- X[X$Gene != "BLANK",] +X <- X[X$Gene != "Blank",] +X <- X[X$ORF != "Blank",] +X <- X[X$Gene != "blank",] +#X <- X[X$Gene != "HO",] +Xbu= X +#Inserted to use SGDgenelist to update orfs and replace empty geneName cells with ORF name (adapted from Sean's Merge script). This is to 'fix' the naming for everything that follows (REMc, Heatmaps ... et.al) rather than do it piece meal later +#Sean's Match Script( which was adapted here) was fixed 2022_0608 so as not to write over the RF1&RF2 geneNames which caused a variance with his code results +#in the Z_lm_L,K,r&AUC output values. Values correlated well but were off by a multiplier factor. +SGDgeneList= "../Code/SGD_features.tab" +genes = data.frame(read.delim(file=SGDgeneList,quote="",header=FALSE,colClasses = c(rep("NULL",3), rep("character", 2), rep("NULL", 11)))) +for(i in 1:length(X[,14])){ + ii= as.numeric(i) + line_num = match(X[ii,14],genes[,1],nomatch=1) + OrfRepColNum= as.numeric(match('OrfRep',names(X))) + if(X[ii,OrfRepColNum]!= "YDL227C"){ + X[ii,15] = genes[line_num,2] + } + if((X[ii,15] == "")||(X[ii,15] == "OCT1")){ + X[ii,15] = X[ii,OrfRepColNum] + } +} +Xblankreplace= X +#X= Xbu #for restore testing restore X if geneName 'Match' routine needs changing + +#Remove dAmPs ******************************* +#jlh confirmed to leave dAmps in so comment out this section +#DAmPs_List <- "../Code/22_0602_Remy_DAmPsList.txt" +#Damps <- read.delim(DAmPs_List,header=F) + +#X <- X[!(X$ORF %in% Damps$V1),] #fix this to Damps[,1] +#XafterDampsRM=X #Backup for debugging especially when Rstudio goes crazy out of control +# *********** + + +#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +#++++++END USER DATA SELECTION+++++++++++++++++++++++++++++++++++++++++++++++++ +#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +print("ln137 End of User Section including blank gene writeOver") +#++++Begin Graphics Boiler Plate Section+++++++++++++++++++++++++++++++++++++++ +#theme elements for plots +theme_Publication <- function(base_size=14, base_family="sans") { + library(grid) + library(ggthemes) + (theme_foundation(base_size=base_size, base_family=base_family) + + theme(plot.title = element_text(face = "bold", + size = rel(1.2), hjust = 0.5), + text = element_text(), + panel.background = element_rect(colour = NA), + plot.background = element_rect(colour = NA), + panel.border = element_rect(colour = NA), + axis.title = element_text(face = "bold",size = rel(1)), + axis.title.y = element_text(angle=90,vjust =2), + axis.title.x = element_text(vjust = -0.2), + axis.text = element_text(), + axis.line = element_line(colour="black"), + axis.ticks = element_line(), + panel.grid.major = element_line(colour="#f0f0f0"), + panel.grid.minor = element_blank(), + legend.key = element_rect(colour = NA), + legend.position = "bottom", + legend.direction = "horizontal", + legend.key.size= unit(0.2, "cm"), + legend.spacing = unit(0, "cm"), + legend.title = element_text(face="italic"), + plot.margin=unit(c(10,5,5,5),"mm"), + strip.background=element_rect(colour="#f0f0f0",fill="#f0f0f0"), + strip.text = element_text(face="bold") + )) + +} + +scale_fill_Publication <- function(...){ + library(scales) + discrete_scale("fill","Publication",manual_pal(values = c("#386cb0","#fdb462","#7fc97f","#ef3b2c","#662506","#a6cee3","#fb9a99","#984ea3","#ffff33")), ...) + +} + +scale_colour_Publication <- function(...){ + discrete_scale("colour","Publication",manual_pal(values = c("#386cb0","#fdb462","#7fc97f","#ef3b2c","#662506","#a6cee3","#fb9a99","#984ea3","#ffff33")), ...) + +} + + +theme_Publication_legend_right <- function(base_size=14, base_family="sans") { + (theme_foundation(base_size=base_size, base_family=base_family) + + theme(plot.title = element_text(face = "bold", + size = rel(1.2), hjust = 0.5), + text = element_text(), + panel.background = element_rect(colour = NA), + plot.background = element_rect(colour = NA), + panel.border = element_rect(colour = NA), + axis.title = element_text(face = "bold",size = rel(1)), + axis.title.y = element_text(angle=90,vjust =2), + axis.title.x = element_text(vjust = -0.2), + axis.text = element_text(), + axis.line = element_line(colour="black"), + axis.ticks = element_line(), + panel.grid.major = element_line(colour="#f0f0f0"), + panel.grid.minor = element_blank(), + legend.key = element_rect(colour = NA), + legend.position = "right", + legend.direction = "vertical", + legend.key.size= unit(0.5, "cm"), + legend.spacing = unit(0, "cm"), + legend.title = element_text(face="italic"), + plot.margin=unit(c(10,5,5,5),"mm"), + strip.background=element_rect(colour="#f0f0f0",fill="#f0f0f0"), + strip.text = element_text(face="bold") + )) + +} + +scale_fill_Publication <- function(...){ + discrete_scale("fill","Publication",manual_pal(values = c("#386cb0","#fdb462","#7fc97f","#ef3b2c","#662506","#a6cee3","#fb9a99","#984ea3","#ffff33")), ...) + +} + +scale_colour_Publication <- function(...){ + discrete_scale("colour","Publication",manual_pal(values = c("#386cb0","#fdb462","#7fc97f","#ef3b2c","#662506","#a6cee3","#fb9a99","#984ea3","#ffff33")), ...) + +} + + +#print timestamp for initial time the code starts +timestamp() +#+++++BEGIN QC SECTION+++++++++++++++++++++++++++++++++++++++++++++++++++++++ +###Part 2 - Quality control +#print quality control graphs for each dataset before removing data due to contamination +#and before adjusting missing data to max theoretical values + +#plate analysis plot +#plate analysis is a quality check to identify plate effects containing anomalies + +Plate_Analysis_L <- ggplot(X,aes(Scan,l,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for L before quality control") + theme_Publication() + +Plate_Analysis_K <- ggplot(X,aes(Scan,K,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for K before quality control") + theme_Publication() + +Plate_Analysis_r <- ggplot(X,aes(Scan,r,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for r before quality control") + theme_Publication() + +Plate_Analysis_AUC <- ggplot(X,aes(Scan,AUC,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for AUC before quality control") + theme_Publication() + + + +Plate_Analysis_L_Box <- ggplot(X,aes(as.factor(Scan),l,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for L before quality control") + theme_Publication() + +Plate_Analysis_K_Box <- ggplot(X,aes(as.factor(Scan),K,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for K before quality control") + theme_Publication() + +Plate_Analysis_r_Box <- ggplot(X,aes(as.factor(Scan),r,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for r before quality control") + theme_Publication() + +Plate_Analysis_AUC_Box <- ggplot(X,aes(as.factor(Scan),AUC,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for AUC before quality control") + theme_Publication() + +#quality control - values with a high delta background likely have heavy contamination +#check the frequency of these values +#report the L and K values of these spots +#report the number to be removed based on the Delta_Background_Tolerance +X$Delta_Backgrd <- X$LstBackgrd - X$X1stBackgrd + + +#raw l vs K before QC +Raw_l_vs_K_beforeQC <- ggplot(X,aes(l,K,color=as.factor(Conc_Num))) + geom_point(aes(ORF=ORF,Gene=Gene,Delta_Backgrd=Delta_Backgrd),shape=3) + + ggtitle("Raw L vs K before QC") + + theme_Publication_legend_right() +pdf(paste(outputpath_QC,"Raw_L_vs_K_beforeQC.pdf",sep=""),width = 12,height = 8) +Raw_l_vs_K_beforeQC +dev.off() +pgg <- ggplotly(Raw_l_vs_K_beforeQC) +#pgg +plotly_path <- paste(getwd(),"/",outputpath_QC,"Raw_L_vs_K_beforeQC.html",sep="") +saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + +#set delta background tolerance based on 3 sds from the mean delta background +Delta_Background_Tolerance <- mean(X$Delta_Backgrd)+(DelBGFactr*sd(X$Delta_Backgrd)) +#Delta_Background_Tolerance <- mean(X$Delta_Backgrd)+(3*sd(X$Delta_Backgrd)) +print(paste("Delta_Background_Tolerance is",Delta_Background_Tolerance,sep=" ")) + +Plate_Analysis_Delta_Backgrd <- ggplot(X,aes(Scan,Delta_Backgrd,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2,position="jitter") + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd before quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_Box <- ggplot(X,aes(as.factor(Scan),Delta_Backgrd,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd before quality control") + theme_Publication() + + + +X_Delta_Backgrd_above_Tolerance <- X[X$Delta_Backgrd >= Delta_Background_Tolerance,] + +X_Delta_Backgrd_above_Tolerance_K_halfmedian <- (median(X_Delta_Backgrd_above_Tolerance$K,na.rm = TRUE))/2 +X_Delta_Backgrd_above_Tolerance_L_halfmedian <- (median(X_Delta_Backgrd_above_Tolerance$l,na.rm = TRUE))/2 +X_Delta_Backgrd_above_Tolerance_toRemove <- dim(X_Delta_Backgrd_above_Tolerance)[1] + +X_Delta_Backgrd_above_Tolerance_L_vs_K <- ggplot(X_Delta_Backgrd_above_Tolerance,aes(l,K,color=as.factor(Conc_Num))) + geom_point(aes(ORF=ORF,Gene=Gene,Delta_Backgrd=Delta_Backgrd),shape=3) + + ggtitle(paste("Raw L vs K for strains above delta background threshold of",Delta_Background_Tolerance,"or above")) + + annotate("text",x=X_Delta_Backgrd_above_Tolerance_L_halfmedian,y=X_Delta_Backgrd_above_Tolerance_K_halfmedian, + label = paste("Strains above delta background tolerance = ",X_Delta_Backgrd_above_Tolerance_toRemove)) + + theme_Publication_legend_right() +pdf(paste(outputpath_QC,"Raw_L_vs_K_for_strains_above_deltabackgrd_threshold.pdf",sep=""),width = 12,height = 8) +X_Delta_Backgrd_above_Tolerance_L_vs_K +dev.off() +pgg <- ggplotly(X_Delta_Backgrd_above_Tolerance_L_vs_K) +#pgg +plotly_path <- paste(getwd(),"/",outputpath_QC,"Raw_L_vs_K_for_strains_above_deltabackgrd_threshold.html",sep="") +saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + +#frequency plot for all data vs. the delta_background +DeltaBackground_Frequency_Plot <- ggplot(X,aes(Delta_Backgrd,color=as.factor(Conc_Num))) + geom_density() + + ggtitle("Density plot for Delta Background by Conc All Data") + theme_Publication_legend_right() + +#bar plot for all data vs. the delta_background +DeltaBackground_Bar_Plot <- ggplot(X,aes(Delta_Backgrd,color=as.factor(Conc_Num))) + geom_bar() + + ggtitle("Bar plot for Delta Background by Conc All Data") + theme_Publication_legend_right() + +pdf(file = paste(outputpath_QC,"Frequency_Delta_Background.pdf",sep=""),width = 12,height = 8) +print(DeltaBackground_Frequency_Plot) +print(DeltaBackground_Bar_Plot) +dev.off() + + +#Need to identify missing data, and differentiate between this data and removed data so the removed data can get set to NA and the missing data can get set to max theoretical values +#1 for missing data, 0 for non missing data +#Use "NG" for NoGrowth rather than "missing" +X$NG <- 0 +try(X[X$l == 0 & !is.na(X$l),]$NG <- 1) + +#1 for removed data, 0 non removed data +#Use DB to identify number of genes removed due to the DeltaBackground Threshold rather than "Removed" +X$DB <- 0 +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$DB <- 1) + +#replace the CPPs for l, r, AUC and K (must be last!) for removed data +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$l <- NA) +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$r <- NA) +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$AUC <- NA) +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$K <- NA) + + +Plate_Analysis_L_afterQC <- ggplot(X,aes(Scan,l,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_afterQC <- ggplot(X,aes(Scan,K,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_afterQC <- ggplot(X,aes(Scan,r,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_afterQC <- ggplot(X,aes(Scan,AUC,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_afterQC <- ggplot(X,aes(Scan,Delta_Backgrd,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + + +Plate_Analysis_L_Box_afterQC <- ggplot(X,aes(as.factor(Scan),l,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_Box_afterQC <- ggplot(X,aes(as.factor(Scan),K,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_Box_afterQC <- ggplot(X,aes(as.factor(Scan),r,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_Box_afterQC <- ggplot(X,aes(as.factor(Scan),AUC,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_Box_afterQC <- ggplot(X,aes(as.factor(Scan),Delta_Backgrd,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis.pdf",sep=""),width = 14,height=9) +Plate_Analysis_L +Plate_Analysis_L_afterQC +Plate_Analysis_K +Plate_Analysis_K_afterQC +Plate_Analysis_r +Plate_Analysis_r_afterQC +Plate_Analysis_AUC +Plate_Analysis_AUC_afterQC +Plate_Analysis_Delta_Backgrd +Plate_Analysis_Delta_Backgrd_afterQC +dev.off() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis_Boxplots.pdf",sep=""),width = 18,height=9) +Plate_Analysis_L_Box +Plate_Analysis_L_Box_afterQC +Plate_Analysis_K_Box +Plate_Analysis_K_Box_afterQC +Plate_Analysis_r_Box +Plate_Analysis_r_Box_afterQC +Plate_Analysis_AUC_Box +Plate_Analysis_AUC_Box_afterQC +Plate_Analysis_Delta_Backgrd_Box +Plate_Analysis_Delta_Backgrd_Box_afterQC +dev.off() + +#remove the zero values and print plate analysis +X_noZero <- X[which(X$l > 0),] +Plate_Analysis_L_afterQC_Z <- ggplot(X_noZero,aes(Scan,l,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_afterQC_Z <- ggplot(X_noZero,aes(Scan,K,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_afterQC_Z <- ggplot(X_noZero,aes(Scan,r,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_afterQC_Z <- ggplot(X_noZero,aes(Scan,AUC,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_afterQC_Z <- ggplot(X_noZero,aes(Scan,Delta_Backgrd,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + + +Plate_Analysis_L_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),l,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),K,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),r,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),AUC,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),Delta_Backgrd,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis_noZeros.pdf",sep=""),width = 14,height=9) +Plate_Analysis_L_afterQC_Z +Plate_Analysis_K_afterQC_Z +Plate_Analysis_r_afterQC_Z +Plate_Analysis_AUC_afterQC_Z +Plate_Analysis_Delta_Backgrd_afterQC_Z +dev.off() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis_noZeros_Boxplots.pdf",sep=""),width = 18,height=9) +Plate_Analysis_L_Box_afterQC_Z +Plate_Analysis_K_Box_afterQC_Z +Plate_Analysis_r_Box_afterQC_Z +Plate_Analysis_AUC_Box_afterQC_Z +Plate_Analysis_Delta_Backgrd_Box_afterQC_Z +dev.off() + +#remove dataset with zeros removed +rm(X_noZero) + + +#X_test_missing_and_removed <- X[X$Removed == 1,] + +#calculate summary statistics for all strains, including both background and the deletions +X_stats_ALL <- ddply(X, c("Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_AUC = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + se_AUC = sd_AUC / sqrt(N-1) +) +#print(X_stats_ALL_L) + +write.csv(X_stats_ALL,file=paste(outputpath,"SummaryStats_ALLSTRAINS.csv"),row.names = FALSE) +#+++++END QC SECTION+++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +##### Part 3 - Generate summary statistics and calculate the max theoretical L value +##### Calculate the Z score at each drug conc for each deletion strain + + +#get the background strains - can be modified to take another argument but for most screens will just be YDL227C +Background_Strains <- c("YDL227C") + +#first part of loop will go through for each background strain +#most cases there will only be one YDL227C +for(s in Background_Strains){ + X_Background <- X[X$OrfRep == s,] + + #if there's missing data for the background strains set these values to NA so the 0 values aren't included in summary statistics + #we may want to consider in some cases giving the max high value to L depending on the data type + if(table(X_Background$l)[1] == 0){ + X_Background[X_Background$l == 0,]$l <- NA + X_Background[X_Background$K == 0,]$K <- NA + X_Background[X_Background$r == 0,]$r <- NA + X_Background[X_Background$AUC == 0,]$AUC <- NA + } + + X_Background <- X_Background[!is.na(X_Background$l),] + + #get summary stats for L, K, R, AUC + X_stats_BY_L <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean = mean(l,na.rm=TRUE), + median = median(l,na.rm=TRUE), + max = max(l,na.rm=TRUE), + min = min(l,na.rm=TRUE), + sd = sd(l,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + print(X_stats_BY_L) + X1_SD <- max(X_stats_BY_L$sd) + + X_stats_BY_K <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(K)), + mean = mean(K,na.rm=TRUE), + median = median(K,na.rm=TRUE), + max = max(K,na.rm=TRUE), + min = min(K,na.rm=TRUE), + sd = sd(K,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + + X1_SD_K <- max(X_stats_BY_K$sd) + + + X_stats_BY_r <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = length(r), + mean = mean(r,na.rm=TRUE), + median = median(r,na.rm=TRUE), + max = max(r,na.rm=TRUE), + min = min(r,na.rm=TRUE), + sd = sd(r,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + + X1_SD_r <- max(X_stats_BY_r$sd) + + X_stats_BY_AUC <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = length(AUC), + mean = mean(AUC,na.rm=TRUE), + median = median(AUC,na.rm=TRUE), + max = max(AUC,na.rm=TRUE), + min = min(AUC,na.rm=TRUE), + sd = sd(AUC,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + + X1_SD_AUC <- max(X_stats_BY_AUC$sd) + + X_stats_BY <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_L = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + se_AUC = sd_AUC / sqrt(N-1) + ) + + write.csv(X_stats_BY,file=paste(outputpath,"SummaryStats_BackgroundStrains.csv"),row.names=FALSE) + + #calculate the max theoretical L values + #only look for max values when K is within 2SD of the ref strain + for(q in unique(X$Conc_Num_Factor)){ + if(q == 0){ + X_within_2SD_K <- X[X$Conc_Num_Factor == q,] + X_within_2SD_K <- X_within_2SD_K[!is.na(X_within_2SD_K$l),] + X_stats_TEMP_K <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_within_2SD_K <- X_within_2SD_K[X_within_2SD_K$K >= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])) ,] + X_within_2SD_K <- X_within_2SD_K[X_within_2SD_K$K <= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + + X_outside_2SD_K <- X[X$Conc_Num_Factor == q,] + X_outside_2SD_K <- X_outside_2SD_K[!is.na(X_outside_2SD_K$l),] + #X_outside_2SD_K_Temp <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_outside_2SD_K <- X_outside_2SD_K[X_outside_2SD_K$K <= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])) | X_outside_2SD_K$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + #X_outside_2SD_K <- X_outside_2SD_K[X_outside_2SD_K$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + + } + if(q > 0){ + X_within_2SD_K_temp <- X[X$Conc_Num_Factor == q,] + X_within_2SD_K_temp <- X_within_2SD_K_temp[!is.na(X_within_2SD_K_temp$l),] + X_stats_TEMP_K <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_within_2SD_K_temp <- X_within_2SD_K_temp[X_within_2SD_K_temp$K >= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])),] + X_within_2SD_K_temp <- X_within_2SD_K_temp[X_within_2SD_K_temp$K <= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])),] + X_within_2SD_K <- rbind(X_within_2SD_K,X_within_2SD_K_temp) + + X_outside_2SD_K_temp <- X[X$Conc_Num_Factor == q,] + X_outside_2SD_K_temp <- X_outside_2SD_K_temp[!is.na(X_outside_2SD_K_temp$l),] + #X_outside_2SD_K_Temp <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_outside_2SD_K_temp <- X_outside_2SD_K_temp[X_outside_2SD_K_temp$K <= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])) | X_outside_2SD_K_temp$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + #X_outside_2SD_K_temp <- X_outside_2SD_K_temp[X_outside_2SD_K_temp$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + X_outside_2SD_K <- rbind(X_outside_2SD_K,X_outside_2SD_K_temp) + } + } + + X_stats_BY_L_within_2SD_K <- ddply(X_within_2SD_K, c("Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean = mean(l), + median = median(l), + max = max(l,na.rm=TRUE), + min = min(l,na.rm=TRUE), + sd = sd(l), + se = sd / sqrt(N-1), + z_max = (max-mean)/sd + ) + print(X_stats_BY_L_within_2SD_K) + X1_SD_within_2SD_K <- max(X_stats_BY_L_within_2SD_K$sd) + write.csv(X_stats_BY_L_within_2SD_K,file=paste(outputpath_QC,"Max_Observed_L_Vals_for_spots_within_2SD_K.csv",sep=""),row.names=FALSE) + + X_stats_BY_L_outside_2SD_K <- ddply(X_outside_2SD_K, c("Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean = mean(l), + median = median(l), + max = max(l,na.rm=TRUE), + min = min(l,na.rm=TRUE), + sd = sd(l), + se = sd / sqrt(N-1) + ) + print(X_stats_BY_L_outside_2SD_K) + X1_SD_outside_2SD_K <- max(X_stats_BY_L_outside_2SD_K$sd) + + #X1_SD_outside_2SD_K <- X[X$l %in% X1_SD_within_2SD_K$l,] + Outside_2SD_K_L_vs_K <- ggplot(X_outside_2SD_K,aes(l,K,color=as.factor(Conc_Num))) + geom_point(aes(ORF=ORF,Gene=Gene,Delta_Backgrd=Delta_Backgrd),shape=3) + + ggtitle("Raw L vs K for strains falling outside 2SD of the K mean at each conc") + theme_Publication_legend_right() + pdf(paste(outputpath_QC,"Raw_L_vs_K_for_strains_2SD_outside_mean_K.pdf",sep=""),width = 10,height = 8) + print(Outside_2SD_K_L_vs_K) + dev.off() + pgg <- ggplotly(Outside_2SD_K_L_vs_K) + plotly_path <- paste(getwd(),"/",outputpath_QC,"RawL_vs_K_for_strains_outside_2SD_K.html",sep="") + saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + + Outside_2SD_K_delta_background_vs_K <- ggplot(X_outside_2SD_K,aes(Delta_Backgrd,K,color=as.factor(Conc_Num))) + geom_point(aes(l=l,ORF=ORF,Gene=Gene),shape=3,position="jitter") + + ggtitle("DeltaBackground vs K for strains falling outside 2SD of the K mean at each conc") + theme_Publication_legend_right() + pdf(paste(outputpath_QC,"DeltaBackground_vs_K_for_strains_2SD_outside_mean_K.pdf",sep=""),width = 10,height = 8) + Outside_2SD_K_delta_background_vs_K + dev.off() + pgg <- ggplotly(Outside_2SD_K_delta_background_vs_K) + #pgg + plotly_path <- paste(getwd(),"/",outputpath_QC,"DeltaBackground_vs_K_for_strains_outside_2SD_K.html",sep="") + saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + + #get the background strain mean values at the no drug conc to calculate shift + Background_L <- X_stats_BY_L$mean[1] + Background_K <- X_stats_BY_K$mean[1] + Background_r <- X_stats_BY_r$mean[1] + Background_AUC <- X_stats_BY_AUC$mean[1] + + #create empty plots for plotting element + p_l <- ggplot() + p_K <- ggplot() + p_r <- ggplot() + p_AUC <- ggplot() + + p_rf_l <- ggplot() + p_rf_K <- ggplot() + p_rf_r <- ggplot() + p_rf_AUC <- ggplot() + + #get only the deletion strains + X2 <- X + X2 <- X2[X2$OrfRep != "YDL227C",] + + #if set to max theoretical value, add a 1 to SM, if not, leave as 0 + #SM = Set to Max + X2$SM <- 0 + #set the missing values to the highest theoretical value at each drug conc for L, leave other values as 0 for the max/min + for(i in 1:length(unique(X2$Conc_Num))){ + Concentration <- unique(X2$Conc_Num)[i] + X2_temp <- X2[X2$Conc_Num == Concentration,] + if(Concentration == 0){ + X2_new <- X2_temp + print(paste("Check loop order, conc =",Concentration,sep=" ")) + } + if(Concentration > 0){ + try(X2_temp[X2_temp$l == 0 & !is.na(X2_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + try(X2_temp[X2_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_temp$l),]$SM <- 1) + try(X2_temp[X2_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + + #X2_temp[X2_temp$K == 0,]$K <- X_stats_ALL_K$max[i] + #X2_temp[X2_temp$r == 0,]$r <- X_stats_ALL_r$max[i] + #X2_temp[X2_temp$AUC == 0,]$AUC <- X_stats_ALL_AUC$max[i] + print(paste("Check loop order, conc =",Concentration,sep=" ")) + + X2_new <- rbind(X2_new,X2_temp) + + } + } + X2 <- X2_new + + + #get only the RF strains + X2_RF <- X + X2_RF <- X2_RF[X2_RF$OrfRep == "YDL227C",] + #if set to max theoretical value, add a 1 to SM, if not, leave as 0 + #SM = Set to Max + X2_RF$SM <- 0 + #set the missing values to the highest theoretical value at each drug conc for L, leave other values as 0 for the max/min + for(i in 1:length(unique(X2_RF$Conc_Num))){ + Concentration <- unique(X2_RF$Conc_Num)[i] + X2_RF_temp <- X2_RF[X2_RF$Conc_Num == Concentration,] + if(Concentration == 0){ + X2_RF_new <- X2_RF_temp + print(paste("Check loop order, conc =",Concentration,sep=" ")) + } + if(Concentration > 0){ + try(X2_RF_temp[X2_RF_temp$l == 0 & !is.na(X2_RF_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + try(X2_temp[X2_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_temp$l),]$SM <- 1) + try(X2_RF_temp[X2_RF_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_RF_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + print(paste("Check loop order, if error, refs have no L values outside theoretical max L, for REFs, conc =",Concentration,sep=" ")) + + X2_RF_new <- rbind(X2_RF_new,X2_RF_temp) + + } + } + X2_RF <- X2_RF_new + + + #######Part 4 Get the RF Z score values + #Change the OrfRep Column to include the RF strain, the Gene name and the Num. so each RF gets its own score + X2_RF$OrfRep <- paste(X2_RF$OrfRep,X2_RF$Gene,X2_RF$Num.,sep="_") + + num_genes_RF <- length(unique(X2_RF$OrfRep)) + print(num_genes_RF) + + + #create the output data.frame containing columns for each RF strain + InteractionScores_RF <- unique(X2_RF["OrfRep"]) + #InteractionScores_RF$Gene <- unique(X2$Gene) + InteractionScores_RF$Gene <- NA + InteractionScores_RF$Raw_Shift_L <- NA + InteractionScores_RF$Z_Shift_L <- NA + InteractionScores_RF$lm_Score_L <- NA + InteractionScores_RF$Z_lm_L <- NA + InteractionScores_RF$R_Squared_L <- NA + InteractionScores_RF$Sum_Z_Score_L <- NA + InteractionScores_RF$Avg_Zscore_L <- NA + InteractionScores_RF$Raw_Shift_K <- NA + InteractionScores_RF$Z_Shift_K <- NA + InteractionScores_RF$lm_Score_K <- NA + InteractionScores_RF$Z_lm_K <- NA + InteractionScores_RF$R_Squared_K <- NA + InteractionScores_RF$Sum_Z_Score_K <- NA + InteractionScores_RF$Avg_Zscore_K <- NA + InteractionScores_RF$Raw_Shift_r <- NA + InteractionScores_RF$Z_Shift_r <- NA + InteractionScores_RF$lm_Score_r <- NA + InteractionScores_RF$Z_lm_r <- NA + InteractionScores_RF$R_Squared_r <- NA + InteractionScores_RF$Sum_Z_Score_r <- NA + InteractionScores_RF$Avg_Zscore_r <- NA + InteractionScores_RF$Raw_Shift_AUC <- NA + InteractionScores_RF$Z_Shift_AUC <- NA + InteractionScores_RF$lm_Score_AUC <- NA + InteractionScores_RF$Z_lm_AUC <- NA + InteractionScores_RF$R_Squared_AUC <- NA + InteractionScores_RF$Sum_Z_Score_AUC <- NA + InteractionScores_RF$Avg_Zscore_AUC <- NA + InteractionScores_RF$NG <- NA + InteractionScores_RF$SM <- NA + + + for(i in 1:num_genes_RF){ + #get each deletion strain ORF + Gene_Sel <- unique(X2_RF$OrfRep)[i] + #extract only the current deletion strain and its data + X_Gene_Sel <- X2_RF[X2_RF$OrfRep == Gene_Sel,] + + X_stats_interaction <- ddply(X_Gene_Sel, c("OrfRep","Gene","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm = TRUE), + median_L = median(l,na.rm = TRUE), + sd_L = sd(l,na.rm = TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm = TRUE), + median_K = median(K,na.rm = TRUE), + sd_K = sd(K,na.rm = TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm = TRUE), + median_r = median(r,na.rm = TRUE), + sd_r = sd(r,na.rm = TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm = TRUE), + median_AUC = median(AUC,na.rm = TRUE), + sd_AUC = sd(AUC,na.rm = TRUE), + se_AUC = sd_AUC / sqrt(N-1), + NG = sum(NG,na.rm=TRUE), + DB= sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + #Get shift vals + #if L is 0, that means the no growth on no drug + #if L is NA at 0, that means the spot was removed due to contamination + #if L is 0, keep the shift at 0 and for other drug concs calculate delta Ls with no shift + #otherwise calculate shift at no drug conc + if(is.na(X_stats_interaction$mean_L[1]) | X_stats_interaction$mean_L[1] == 0 ){ + X_stats_interaction$Raw_Shift_L <- 0 + X_stats_interaction$Raw_Shift_K <- 0 + X_stats_interaction$Raw_Shift_r <- 0 + X_stats_interaction$Raw_Shift_AUC <- 0 + X_stats_interaction$Z_Shift_L <- 0 + X_stats_interaction$Z_Shift_K <- 0 + X_stats_interaction$Z_Shift_r <- 0 + X_stats_interaction$Z_Shift_AUC <- 0 + }else{ + X_stats_interaction$Raw_Shift_L <- X_stats_interaction$mean_L[1] - Background_L + X_stats_interaction$Raw_Shift_K <- X_stats_interaction$mean_K[1] - Background_K + X_stats_interaction$Raw_Shift_r <- X_stats_interaction$mean_r[1] - Background_r + X_stats_interaction$Raw_Shift_AUC <- X_stats_interaction$mean_AUC[1] - Background_AUC + X_stats_interaction$Z_Shift_L <- X_stats_interaction$Raw_Shift_L[1]/X_stats_BY_L$sd[1] + X_stats_interaction$Z_Shift_K <- X_stats_interaction$Raw_Shift_K[1]/X_stats_BY_K$sd[1] + X_stats_interaction$Z_Shift_r <- X_stats_interaction$Raw_Shift_r[1]/X_stats_BY_r$sd[1] + X_stats_interaction$Z_Shift_AUC <- X_stats_interaction$Raw_Shift_AUC[1]/X_stats_BY_AUC$sd[1] + } + + + #get WT vals + X_stats_interaction$WT_l <- X_stats_BY_L$mean + X_stats_interaction$WT_K <- X_stats_BY_K$mean + X_stats_interaction$WT_r <- X_stats_BY_r$mean + X_stats_interaction$WT_AUC <- X_stats_BY_AUC$mean + + #Get WT SD + X_stats_interaction$WT_sd_l <- X_stats_BY_L$sd + X_stats_interaction$WT_sd_K <- X_stats_BY_K$sd + X_stats_interaction$WT_sd_r <- X_stats_BY_r$sd + X_stats_interaction$WT_sd_AUC <- X_stats_BY_AUC$sd + + + #only get scores if there's growth at no drug + if(X_stats_interaction$mean_L[1] != 0 & !is.na(X_stats_interaction$mean_L[1])){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for no growth values in Z score calculation + if(sum(X_stats_interaction$NG,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #get linear model + gene_lm_L <- lm(formula = Delta_L ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_K <- lm(formula = Delta_K ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_r <- lm(formula = Delta_r ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_AUC <- lm(formula = Delta_AUC ~ Conc_Num_Factor,data = X_stats_interaction) + + #get interaction score calculated by linear model and R-squared value for the fit + gene_interaction_L <- MAX_CONC*(gene_lm_L$coefficients[2]) + gene_lm_L$coefficients[1] + r_squared_l <- summary(gene_lm_L)$r.squared + gene_interaction_K <- MAX_CONC*(gene_lm_K$coefficients[2]) + gene_lm_K$coefficients[1] + r_squared_K <- summary(gene_lm_K)$r.squared + gene_interaction_r <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_r$coefficients[1] + r_squared_r <- summary(gene_lm_r)$r.squared + gene_interaction_AUC <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_AUC$coefficients[1] + r_squared_AUC <- summary(gene_lm_AUC)$r.squared + + #Get total of non removed values + Num_non_Removed_Conc <- Total_Conc_Nums - sum(X_stats_interaction$DB,na.rm = TRUE) - 1 + + #report the scores + InteractionScores_RF$OrfRep[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$OrfRep[1] + InteractionScores_RF$Gene[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$Gene[1] + + InteractionScores_RF$Raw_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores_RF$Z_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores_RF$lm_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_L + InteractionScores_RF$R_Squared_L[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores_RF$Sum_Z_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_L[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE)/(Num_non_Removed_Conc) + + + InteractionScores_RF$Raw_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores_RF$Z_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores_RF$lm_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_K + InteractionScores_RF$R_Squared_K[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores_RF$Sum_Z_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_K[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE)/(Num_non_Removed_Conc) + + InteractionScores_RF$Raw_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores_RF$Z_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores_RF$lm_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_r + InteractionScores_RF$R_Squared_r[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores_RF$Sum_Z_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_r[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE)/(Total_Conc_Nums-1) + + InteractionScores_RF$Raw_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores_RF$Z_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores_RF$lm_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_AUC + InteractionScores_RF$R_Squared_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores_RF$Sum_Z_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE)/(Total_Conc_Nums-1) + } + + if(X_stats_interaction$mean_L[1] == 0 | is.na(X_stats_interaction$mean_L[1]) ){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for missing values in Z score calculatiom + if(sum(X_stats_interaction$NG,na.rm = TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #NA values for the next part since there's an NA or 0 at the no drug. + gene_lm_L <- NA + gene_lm_K <- NA + gene_lm_r <- NA + gene_lm_AUC <- NA + + gene_interaction_L <- NA + r_squared_l <- NA + gene_interaction_K <- NA + r_squared_K <- NA + gene_interaction_r <- NA + r_squared_r <- NA + gene_interaction_AUC <- NA + r_squared_AUC <- NA + + X_stats_interaction$Raw_Shift_L <- NA + X_stats_interaction$Raw_Shift_K <- NA + X_stats_interaction$Raw_Shift_r <- NA + X_stats_interaction$Raw_Shift_AUC <- NA + + X_stats_interaction$Z_Shift_L <- NA + X_stats_interaction$Z_Shift_K <- NA + X_stats_interaction$Z_Shift_r <- NA + X_stats_interaction$Z_Shift_AUC <- NA + + InteractionScores_RF$OrfRep[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$OrfRep[1] + InteractionScores_RF$Gene[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$Gene[1] + + InteractionScores_RF$Raw_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores_RF$Z_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores_RF$lm_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_L + InteractionScores_RF$R_Squared_L[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores_RF$Sum_Z_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_L[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + + InteractionScores_RF$Raw_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores_RF$Z_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores_RF$lm_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_K + InteractionScores_RF$R_Squared_K[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores_RF$Sum_Z_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_K[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + + InteractionScores_RF$Raw_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores_RF$Z_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores_RF$lm_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_r + InteractionScores_RF$R_Squared_r[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores_RF$Sum_Z_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_r[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + + InteractionScores_RF$Raw_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores_RF$Z_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores_RF$lm_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_AUC + InteractionScores_RF$R_Squared_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores_RF$Sum_Z_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + } + + if(i == 1){ + X_stats_interaction_ALL_RF <- X_stats_interaction + } + if(i > 1){ + X_stats_interaction_ALL_RF <- rbind(X_stats_interaction_ALL_RF,X_stats_interaction) + } + + InteractionScores_RF$NG[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$NG,na.rm = TRUE) + InteractionScores_RF$DB[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$DB,na.rm = TRUE) + InteractionScores_RF$SM[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$SM,na.rm = TRUE) + + #X_stats_L_int_temp <- rbind(X_stats_L_int_temp,X_stats_L_int) + + + } + print("Pass RF Calculation loop") + + lm_sd_L <- sd(InteractionScores_RF$lm_Score_L,na.rm=TRUE) + lm_sd_K <- sd(InteractionScores_RF$lm_Score_K,na.rm=TRUE) + lm_sd_r <- sd(InteractionScores_RF$lm_Score_r,na.rm=TRUE) + lm_sd_AUC <- sd(InteractionScores_RF$lm_Score_AUC,na.rm=TRUE) + + lm_mean_L <- mean(InteractionScores_RF$lm_Score_L,na.rm=TRUE) + lm_mean_K <- mean(InteractionScores_RF$lm_Score_K,na.rm=TRUE) + lm_mean_r <- mean(InteractionScores_RF$lm_Score_r,na.rm=TRUE) + lm_mean_AUC <- mean(InteractionScores_RF$lm_Score_AUC,na.rm=TRUE) + + print(paste("Mean RF linear regression score L",lm_mean_L)) + + + InteractionScores_RF$Z_lm_L <- (InteractionScores_RF$lm_Score_L - lm_mean_L)/(lm_sd_L) + InteractionScores_RF$Z_lm_K <- (InteractionScores_RF$lm_Score_K - lm_mean_K)/(lm_sd_K) + InteractionScores_RF$Z_lm_r <- (InteractionScores_RF$lm_Score_r - lm_mean_r)/(lm_sd_r) + InteractionScores_RF$Z_lm_AUC <- (InteractionScores_RF$lm_Score_AUC - lm_mean_AUC)/(lm_sd_AUC) + + + InteractionScores_RF <- InteractionScores_RF[order(InteractionScores_RF$Z_lm_L,decreasing=TRUE),] + InteractionScores_RF <- InteractionScores_RF[order(InteractionScores_RF$NG,decreasing=TRUE),] + write.csv(InteractionScores_RF,paste(outputpath,"RF_ZScores_Interaction.csv",sep=""),row.names=FALSE) + + + for(i in 1:num_genes_RF){ + Gene_Sel <- unique(InteractionScores_RF$OrfRep)[i] + X_ZCalculations <- X_stats_interaction_ALL_RF[X_stats_interaction_ALL_RF$OrfRep == Gene_Sel,] + X_Int_Scores <- InteractionScores_RF[InteractionScores_RF$OrfRep == Gene_Sel,] + + p_rf_l[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_L)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_l), ymax=0+(2*WT_sd_l)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_L,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg Zscore =",round(X_Int_Scores$Avg_Zscore_L,2))) + + annotate("text",x=1,y=25,label = paste("lm Zscore =",round(X_Int_Scores$Z_lm_L,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_rf_K[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_K)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_K), ymax=0+(2*WT_sd_K)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_K,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_K,2))) + + annotate("text",x=1,y=25,label = paste("lm ZScore =",round(X_Int_Scores$Z_lm_L,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_rf_r[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_r)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-0.65,0.65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_r), ymax=0+(2*WT_sd_r)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=0.45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_r,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=0.35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_r,2))) + + annotate("text",x=1,y=0.25,label = paste("lm ZScore =",round(X_Int_Scores$Z_lm_r,2))) + + annotate("text",x=1,y=-0.25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-0.35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-0.45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-0.6,-0.4,-0.2,0,0.2,0.4,0.6)) + + theme_Publication() + + p_rf_AUC[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_AUC)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-6500,6500)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_AUC), ymax=0+(2*WT_sd_AUC)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=4500,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_AUC,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=3500,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_AUC,2))) + + annotate("text",x=1,y=2500,label = paste("lm ZScore =",round(X_Int_Scores$Z_lm_AUC,2))) + + annotate("text",x=1,y=-2500,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-3500,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-4500,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-6000,-5000,-4000,-3000,-2000,-1000,0,1000,2000,3000,4000,5000,6000)) + + theme_Publication() + + + + if(i == 1){ + X_stats_interaction_ALL_RF_final <- X_ZCalculations + } + if(i > 1){ + X_stats_interaction_ALL_RF_final <- rbind(X_stats_interaction_ALL_RF_final,X_ZCalculations) + } + } + print("Pass RF ggplot loop") + write.csv(X_stats_interaction_ALL_RF_final,paste(outputpath,"RF_ZScore_Calculations.csv",sep=""),row.names = FALSE) + + + ####### Part 5 - Get Zscores for Gene deletion strains + + + + #get total number of genes for the next loop + num_genes <- length(unique(X2$OrfRep)) + print(num_genes) + + #create the output data.frame containing columns for each deletion strain + InteractionScores <- unique(X2["OrfRep"]) + #InteractionScores$Gene <- unique(X2$Gene) + InteractionScores$Gene <- NA + InteractionScores$Raw_Shift_L <- NA + InteractionScores$Z_Shift_L <- NA + InteractionScores$lm_Score_L <- NA + InteractionScores$Z_lm_L <- NA + InteractionScores$R_Squared_L <- NA + InteractionScores$Sum_Z_Score_L <- NA + InteractionScores$Avg_Zscore_L <- NA + InteractionScores$Raw_Shift_K <- NA + InteractionScores$Z_Shift_K <- NA + InteractionScores$lm_Score_K <- NA + InteractionScores$Z_lm_K <- NA + InteractionScores$R_Squared_K <- NA + InteractionScores$Sum_Z_Score_K <- NA + InteractionScores$Avg_Zscore_K <- NA + InteractionScores$Raw_Shift_r <- NA + InteractionScores$Z_Shift_r <- NA + InteractionScores$lm_Score_r <- NA + InteractionScores$Z_lm_r <- NA + InteractionScores$R_Squared_r <- NA + InteractionScores$Sum_Z_Score_r <- NA + InteractionScores$Avg_Zscore_r <- NA + InteractionScores$Raw_Shift_AUC <- NA + InteractionScores$Z_Shift_AUC <- NA + InteractionScores$lm_Score_AUC <- NA + InteractionScores$Z_lm_AUC <- NA + InteractionScores$R_Squared_AUC <- NA + InteractionScores$Sum_Z_Score_AUC <- NA + InteractionScores$Avg_Zscore_AUC <- NA + InteractionScores$NG <- NA + InteractionScores$DB <- NA + InteractionScores$SM <- NA + + for(i in 1:num_genes){ + #get each deletion strain ORF + Gene_Sel <- unique(X2$OrfRep)[i] + #extract only the current deletion strain and its data + X_Gene_Sel <- X2[X2$OrfRep == Gene_Sel,] + + X_stats_interaction <- ddply(X_Gene_Sel, c("OrfRep","Gene","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm = TRUE), + median_L = median(l,na.rm = TRUE), + sd_L = sd(l,na.rm = TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm = TRUE), + median_K = median(K,na.rm = TRUE), + sd_K = sd(K,na.rm = TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm = TRUE), + median_r = median(r,na.rm = TRUE), + sd_r = sd(r,na.rm = TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm = TRUE), + median_AUC = median(AUC,na.rm = TRUE), + sd_AUC = sd(AUC,na.rm = TRUE), + se_AUC = sd_AUC / sqrt(N-1), + NG = sum(NG,na.rm=TRUE), + DB= sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + #Get shift vals + #if L is 0, that means the no growth on no drug + #if L is NA at 0, that means the spot was removed due to contamination + #if L is 0, keep the shift at 0 and for other drug concs calculate delta Ls with no shift + #otherwise calculate shift at no drug conc + if(is.na(X_stats_interaction$mean_L[1]) | X_stats_interaction$mean_L[1] == 0 ){ + X_stats_interaction$Raw_Shift_L <- 0 + X_stats_interaction$Raw_Shift_K <- 0 + X_stats_interaction$Raw_Shift_r <- 0 + X_stats_interaction$Raw_Shift_AUC <- 0 + X_stats_interaction$Z_Shift_L <- 0 + X_stats_interaction$Z_Shift_K <- 0 + X_stats_interaction$Z_Shift_r <- 0 + X_stats_interaction$Z_Shift_AUC <- 0 + }else{ + X_stats_interaction$Raw_Shift_L <- X_stats_interaction$mean_L[1] - Background_L + X_stats_interaction$Raw_Shift_K <- X_stats_interaction$mean_K[1] - Background_K + X_stats_interaction$Raw_Shift_r <- X_stats_interaction$mean_r[1] - Background_r + X_stats_interaction$Raw_Shift_AUC <- X_stats_interaction$mean_AUC[1] - Background_AUC + X_stats_interaction$Z_Shift_L <- X_stats_interaction$Raw_Shift_L[1]/X_stats_BY_L$sd[1] + X_stats_interaction$Z_Shift_K <- X_stats_interaction$Raw_Shift_K[1]/X_stats_BY_K$sd[1] + X_stats_interaction$Z_Shift_r <- X_stats_interaction$Raw_Shift_r[1]/X_stats_BY_r$sd[1] + X_stats_interaction$Z_Shift_AUC <- X_stats_interaction$Raw_Shift_AUC[1]/X_stats_BY_AUC$sd[1] + } + + + #get WT vals + X_stats_interaction$WT_l <- X_stats_BY_L$mean + X_stats_interaction$WT_K <- X_stats_BY_K$mean + X_stats_interaction$WT_r <- X_stats_BY_r$mean + X_stats_interaction$WT_AUC <- X_stats_BY_AUC$mean + + #Get WT SD + X_stats_interaction$WT_sd_l <- X_stats_BY_L$sd + X_stats_interaction$WT_sd_K <- X_stats_BY_K$sd + X_stats_interaction$WT_sd_r <- X_stats_BY_r$sd + X_stats_interaction$WT_sd_AUC <- X_stats_BY_AUC$sd + + + #only get scores if there's growth at no drug + if(X_stats_interaction$mean_L[1] != 0 & !is.na(X_stats_interaction$mean_L[1])){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for no growth values in Z score calculation + if(sum(X_stats_interaction$NG,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #get linear model + gene_lm_L <- lm(formula = Delta_L ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_K <- lm(formula = Delta_K ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_r <- lm(formula = Delta_r ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_AUC <- lm(formula = Delta_AUC ~ Conc_Num_Factor,data = X_stats_interaction) + + #get interaction score calculated by linear model and R-squared value for the fit + gene_interaction_L <- MAX_CONC*(gene_lm_L$coefficients[2]) + gene_lm_L$coefficients[1] + r_squared_l <- summary(gene_lm_L)$r.squared + gene_interaction_K <- MAX_CONC*(gene_lm_K$coefficients[2]) + gene_lm_K$coefficients[1] + r_squared_K <- summary(gene_lm_K)$r.squared + gene_interaction_r <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_r$coefficients[1] + r_squared_r <- summary(gene_lm_r)$r.squared + gene_interaction_AUC <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_AUC$coefficients[1] + r_squared_AUC <- summary(gene_lm_AUC)$r.squared + + #Get total of non removed values + Num_non_Removed_Conc <- Total_Conc_Nums - sum(X_stats_interaction$DB,na.rm = TRUE) - 1 + + #report the scores + InteractionScores$OrfRep[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$OrfRep[1]) + InteractionScores$Gene[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$Gene[1]) + + InteractionScores$Raw_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores$Z_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores$lm_Score_L[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_L + InteractionScores$Z_lm_L[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_L-lm_mean_L)/lm_sd_L + InteractionScores$R_Squared_L[InteractionScores$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores$Sum_Z_Score_L[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE) + InteractionScores$Avg_Zscore_L[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE)/(Num_non_Removed_Conc) + + + InteractionScores$Raw_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores$Z_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores$lm_Score_K[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_K + InteractionScores$Z_lm_K[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_K-lm_mean_K)/lm_sd_K + InteractionScores$R_Squared_K[InteractionScores$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores$Sum_Z_Score_K[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE) + InteractionScores$Avg_Zscore_K[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE)/(Num_non_Removed_Conc) + + InteractionScores$Raw_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores$Z_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores$lm_Score_r[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_r + InteractionScores$Z_lm_r[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_r-lm_mean_r)/lm_sd_r + InteractionScores$R_Squared_r[InteractionScores$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores$Sum_Z_Score_r[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE) + InteractionScores$Avg_Zscore_r[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE)/(Total_Conc_Nums-1) + + InteractionScores$Raw_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores$Z_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores$lm_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_AUC + InteractionScores$Z_lm_AUC[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_AUC-lm_mean_AUC)/lm_sd_AUC + InteractionScores$R_Squared_AUC[InteractionScores$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores$Sum_Z_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE) + InteractionScores$Avg_Zscore_AUC[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE)/(Total_Conc_Nums-1) + } + + if(X_stats_interaction$mean_L[1] == 0 | is.na(X_stats_interaction$mean_L[1]) ){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for missing values in Z score calculatiom + if(sum(X_stats_interaction$NG,na.rm = TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #NA values for the next part since there's an NA or 0 at the no drug. + gene_lm_L <- NA + gene_lm_K <- NA + gene_lm_r <- NA + + gene_interaction_L <- NA + r_squared_l <- NA + gene_interaction_K <- NA + r_squared_K <- NA + gene_interaction_r <- NA + r_squared_r <- NA + + X_stats_interaction$Raw_Shift_L <- NA + X_stats_interaction$Raw_Shift_K <- NA + X_stats_interaction$Raw_Shift_r <- NA + X_stats_interaction$Raw_Shift_AUC <- NA + + X_stats_interaction$Z_Shift_L <- NA + X_stats_interaction$Z_Shift_K <- NA + X_stats_interaction$Z_Shift_r <- NA + X_stats_interaction$Z_Shift_AUC <- NA + + InteractionScores$OrfRep[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$OrfRep[1]) + InteractionScores$Gene[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$Gene[1]) + + InteractionScores$Raw_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores$Z_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores$lm_Score_L[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_L[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$R_Squared_L[InteractionScores$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores$Sum_Z_Score_L[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_L[InteractionScores$OrfRep == Gene_Sel] <- NA + + InteractionScores$Raw_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores$Z_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores$lm_Score_K[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_K[InteractionScores$OrfRep == Gene_Sel] <-NA + InteractionScores$R_Squared_K[InteractionScores$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores$Sum_Z_Score_K[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_K[InteractionScores$OrfRep == Gene_Sel] <- NA + + InteractionScores$Raw_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores$Z_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores$lm_Score_r[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_r[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$R_Squared_r[InteractionScores$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores$Sum_Z_Score_r[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_r[InteractionScores$OrfRep == Gene_Sel] <- NA + + InteractionScores$Raw_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores$Z_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores$lm_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$R_Squared_AUC[InteractionScores$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores$Sum_Z_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + } + + if(i == 1){ + X_stats_interaction_ALL <- X_stats_interaction + } + if(i > 1){ + X_stats_interaction_ALL <- rbind(X_stats_interaction_ALL,X_stats_interaction) + } + + InteractionScores$NG[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$NG,na.rm = TRUE) + InteractionScores$DB[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$DB,na.rm = TRUE) + InteractionScores$SM[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$SM,na.rm = TRUE) + + #X_stats_L_int_temp <- rbind(X_stats_L_int_temp,X_stats_L_int) + + + } + print("Pass Int Calculation loop") + InteractionScores <- InteractionScores[order(InteractionScores$Z_lm_L,decreasing=TRUE),] + InteractionScores <- InteractionScores[order(InteractionScores$NG,decreasing=TRUE),] + df_order_by_OrfRep <- unique(InteractionScores$OrfRep) + #X_stats_interaction_ALL <- X_stats_interaction_ALL[order(X_stats_interaction_ALL$NG,decreasing=TRUE),] + write.csv(InteractionScores,paste(outputpath,"ZScores_Interaction.csv",sep=""),row.names=FALSE) + + InteractionScores_deletion_enhancers_L <- InteractionScores[InteractionScores$Avg_Zscore_L >= 2,] + InteractionScores_deletion_enhancers_K <- InteractionScores[InteractionScores$Avg_Zscore_K <= -2,] + InteractionScores_deletion_suppressors_L <- InteractionScores[InteractionScores$Avg_Zscore_L <= -2,] + InteractionScores_deletion_suppressors_K <- InteractionScores[InteractionScores$Avg_Zscore_K >= 2,] + InteractionScores_deletion_enhancers_and_Suppressors_L <- InteractionScores[InteractionScores$Avg_Zscore_L >= 2 | InteractionScores$Avg_Zscore_L <= -2,] + InteractionScores_deletion_enhancers_and_Suppressors_K <- InteractionScores[InteractionScores$Avg_Zscore_K >= 2 | InteractionScores$Avg_Zscore_K <= -2,] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L <- InteractionScores[InteractionScores$Z_lm_L >= 2 & InteractionScores$Avg_Zscore_L <= -2,] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L <- InteractionScores[InteractionScores$Z_lm_L <= -2 & InteractionScores$Avg_Zscore_L >= 2,] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K <- InteractionScores[InteractionScores$Z_lm_K <= -2 & InteractionScores$Avg_Zscore_K >= 2,] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K <- InteractionScores[InteractionScores$Z_lm_K >= 2 & InteractionScores$Avg_Zscore_K <= -2,] + + InteractionScores_deletion_enhancers_L <- InteractionScores_deletion_enhancers_L[!is.na(InteractionScores_deletion_enhancers_L$OrfRep),] + InteractionScores_deletion_enhancers_K <- InteractionScores_deletion_enhancers_K[!is.na(InteractionScores_deletion_enhancers_K$OrfRep),] + InteractionScores_deletion_suppressors_L <- InteractionScores_deletion_suppressors_L[!is.na(InteractionScores_deletion_suppressors_L$OrfRep),] + InteractionScores_deletion_suppressors_K <- InteractionScores_deletion_suppressors_K[!is.na(InteractionScores_deletion_suppressors_K$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_L <- InteractionScores_deletion_enhancers_and_Suppressors_L[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_L$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_K <- InteractionScores_deletion_enhancers_and_Suppressors_K[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_K$OrfRep),] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L <- InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L[!is.na(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L$OrfRep),] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L <- InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L[!is.na(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L$OrfRep),] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K <- InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K[!is.na(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K$OrfRep),] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K <- InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K[!is.na(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K$OrfRep),] + + write.csv(InteractionScores_deletion_enhancers_L,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_K,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_L,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_K,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_L,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_K,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L,paste(outputpath,"ZScores_Interaction_Suppressors_and_lm_Enhancers_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L,paste(outputpath,"ZScores_Interaction_Enhancers_and_lm_Suppressors_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K,paste(outputpath,"ZScores_Interaction_Suppressors_and_lm_Enhancers_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K,paste(outputpath,"ZScores_Interaction_Enhancers_and_lm_Suppressors_K.csv",sep=""),row.names=FALSE) + + #get enhancers and suppressors for linear regression + InteractionScores_deletion_enhancers_L_lm <- InteractionScores[InteractionScores$Z_lm_L >= 2,] + InteractionScores_deletion_enhancers_K_lm <- InteractionScores[InteractionScores$Z_lm_K <= -2,] + InteractionScores_deletion_suppressors_L_lm <- InteractionScores[InteractionScores$Z_lm_L <= -2,] + InteractionScores_deletion_suppressors_K_lm <- InteractionScores[InteractionScores$Z_lm_K >= 2,] + InteractionScores_deletion_enhancers_and_Suppressors_L_lm <- InteractionScores[InteractionScores$Z_lm_L >= 2 | InteractionScores$Z_lm_L <= -2,] + InteractionScores_deletion_enhancers_and_Suppressors_K_lm <- InteractionScores[InteractionScores$Z_lm_K >= 2 | InteractionScores$Z_lm_K <= -2,] + + InteractionScores_deletion_enhancers_L_lm <- InteractionScores_deletion_enhancers_L_lm[!is.na(InteractionScores_deletion_enhancers_L_lm$OrfRep),] + InteractionScores_deletion_enhancers_K_lm <- InteractionScores_deletion_enhancers_K_lm[!is.na(InteractionScores_deletion_enhancers_K_lm$OrfRep),] + InteractionScores_deletion_suppressors_L_lm <- InteractionScores_deletion_suppressors_L_lm[!is.na(InteractionScores_deletion_suppressors_L_lm$OrfRep),] + InteractionScores_deletion_suppressors_K_lm <- InteractionScores_deletion_suppressors_K_lm[!is.na(InteractionScores_deletion_suppressors_K_lm$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_L_lm <- InteractionScores_deletion_enhancers_and_Suppressors_L_lm[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_L_lm$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_K_lm <- InteractionScores_deletion_enhancers_and_Suppressors_K_lm[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_K_lm$OrfRep),] + + write.csv(InteractionScores_deletion_enhancers_L_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_L_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_K_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_K_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_L_lm,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_L_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_K_lm,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_K_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_L_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_L_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_K_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_K_lm.csv",sep=""),row.names=FALSE) + + + write.csv(Labels,file=paste("../Code/StudyInfo.csv"),row.names = FALSE) + print('ln 1570 write StudyInfo.csv after ') + #write.table(Labels,file=paste("../Code/StudyInfo.txt"),sep="\t",row.names = FALSE) + + for(i in 1:num_genes){ + Gene_Sel <- unique(InteractionScores$OrfRep)[i] + X_ZCalculations <- X_stats_interaction_ALL[X_stats_interaction_ALL$OrfRep == Gene_Sel,] + X_Int_Scores <- InteractionScores[InteractionScores$OrfRep == Gene_Sel,] + + p_l[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_L)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_l), ymax=0+(2*WT_sd_l)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_L,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_L,2))) + + annotate("text",x=1,y=25,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_L,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_K[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_K)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_K), ymax=0+(2*WT_sd_K)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_K,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_K,2))) + + annotate("text",x=1,y=25,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_K,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_r[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_r)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-0.65,0.65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_r), ymax=0+(2*WT_sd_r)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=0.45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_r,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=0.35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_r,2))) + + annotate("text",x=1,y=0.25,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_r,2))) + + annotate("text",x=1,y=-0.25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-0.35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-0.45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-0.6,-0.4,-0.2,0,0.2,0.4,0.6)) + + theme_Publication() + + p_AUC[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_AUC)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-6500,6500)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_AUC), ymax=0+(2*WT_sd_AUC)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=4500,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_AUC,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=3500,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_AUC,2))) + + annotate("text",x=1,y=2500,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_AUC,2))) + + annotate("text",x=1,y=-2500,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-3500,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-4500,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-6000,-5000,-4000,-3000,-2000,-1000,0,1000,2000,3000,4000,5000,6000)) + + theme_Publication() + + + + if(i == 1){ + X_stats_interaction_ALL_final <- X_ZCalculations + } + if(i > 1){ + X_stats_interaction_ALL_final <- rbind(X_stats_interaction_ALL_final,X_ZCalculations) + } + } + print("Pass Int ggplot loop") + write.csv(X_stats_interaction_ALL_final,paste(outputpath,"ZScore_Calculations.csv",sep=""),row.names = FALSE) + + + + + + + Blank <- ggplot(X2_RF) + geom_blank() + + pdf(paste(outputpath,"InteractionPlots.pdf",sep=""),width = 16, height = 16, onefile = TRUE) + + X_stats_X2_RF <- ddply(X2_RF, c("Conc_Num","Conc_Num_Factor"), summarise, + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_AUC = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + NG = sum(NG,na.rm=TRUE), + DB = sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + L_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,l)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,160)) + + annotate("text",x=-0.25,y=10,label="NG") + + annotate("text",x=-0.25,y=5,label="DB") + + annotate("text",x=-0.25,y=0,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=0,label=X_stats_X2_RF$SM) + + theme_Publication() + + K_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,K)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(-20,160)) + + annotate("text",x=-0.25,y=-5,label="NG") + + annotate("text",x=-0.25,y=-12.5,label="DB") + + annotate("text",x=-0.25,y=-20,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-5,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-12.5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-20,label=X_stats_X2_RF$SM) + + theme_Publication() + + R_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,r)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + annotate("text",x=-0.25,y=.9,label="NG") + + annotate("text",x=-0.25,y=.8,label="DB") + + annotate("text",x=-0.25,y=.7,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.9,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.8,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.7,label=X_stats_X2_RF$SM) + + theme_Publication() + + AUC_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,AUC)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(0,12500)) + + annotate("text",x=-0.25,y=11000,label="NG") + + annotate("text",x=-0.25,y=10000,label="DB") + + annotate("text",x=-0.25,y=9000,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=11000,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10000,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=9000,label=X_stats_X2_RF$SM) + + theme_Publication() + + + L_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),l)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,160)) + + theme_Publication() + + K_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),K)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(0,130)) + + theme_Publication() + + r_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),r)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + theme_Publication() + + AUC_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),AUC)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(0,12500)) + + theme_Publication() + + + grid.arrange(L_Stats,K_Stats,R_Stats,AUC_Stats,ncol=2,nrow=2) + grid.arrange(L_Stats_Box,K_Stats_Box,r_Stats_Box,AUC_Stats_Box,ncol=2,nrow=2) + + + + #plot the references + #grid.arrange(p3,p3_K,p3_r,p4,p4_K,p4_r,p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=4) + #grid.arrange(p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=2) + + #loop for grid arrange 4x3 + j <- rep(1,((num_genes)/3)-1) + for(n in 1:length(j)){ + j[n+1] <- n*3 + 1 + } + #loop for printing each plot + num <- 0 + for(m in 1:(round((num_genes)/3)-1)){ + num <- j[m] + grid.arrange(p_l[[num]],p_K[[num]],p_r[[num]],p_AUC[[num]],p_l[[num+1]],p_K[[num+1]],p_r[[num+1]],p_AUC[[num+1]],p_l[[num+2]],p_K[[num+2]],p_r[[num+2]],p_AUC[[num+2]],ncol=4,nrow=3) + #grid.arrange(p_l[[364]],p_K[[364]],p_r[[364]],p_l[[365]],p_K[[365]],p_r[[365]],p_l[[366]],p_K[[366]],p_r[[366]],ncol=3,nrow=3) + + + #p1[[num+3]],p_K[[num+3]],p_r[[num+3]],p1[[num+4]],p_K[[num+4]],p_r[[num+4]] + } + if(num_genes != (num+2)){ + total_num = num_genes - (num+2) + if(total_num == 5){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],p_l[[num+5]],p_K[[num+5]],p_r[[num+5]],p_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_AUC[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],p_AUC[[num+7]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + if(total_num == 4){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],p_l[[num+5]],p_K[[num+5]],p_r[[num+5]],p_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_AUC[[num+6]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + + if(total_num == 3){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],p_l[[num+5]],p_K[[num+5]],p_r[[num+5]],p_AUC[[num+5]],ncol=4,nrow=3) + #grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 2){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 1){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + } + dev.off() + + + + pdf(paste(outputpath,"RF_InteractionPlots.pdf",sep=""),width = 16, height = 16, onefile = TRUE) + + X_stats_X2_RF <- ddply(X2_RF, c("Conc_Num","Conc_Num_Factor"), summarise, + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_AUC = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + NG = sum(NG,na.rm=TRUE), + DB = sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + L_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,l)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,130)) + + annotate("text",x=-0.25,y=10,label="NG") + + annotate("text",x=-0.25,y=5,label="DB") + + annotate("text",x=-0.25,y=0,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=0,label=X_stats_X2_RF$SM) + + theme_Publication() + + K_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,K)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(-20,160)) + + annotate("text",x=-0.25,y=-5,label="NG") + + annotate("text",x=-0.25,y=-12.5,label="DB") + + annotate("text",x=-0.25,y=-20,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-5,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-12.5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-20,label=X_stats_X2_RF$SM) + + theme_Publication() + + R_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,r)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + annotate("text",x=-0.25,y=.9,label="NG") + + annotate("text",x=-0.25,y=.8,label="DB") + + annotate("text",x=-0.25,y=.7,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.9,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.8,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.7,label=X_stats_X2_RF$SM) + + theme_Publication() + + AUC_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,AUC)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(0,12500)) + + annotate("text",x=-0.25,y=11000,label="NG") + + annotate("text",x=-0.25,y=10000,label="DB") + + annotate("text",x=-0.25,y=9000,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=11000,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10000,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=9000,label=X_stats_X2_RF$SM) + + theme_Publication() + + + L_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),l)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,130)) + + theme_Publication() + + K_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),K)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(0,160)) + + theme_Publication() + + r_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),r)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + theme_Publication() + + AUC_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),AUC)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(12000,0)) + + theme_Publication() + + + grid.arrange(L_Stats,K_Stats,R_Stats,AUC_Stats,ncol=2,nrow=2) + grid.arrange(L_Stats_Box,K_Stats_Box,r_Stats_Box,AUC_Stats_Box,ncol=2,nrow=2) + + + + #plot the references + #grid.arrange(p3,p3_K,p3_r,p4,p4_K,p4_r,p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=4) + #grid.arrange(p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=2) + + #loop for grid arrange 4x3 + j <- rep(1,((num_genes_RF)/3)-1) + for(n in 1:length(j)){ + j[n+1] <- n*3 + 1 + } + #loop for printing each plot + num <- 0 + for(m in 1:(round((num_genes_RF)/3)-1)){ + num <- j[m] + grid.arrange(p_rf_l[[num]],p_rf_K[[num]],p_rf_r[[num]],p_rf_AUC[[num]],p_rf_l[[num+1]],p_rf_K[[num+1]],p_rf_r[[num+1]],p_rf_AUC[[num+1]],p_rf_l[[num+2]],p_rf_K[[num+2]],p_rf_r[[num+2]],p_rf_AUC[[num+2]],ncol=4,nrow=3) + #grid.arrange(p_rf_l[[364]],p_rf_K[[364]],p_rf_r[[364]],p_rf_l[[365]],p_rf_K[[365]],p_rf_r[[365]],p_rf_l[[366]],p_rf_K[[366]],p_rf_r[[366]],ncol=3,nrow=3) + + + #p1[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p1[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]] + } + if(num_genes_RF != (num+2)){ + total_num = num_genes_RF - (num+2) + if(total_num == 5){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],p_rf_l[[num+5]],p_rf_K[[num+5]],p_rf_r[[num+5]],p_rf_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_AUC[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],p_rf_AUC[[num+7]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + if(total_num == 4){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],p_rf_l[[num+5]],p_rf_K[[num+5]],p_rf_r[[num+5]],p_rf_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_AUC[[num+6]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + + if(total_num == 3){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],p_rf_l[[num+5]],p_rf_K[[num+5]],p_rf_r[[num+5]],p_rf_AUC[[num+5]],ncol=4,nrow=3) + #grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 2){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 1){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + } + dev.off() + + #print rank plots for L and K gene interactions + + + InteractionScores_AdjustMissing <- InteractionScores + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_L),]$Avg_Zscore_L <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_K),]$Avg_Zscore_K <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_r),]$Avg_Zscore_r <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_AUC),]$Avg_Zscore_AUC <- 0.001 + + InteractionScores_AdjustMissing$L_Rank <- NA + InteractionScores_AdjustMissing$K_Rank <- NA + InteractionScores_AdjustMissing$r_Rank <- NA + InteractionScores_AdjustMissing$AUC_Rank <- NA + + InteractionScores_AdjustMissing$L_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_L) + InteractionScores_AdjustMissing$K_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_K) + InteractionScores_AdjustMissing$r_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_r) + InteractionScores_AdjustMissing$AUC_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_AUC) + + # + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_L),]$Z_lm_L <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_K),]$Z_lm_K <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_r),]$Z_lm_r <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_AUC),]$Z_lm_AUC <- 0.001 + + InteractionScores_AdjustMissing$L_Rank_lm <- NA + InteractionScores_AdjustMissing$K_Rank_lm <- NA + InteractionScores_AdjustMissing$r_Rank_lm <- NA + InteractionScores_AdjustMissing$AUC_Rank_lm <- NA + + InteractionScores_AdjustMissing$L_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_L) + InteractionScores_AdjustMissing$K_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_K) + InteractionScores_AdjustMissing$r_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_r) + InteractionScores_AdjustMissing$AUC_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_AUC) + + + + Rank_L_1SD <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L >= 1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L >= 2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L >= 3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K <= -1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K <= -2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K <= -3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + pdf(paste(outputpath,"RankPlots.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD,Rank_L_2SD,Rank_L_3SD,Rank_K_1SD,Rank_K_2SD,Rank_K_3SD,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext,Rank_L_2SD_notext,Rank_L_3SD_notext,Rank_K_1SD_notext,Rank_K_2SD_notext,Rank_K_3SD_notext,ncol=3,nrow=2) + + dev.off() + + + Rank_L_1SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L >= 1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L >= 2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L >= 3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K <= -1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K <= -2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K <= -3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + pdf(paste(outputpath,"RankPlots_lm.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD_lm,Rank_L_2SD_lm,Rank_L_3SD_lm,Rank_K_1SD_lm,Rank_K_2SD_lm,Rank_K_3SD_lm,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext_lm,Rank_L_2SD_notext_lm,Rank_L_3SD_notext_lm,Rank_K_1SD_notext_lm,Rank_K_2SD_notext_lm,Rank_K_3SD_notext_lm,ncol=3,nrow=2) + + dev.off() + + + + X_NArm <- InteractionScores[!is.na(InteractionScores$Z_lm_L) | !is.na(InteractionScores$Avg_Zscore_L) ,] + + #find overlaps + X_NArm$Overlap <- "No Effect" + try(X_NArm[X_NArm$Z_lm_L >= 2 & X_NArm$Avg_Zscore_L >= 2,]$Overlap <- "Deletion Enhancer Both") + try(X_NArm[X_NArm$Z_lm_L <= -2 & X_NArm$Avg_Zscore_L <= -2,]$Overlap <- "Deletion Suppressor Both") + try(X_NArm[X_NArm$Z_lm_L >= 2 & X_NArm$Avg_Zscore_L <= 2,]$Overlap <- "Deletion Enhancer lm only") + try(X_NArm[X_NArm$Z_lm_L <= 2 & X_NArm$Avg_Zscore_L >= 2,]$Overlap <- "Deletion Enhancer Avg Zscore only") + try(X_NArm[X_NArm$Z_lm_L <= -2 & X_NArm$Avg_Zscore_L >= -2,]$Overlap <- "Deletion Suppressor lm only") + try(X_NArm[X_NArm$Z_lm_L >= -2 & X_NArm$Avg_Zscore_L <= -2,]$Overlap <- "Deletion Suppressor Avg Zscore only") + try(X_NArm[X_NArm$Z_lm_L >= 2 & X_NArm$Avg_Zscore_L <= -2,]$Overlap <- "Deletion Enhancer lm, Deletion Suppressor Avg Z score") + try(X_NArm[X_NArm$Z_lm_L <= -2 & X_NArm$Avg_Zscore_L >= 2,]$Overlap <- "Deletion Suppressor lm, Deletion Enhancer Avg Z score") + + #get the linear model info and the r-squared value for all CPPs in results 1 vs results 2 + get_lm_L <- lm(X_NArm$Z_lm_L~X_NArm$Avg_Zscore_L) + L_lm <- summary(get_lm_L) + + get_lm_K <- lm(X_NArm$Z_lm_K~X_NArm$Avg_Zscore_K) + K_lm <- summary(get_lm_K) + + get_lm_r <- lm(X_NArm$Z_lm_r~X_NArm$Avg_Zscore_r) + r_lm <- summary(get_lm_r) + + get_lm_AUC <- lm(X_NArm$Z_lm_AUC~X_NArm$Avg_Zscore_AUC) + AUC_lm <- summary(get_lm_AUC) + + pdf(paste(outputpath,"Avg_Zscore_vs_lm_NA_rm.pdf",sep=""),width = 16, height = 12, onefile = TRUE) + + print(ggplot(X_NArm,aes(Avg_Zscore_L,Z_lm_L)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm L") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(Avg_Zscore_K,Z_lm_K)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm K") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(K_lm$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(Avg_Zscore_r,Z_lm_r)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm r") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(r_lm$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(Avg_Zscore_AUC,Z_lm_AUC)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm AUC") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(AUC_lm$r.squared,2))) + theme_Publication_legend_right()) + + dev.off() + + + lm_v_Zscore_L <- ggplot(X_NArm,aes(Avg_Zscore_L,Z_lm_L,ORF=OrfRep,Gene=Gene,NG=NG,SM=SM,DB=DB)) + geom_point(aes(color=Overlap),shape=3) + + geom_smooth(method = "lm",color=1) + ggtitle("Avg Zscore vs lm L") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm$r.squared,2))) + theme_Publication_legend_right() + + pgg <- ggplotly(lm_v_Zscore_L) + #pgg + plotly_path <- paste(getwd(),"/",outputpath,"Avg_Zscore_vs_lm_NA_rm.html",sep="") + saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + X_NArm$L_Rank <- rank(X_NArm$Avg_Zscore_L) + X_NArm$K_Rank <- rank(X_NArm$Avg_Zscore_K) + X_NArm$r_Rank <- rank(X_NArm$Avg_Zscore_r) + X_NArm$AUC_Rank <- rank(X_NArm$Avg_Zscore_AUC) + + X_NArm$L_Rank_lm <- rank(X_NArm$Z_lm_L) + X_NArm$K_Rank_lm <- rank(X_NArm$Z_lm_K) + X_NArm$r_Rank_lm <- rank(X_NArm$Z_lm_r) + X_NArm$AUC_Rank_lm <- rank(X_NArm$Z_lm_AUC) + + #get the linear model info and the r-squared value for all CPPs in results 1 vs results 2 + get_lm_L2 <- lm(X_NArm$L_Rank_lm~X_NArm$L_Rank) + L_lm2 <- summary(get_lm_L2) + + get_lm_K2 <- lm(X_NArm$K_Rank_lm~X_NArm$K_Rank) + K_lm2 <- summary(get_lm_K2) + + get_lm_r2 <- lm(X_NArm$r_Rank_lm~X_NArm$r_Rank) + r_lm2 <- summary(get_lm_r2) + + get_lm_AUC2 <- lm(X_NArm$AUC_Rank_lm~X_NArm$AUC_Rank) + AUC_lm2 <- summary(get_lm_AUC2) + + num_genes_NArm2 <- (dim(X_NArm)[1])/2 + + pdf(paste(outputpath,"Avg_Zscore_vs_lm_ranked_NA_rm.pdf",sep=""),width = 16, height = 12, onefile = TRUE) + + print(ggplot(X_NArm,aes(L_Rank,L_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank Avg Zscore vs lm L") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(L_lm2$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(K_Rank,K_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank Avg Zscore vs lm K") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(K_lm2$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(r_Rank,r_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank Avg Zscore vs lm r") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(r_lm2$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(AUC_Rank,AUC_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank of Avg Zscore vs lm AUC") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(AUC_lm2$r.squared,2))) + theme_Publication_legend_right()) + + + + dev.off() + + + + Rank_L_1SD <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_L >= 1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_L >= 2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_L >= 3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_K <= -1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_K <= -2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_K <= -3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + pdf(paste(outputpath,"RankPlots_naRM.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD,Rank_L_2SD,Rank_L_3SD,Rank_K_1SD,Rank_K_2SD,Rank_K_3SD,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext,Rank_L_2SD_notext,Rank_L_3SD_notext,Rank_K_1SD_notext,Rank_K_2SD_notext,Rank_K_3SD_notext,ncol=3,nrow=2) + + dev.off() + + + Rank_L_1SD_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_L >= 1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_L >= 2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_L >= 3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_K <= -1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_K <= -2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_K <= -3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + pdf(paste(outputpath,"RankPlots_lm_naRM.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD_lm,Rank_L_2SD_lm,Rank_L_3SD_lm,Rank_K_1SD_lm,Rank_K_2SD_lm,Rank_K_3SD_lm,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext_lm,Rank_L_2SD_notext_lm,Rank_L_3SD_notext_lm,Rank_K_1SD_notext_lm,Rank_K_2SD_notext_lm,Rank_K_3SD_notext_lm,ncol=3,nrow=2) + + dev.off() + +} + + + +#get the linear model info and the r-squared value for all CPPs in results 1 vs results 2 +get_lm_1 <- lm(X_NArm$Z_lm_K~X_NArm$Z_lm_L) +L_lm_1 <- summary(get_lm_1) + +get_lm_2 <- lm(X_NArm$Z_lm_r~X_NArm$Z_lm_L) +L_lm_2 <- summary(get_lm_2) + +get_lm_3 <- lm(X_NArm$Z_lm_AUC~X_NArm$Z_lm_L) +L_lm_3 <- summary(get_lm_3) + +get_lm_4 <- lm(X_NArm$Z_lm_r~X_NArm$Z_lm_K) +L_lm_4 <- summary(get_lm_4) + +get_lm_5 <- lm(X_NArm$Z_lm_AUC~X_NArm$Z_lm_K) +L_lm_5 <- summary(get_lm_5) + +get_lm_6 <- lm(X_NArm$Z_lm_AUC~X_NArm$Z_lm_r) +L_lm_6 <- summary(get_lm_6) + + +pdf(file=paste(outputpath,"Correlation_CPPs.pdf",sep=""),width = 10, height = 7, onefile = TRUE) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_K)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction L vs. Interaction K") + + xlab("z-score L") + ylab("z-score K") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_1$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction L vs. Interaction r") + + xlab("z-score L") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_2$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction L vs. Interaction AUC") + + xlab("z-score L") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_3$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction K vs. Interaction r") + + xlab("z-score K") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_4$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction K vs. Interaction AUC") + + xlab("z-score K") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_5$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_r,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction r vs. Interaction AUC") + + xlab("z-score r") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_6$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +InteractionScores_RF2 <- InteractionScores_RF[!is.na(InteractionScores_RF$Z_lm_L),] +ggplot(X_NArm,aes(Z_lm_L,Z_lm_K)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_L,Z_lm_K),color="cyan") + + ggtitle("Interaction L vs. Interaction K") + + xlab("z-score L") + ylab("z-score K") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_1$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_L,Z_lm_r),color="cyan") + + ggtitle("Interaction L vs. Interaction r") + + xlab("z-score L") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_2$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_L,Z_lm_AUC),color="cyan") + + ggtitle("Interaction L vs. Interaction AUC") + + xlab("z-score L") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_3$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_K,Z_lm_r),color="cyan") + + ggtitle("Interaction K vs. Interaction r") + + xlab("z-score K") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_4$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_K,Z_lm_AUC),color="cyan") + + ggtitle("Interaction K vs. Interaction AUC") + + xlab("z-score K") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_5$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_r,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_r,Z_lm_AUC),color="cyan") + + ggtitle("Interaction r vs. Interaction AUC") + + xlab("z-score r") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_6$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + + + + + +dev.off() + + +#write.csv(Labels,file=paste("../Code/Parameters.csv"),row.names = FALSE) +timestamp() + +#BoneYard*********************************************** +#I'm thinking this parameter needs to be save somewhere "permanent' for the record so outputs can be reproduced. +#take this out of the Arguments. In Matlab I could for future in .mat file. Maybe I could save the SD Args[2] as part of the StudyInfo.txt. +#Corruptable but better than nothing. +#if(is.na(Args[2])){ +# std=3 +#}else { +# std= Arg[2] +#Delta_Background_sdFactor <- 2 #Args[3] +#DelBGFactr <- as.numeric(Delta_Background_sdFactor) +#} + diff --git a/workflow/.old/templates/qhtcp/Exp2/backups/InteractTemplateB4Prompt4SDinput.R b/workflow/.old/templates/qhtcp/Exp2/backups/InteractTemplateB4Prompt4SDinput.R new file mode 100644 index 00000000..3b11777c --- /dev/null +++ b/workflow/.old/templates/qhtcp/Exp2/backups/InteractTemplateB4Prompt4SDinput.R @@ -0,0 +1,2702 @@ +#Based on InteractionTemplate.R which is based on Sean Santose's Interaction_V5 script. +#Adapt SS For Structured Data storage but using command line scripts +###Set up the required libraries, call required plot theme elements and set up the command line arguments +library("ggplot2") +library("plyr") +library("extrafont") +library("gridExtra") +library("gplots") +library("RColorBrewer") +library("stringr") +#library("gdata") +library(plotly) +library(htmlwidgets) + +Args <- commandArgs(TRUE) +input_file <- Args[1] #"!!Results_17_0827_yor1null-rpl12anull misLabeledAsFrom MI 17_0919_yor1-curated.txt" #Args[1] #Arg 1 #"!!ResultsStd_JS 19_1224_HLEG_P53.txt" is the !!results ... .txt + +#Path to Output Directory +W=getwd() #R is F'd up, Can't use, Any legitamate platfold could build out dirs from this +outDir <- "ZScores/" #"Args[2] #paste0(W,"/ZScores/") +subDir <- outDir #Args[2] + +if (file.exists(subDir)){ + outputpath <- subDir +} else { + dir.create(file.path(subDir)) +} + +if (file.exists(paste(subDir,"QC/",sep=""))){ + outputpath_QC <- paste(subDir,"QC/",sep="") +} else { + dir.create(file.path(paste(subDir,"QC/",sep=""))) + outputpath_QC <- paste(subDir,"QC/",sep="") +} +#define the output path (formerly the second argument from Rscript) +outputpath <- outDir + +#Set Args[2] the Background contamination noise filter as a function of standard deviation +#Sean recommends 3 or 5 SD factor. +#Capture Exp_ number,use it to Save Args[2]{std}to Labels field and then Write to Labels to studyInfo.txt for future reference +Labels <- read.csv(file= "../Code/StudyInfo.csv",stringsAsFactors = FALSE) #,sep= ",") +print("Be sure to include Argument 2 the Bacground noise filter standard deviation i.e., 3 or 5 per Sean") +std= as.numeric(Args[2]) +expNumber<- as.numeric(sub("^.*?(\\d+)$", "\\1", getwd())) +Labels[expNumber,3]= as.numeric(std) +Delta_Background_sdFactor <- std +DelBGFactr <- as.numeric(Delta_Background_sdFactor) +#Write Background SD value to studyInfo.txt file +#write.csv(Labels,file=paste("../Code/StudyInfo.csv"),row.names = FALSE) +write.csv(Labels,file=paste("../Code/StudyInfo.csv"),row.names = FALSE) +print('ln 50 write StudyInfo.csv ') +#write.table(Labels,file=paste(outputpath,"StudyInfo.txt"),sep = "\t",row.names = FALSE) + +#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +#++++++BEGIN USER DATA SELECTION SECTION+++++++++++++++++++++++++++++++++++++++++++++++++ + + +#read in the data +X <- read.delim(input_file,skip=2,as.is=T,row.names=1,strip.white=TRUE) +X <- X[!(X[[1]]%in%c("","Scan")),] +#X <- X[!(X[[1]]%in%c(61:76)),] #Remove dAmp plates which are Scans 61 thru 76 + +#X <- X[which(X$Specifics == "WT"),] + +X_length <- length(X[1,]) +X_end <- length(X[1,]) - 2 +X <- X[,c(1:46,X_end:X_length)] + + +#use numeric data to perform operations +X$Col <- as.numeric(X$Col) +X$Row <- as.numeric(X$Row) +X$l <- as.numeric(X$l) +X$K <- as.numeric(X$K) +X$r <- as.numeric(X$r) +X$Scan <- as.numeric(X$Scan) +X$AUC <- as.numeric(X$AUC) +X$LstBackgrd <- as.numeric(X$LstBackgrd) +X$X1stBackgrd <- as.numeric(X$X1stBackgrd) + +#set the OrfRep to YDL227C for the ref data +X[X$ORF == "YDL227C",]$OrfRep <- "YDL227C" +#Sean removes the Doxycyclin at 0.0ug.mL so that only the Oligomycin series with Doxycyclin of 0.12ug/mL are used. +#That is the first DM plates are removed from the data set with the following. +X <- X[X$Conc1 != "0ug/mL",] #This occurs only for Exp1 and Exp2 and so doesn't have any effect on Exp3&4 + + +#Mert placed the"bad_spot" text in the ORF col. for particular spots in the RF1 and RF2 plates. +#This code removes those spots from the data set used for the interaction analysis. Dr.Hartman feels that these donot effect Zscores significantly and so "non-currated" files were used. +#try(X <- X[X$ORF != "bad_spot",]) +#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= + +#get total number of drug concentrations +Total_Conc_Nums <- length(unique(X$Conc)) + +#function to ID numbers in string with characters+numbers (ie to get numeric drug conc) +numextract <- function(string){ + str_extract(string, "\\-*\\d+\\.*\\d*") +} + +#generate a new column with the numeric drug concs +X$Conc_Num <- as.numeric(numextract(X$Conc)) +#Generate new column with the numeric drug concs as factors starting at 0 for the graphing later +X$Conc_Num_Factor <- as.numeric(as.factor(X$Conc_Num)) - 1 + +#Get the max factor for concentration +MAX_CONC <- max(X$Conc_Num_Factor) +#if treating numbers not as factors uncomment next line and comment out previous line +#MAX_CONC <- max(X$Conc_Num) + +#remove wells with problems for making graphs and to not include in summary statistics +X <- X[X$Gene != "BLANK",] +X <- X[X$Gene != "Blank",] +X <- X[X$ORF != "Blank",] +X <- X[X$Gene != "blank",] +#X <- X[X$Gene != "HO",] +Xbu= X +#Inserted to use SGDgenelist to update orfs and replace empty geneName cells with ORF name (adapted from Sean's Merge script). This is to 'fix' the naming for everything that follows (REMc, Heatmaps ... et.al) rather than do it piece meal later +#Sean's Match Script( which was adapted here) was fixed 2022_0608 so as not to write over the RF1&RF2 geneNames which caused a variance with his code results +#in the Z_lm_L,K,r&AUC output values. Values correlated well but were off by a multiplier factor. +SGDgeneList= "../Code/SGD_features.tab" +genes = data.frame(read.delim(file=SGDgeneList,quote="",header=FALSE,colClasses = c(rep("NULL",3), rep("character", 2), rep("NULL", 11)))) +for(i in 1:length(X[,14])){ + ii= as.numeric(i) + line_num = match(X[ii,14],genes[,1],nomatch=1) + OrfRepColNum= as.numeric(match('OrfRep',names(X))) + if(X[ii,OrfRepColNum]!= "YDL227C"){ + X[ii,15] = genes[line_num,2] + } + if((X[ii,15] == "")||(X[ii,15] == "OCT1")){ + X[ii,15] = X[ii,OrfRepColNum] + } +} +Xblankreplace= X +#X= Xbu #for restore testing restore X if geneName 'Match' routine needs changing + +#Remove dAmPs ******************************* +DAmPs_List <- "../Code/22_0602_Remy_DAmPsList.txt" +Damps <- read.delim(DAmPs_List,header=F) + +X <- X[!(X$ORF %in% Damps$V1),] #fix this to Damps[,1] +XafterDampsRM=X #Backup for debugging especially when Rstudio goes crazy out of control +# *********** + + +#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +#++++++END USER DATA SELECTION+++++++++++++++++++++++++++++++++++++++++++++++++ +#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +print("ln137 End of User Section including blank gene writeOver") +#++++Begin Graphics Boiler Plate Section+++++++++++++++++++++++++++++++++++++++ +#theme elements for plots +theme_Publication <- function(base_size=14, base_family="sans") { + library(grid) + library(ggthemes) + (theme_foundation(base_size=base_size, base_family=base_family) + + theme(plot.title = element_text(face = "bold", + size = rel(1.2), hjust = 0.5), + text = element_text(), + panel.background = element_rect(colour = NA), + plot.background = element_rect(colour = NA), + panel.border = element_rect(colour = NA), + axis.title = element_text(face = "bold",size = rel(1)), + axis.title.y = element_text(angle=90,vjust =2), + axis.title.x = element_text(vjust = -0.2), + axis.text = element_text(), + axis.line = element_line(colour="black"), + axis.ticks = element_line(), + panel.grid.major = element_line(colour="#f0f0f0"), + panel.grid.minor = element_blank(), + legend.key = element_rect(colour = NA), + legend.position = "bottom", + legend.direction = "horizontal", + legend.key.size= unit(0.2, "cm"), + legend.spacing = unit(0, "cm"), + legend.title = element_text(face="italic"), + plot.margin=unit(c(10,5,5,5),"mm"), + strip.background=element_rect(colour="#f0f0f0",fill="#f0f0f0"), + strip.text = element_text(face="bold") + )) + +} + +scale_fill_Publication <- function(...){ + library(scales) + discrete_scale("fill","Publication",manual_pal(values = c("#386cb0","#fdb462","#7fc97f","#ef3b2c","#662506","#a6cee3","#fb9a99","#984ea3","#ffff33")), ...) + +} + +scale_colour_Publication <- function(...){ + discrete_scale("colour","Publication",manual_pal(values = c("#386cb0","#fdb462","#7fc97f","#ef3b2c","#662506","#a6cee3","#fb9a99","#984ea3","#ffff33")), ...) + +} + + +theme_Publication_legend_right <- function(base_size=14, base_family="sans") { + (theme_foundation(base_size=base_size, base_family=base_family) + + theme(plot.title = element_text(face = "bold", + size = rel(1.2), hjust = 0.5), + text = element_text(), + panel.background = element_rect(colour = NA), + plot.background = element_rect(colour = NA), + panel.border = element_rect(colour = NA), + axis.title = element_text(face = "bold",size = rel(1)), + axis.title.y = element_text(angle=90,vjust =2), + axis.title.x = element_text(vjust = -0.2), + axis.text = element_text(), + axis.line = element_line(colour="black"), + axis.ticks = element_line(), + panel.grid.major = element_line(colour="#f0f0f0"), + panel.grid.minor = element_blank(), + legend.key = element_rect(colour = NA), + legend.position = "right", + legend.direction = "vertical", + legend.key.size= unit(0.5, "cm"), + legend.spacing = unit(0, "cm"), + legend.title = element_text(face="italic"), + plot.margin=unit(c(10,5,5,5),"mm"), + strip.background=element_rect(colour="#f0f0f0",fill="#f0f0f0"), + strip.text = element_text(face="bold") + )) + +} + +scale_fill_Publication <- function(...){ + discrete_scale("fill","Publication",manual_pal(values = c("#386cb0","#fdb462","#7fc97f","#ef3b2c","#662506","#a6cee3","#fb9a99","#984ea3","#ffff33")), ...) + +} + +scale_colour_Publication <- function(...){ + discrete_scale("colour","Publication",manual_pal(values = c("#386cb0","#fdb462","#7fc97f","#ef3b2c","#662506","#a6cee3","#fb9a99","#984ea3","#ffff33")), ...) + +} + + +#print timestamp for initial time the code starts +timestamp() +#+++++BEGIN QC SECTION+++++++++++++++++++++++++++++++++++++++++++++++++++++++ +###Part 2 - Quality control +#print quality control graphs for each dataset before removing data due to contamination +#and before adjusting missing data to max theoretical values + +#plate analysis plot +#plate analysis is a quality check to identify plate effects containing anomalies + +Plate_Analysis_L <- ggplot(X,aes(Scan,l,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for L before quality control") + theme_Publication() + +Plate_Analysis_K <- ggplot(X,aes(Scan,K,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for K before quality control") + theme_Publication() + +Plate_Analysis_r <- ggplot(X,aes(Scan,r,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for r before quality control") + theme_Publication() + +Plate_Analysis_AUC <- ggplot(X,aes(Scan,AUC,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for AUC before quality control") + theme_Publication() + + + +Plate_Analysis_L_Box <- ggplot(X,aes(as.factor(Scan),l,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for L before quality control") + theme_Publication() + +Plate_Analysis_K_Box <- ggplot(X,aes(as.factor(Scan),K,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for K before quality control") + theme_Publication() + +Plate_Analysis_r_Box <- ggplot(X,aes(as.factor(Scan),r,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for r before quality control") + theme_Publication() + +Plate_Analysis_AUC_Box <- ggplot(X,aes(as.factor(Scan),AUC,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for AUC before quality control") + theme_Publication() + +#quality control - values with a high delta background likely have heavy contamination +#check the frequency of these values +#report the L and K values of these spots +#report the number to be removed based on the Delta_Background_Tolerance +X$Delta_Backgrd <- X$LstBackgrd - X$X1stBackgrd + + +#raw l vs K before QC +Raw_l_vs_K_beforeQC <- ggplot(X,aes(l,K,color=as.factor(Conc_Num))) + geom_point(aes(ORF=ORF,Gene=Gene,Delta_Backgrd=Delta_Backgrd),shape=3) + + ggtitle("Raw L vs K before QC") + + theme_Publication_legend_right() +pdf(paste(outputpath_QC,"Raw_L_vs_K_beforeQC.pdf",sep=""),width = 12,height = 8) +Raw_l_vs_K_beforeQC +dev.off() +pgg <- ggplotly(Raw_l_vs_K_beforeQC) +#pgg +plotly_path <- paste(getwd(),"/",outputpath_QC,"Raw_L_vs_K_beforeQC.html",sep="") +saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + +#set delta background tolerance based on 3 sds from the mean delta background +Delta_Background_Tolerance <- mean(X$Delta_Backgrd)+(DelBGFactr*sd(X$Delta_Backgrd)) +#Delta_Background_Tolerance <- mean(X$Delta_Backgrd)+(3*sd(X$Delta_Backgrd)) +print(paste("Delta_Background_Tolerance is",Delta_Background_Tolerance,sep=" ")) + +Plate_Analysis_Delta_Backgrd <- ggplot(X,aes(Scan,Delta_Backgrd,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2,position="jitter") + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd before quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_Box <- ggplot(X,aes(as.factor(Scan),Delta_Backgrd,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd before quality control") + theme_Publication() + + + +X_Delta_Backgrd_above_Tolerance <- X[X$Delta_Backgrd >= Delta_Background_Tolerance,] + +X_Delta_Backgrd_above_Tolerance_K_halfmedian <- (median(X_Delta_Backgrd_above_Tolerance$K,na.rm = TRUE))/2 +X_Delta_Backgrd_above_Tolerance_L_halfmedian <- (median(X_Delta_Backgrd_above_Tolerance$l,na.rm = TRUE))/2 +X_Delta_Backgrd_above_Tolerance_toRemove <- dim(X_Delta_Backgrd_above_Tolerance)[1] + +X_Delta_Backgrd_above_Tolerance_L_vs_K <- ggplot(X_Delta_Backgrd_above_Tolerance,aes(l,K,color=as.factor(Conc_Num))) + geom_point(aes(ORF=ORF,Gene=Gene,Delta_Backgrd=Delta_Backgrd),shape=3) + + ggtitle(paste("Raw L vs K for strains above delta background threshold of",Delta_Background_Tolerance,"or above")) + + annotate("text",x=X_Delta_Backgrd_above_Tolerance_L_halfmedian,y=X_Delta_Backgrd_above_Tolerance_K_halfmedian, + label = paste("Strains above delta background tolerance = ",X_Delta_Backgrd_above_Tolerance_toRemove)) + + theme_Publication_legend_right() +pdf(paste(outputpath_QC,"Raw_L_vs_K_for_strains_above_deltabackgrd_threshold.pdf",sep=""),width = 12,height = 8) +X_Delta_Backgrd_above_Tolerance_L_vs_K +dev.off() +pgg <- ggplotly(X_Delta_Backgrd_above_Tolerance_L_vs_K) +#pgg +plotly_path <- paste(getwd(),"/",outputpath_QC,"Raw_L_vs_K_for_strains_above_deltabackgrd_threshold.html",sep="") +saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + +#frequency plot for all data vs. the delta_background +DeltaBackground_Frequency_Plot <- ggplot(X,aes(Delta_Backgrd,color=as.factor(Conc_Num))) + geom_density() + + ggtitle("Density plot for Delta Background by Conc All Data") + theme_Publication_legend_right() + +#bar plot for all data vs. the delta_background +DeltaBackground_Bar_Plot <- ggplot(X,aes(Delta_Backgrd,color=as.factor(Conc_Num))) + geom_bar() + + ggtitle("Bar plot for Delta Background by Conc All Data") + theme_Publication_legend_right() + +pdf(file = paste(outputpath_QC,"Frequency_Delta_Background.pdf",sep=""),width = 12,height = 8) +print(DeltaBackground_Frequency_Plot) +print(DeltaBackground_Bar_Plot) +dev.off() + + +#Need to identify missing data, and differentiate between this data and removed data so the removed data can get set to NA and the missing data can get set to max theoretical values +#1 for missing data, 0 for non missing data +#Use "NG" for NoGrowth rather than "missing" +X$NG <- 0 +try(X[X$l == 0 & !is.na(X$l),]$NG <- 1) + +#1 for removed data, 0 non removed data +#Use DB to identify number of genes removed due to the DeltaBackground Threshold rather than "Removed" +X$DB <- 0 +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$DB <- 1) + +#replace the CPPs for l, r, AUC and K (must be last!) for removed data +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$l <- NA) +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$r <- NA) +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$AUC <- NA) +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$K <- NA) + + +Plate_Analysis_L_afterQC <- ggplot(X,aes(Scan,l,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_afterQC <- ggplot(X,aes(Scan,K,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_afterQC <- ggplot(X,aes(Scan,r,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_afterQC <- ggplot(X,aes(Scan,AUC,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_afterQC <- ggplot(X,aes(Scan,Delta_Backgrd,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + + +Plate_Analysis_L_Box_afterQC <- ggplot(X,aes(as.factor(Scan),l,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_Box_afterQC <- ggplot(X,aes(as.factor(Scan),K,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_Box_afterQC <- ggplot(X,aes(as.factor(Scan),r,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_Box_afterQC <- ggplot(X,aes(as.factor(Scan),AUC,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_Box_afterQC <- ggplot(X,aes(as.factor(Scan),Delta_Backgrd,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis.pdf",sep=""),width = 14,height=9) +Plate_Analysis_L +Plate_Analysis_L_afterQC +Plate_Analysis_K +Plate_Analysis_K_afterQC +Plate_Analysis_r +Plate_Analysis_r_afterQC +Plate_Analysis_AUC +Plate_Analysis_AUC_afterQC +Plate_Analysis_Delta_Backgrd +Plate_Analysis_Delta_Backgrd_afterQC +dev.off() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis_Boxplots.pdf",sep=""),width = 18,height=9) +Plate_Analysis_L_Box +Plate_Analysis_L_Box_afterQC +Plate_Analysis_K_Box +Plate_Analysis_K_Box_afterQC +Plate_Analysis_r_Box +Plate_Analysis_r_Box_afterQC +Plate_Analysis_AUC_Box +Plate_Analysis_AUC_Box_afterQC +Plate_Analysis_Delta_Backgrd_Box +Plate_Analysis_Delta_Backgrd_Box_afterQC +dev.off() + +#remove the zero values and print plate analysis +X_noZero <- X[which(X$l > 0),] +Plate_Analysis_L_afterQC_Z <- ggplot(X_noZero,aes(Scan,l,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_afterQC_Z <- ggplot(X_noZero,aes(Scan,K,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_afterQC_Z <- ggplot(X_noZero,aes(Scan,r,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_afterQC_Z <- ggplot(X_noZero,aes(Scan,AUC,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_afterQC_Z <- ggplot(X_noZero,aes(Scan,Delta_Backgrd,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + + +Plate_Analysis_L_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),l,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),K,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),r,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),AUC,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),Delta_Backgrd,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis_noZeros.pdf",sep=""),width = 14,height=9) +Plate_Analysis_L_afterQC_Z +Plate_Analysis_K_afterQC_Z +Plate_Analysis_r_afterQC_Z +Plate_Analysis_AUC_afterQC_Z +Plate_Analysis_Delta_Backgrd_afterQC_Z +dev.off() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis_noZeros_Boxplots.pdf",sep=""),width = 18,height=9) +Plate_Analysis_L_Box_afterQC_Z +Plate_Analysis_K_Box_afterQC_Z +Plate_Analysis_r_Box_afterQC_Z +Plate_Analysis_AUC_Box_afterQC_Z +Plate_Analysis_Delta_Backgrd_Box_afterQC_Z +dev.off() + +#remove dataset with zeros removed +rm(X_noZero) + + +#X_test_missing_and_removed <- X[X$Removed == 1,] + +#calculate summary statistics for all strains, including both background and the deletions +X_stats_ALL <- ddply(X, c("Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_AUC = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + se_AUC = sd_AUC / sqrt(N-1) +) +#print(X_stats_ALL_L) + +write.csv(X_stats_ALL,file=paste(outputpath,"SummaryStats_ALLSTRAINS.csv"),row.names = FALSE) +#+++++END QC SECTION+++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +##### Part 3 - Generate summary statistics and calculate the max theoretical L value +##### Calculate the Z score at each drug conc for each deletion strain + + +#get the background strains - can be modified to take another argument but for most screens will just be YDL227C +Background_Strains <- c("YDL227C") + +#first part of loop will go through for each background strain +#most cases there will only be one YDL227C +for(s in Background_Strains){ + X_Background <- X[X$OrfRep == s,] + + #if there's missing data for the background strains set these values to NA so the 0 values aren't included in summary statistics + #we may want to consider in some cases giving the max high value to L depending on the data type + if(table(X_Background$l)[1] == 0){ + X_Background[X_Background$l == 0,]$l <- NA + X_Background[X_Background$K == 0,]$K <- NA + X_Background[X_Background$r == 0,]$r <- NA + X_Background[X_Background$AUC == 0,]$AUC <- NA + } + + X_Background <- X_Background[!is.na(X_Background$l),] + + #get summary stats for L, K, R, AUC + X_stats_BY_L <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean = mean(l,na.rm=TRUE), + median = median(l,na.rm=TRUE), + max = max(l,na.rm=TRUE), + min = min(l,na.rm=TRUE), + sd = sd(l,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + print(X_stats_BY_L) + X1_SD <- max(X_stats_BY_L$sd) + + X_stats_BY_K <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(K)), + mean = mean(K,na.rm=TRUE), + median = median(K,na.rm=TRUE), + max = max(K,na.rm=TRUE), + min = min(K,na.rm=TRUE), + sd = sd(K,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + + X1_SD_K <- max(X_stats_BY_K$sd) + + + X_stats_BY_r <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = length(r), + mean = mean(r,na.rm=TRUE), + median = median(r,na.rm=TRUE), + max = max(r,na.rm=TRUE), + min = min(r,na.rm=TRUE), + sd = sd(r,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + + X1_SD_r <- max(X_stats_BY_r$sd) + + X_stats_BY_AUC <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = length(AUC), + mean = mean(AUC,na.rm=TRUE), + median = median(AUC,na.rm=TRUE), + max = max(AUC,na.rm=TRUE), + min = min(AUC,na.rm=TRUE), + sd = sd(AUC,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + + X1_SD_AUC <- max(X_stats_BY_AUC$sd) + + X_stats_BY <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_L = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + se_AUC = sd_AUC / sqrt(N-1) + ) + + write.csv(X_stats_BY,file=paste(outputpath,"SummaryStats_BackgroundStrains.csv"),row.names=FALSE) + + #calculate the max theoretical L values + #only look for max values when K is within 2SD of the ref strain + for(q in unique(X$Conc_Num_Factor)){ + if(q == 0){ + X_within_2SD_K <- X[X$Conc_Num_Factor == q,] + X_within_2SD_K <- X_within_2SD_K[!is.na(X_within_2SD_K$l),] + X_stats_TEMP_K <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_within_2SD_K <- X_within_2SD_K[X_within_2SD_K$K >= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])) ,] + X_within_2SD_K <- X_within_2SD_K[X_within_2SD_K$K <= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + + X_outside_2SD_K <- X[X$Conc_Num_Factor == q,] + X_outside_2SD_K <- X_outside_2SD_K[!is.na(X_outside_2SD_K$l),] + #X_outside_2SD_K_Temp <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_outside_2SD_K <- X_outside_2SD_K[X_outside_2SD_K$K <= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])) | X_outside_2SD_K$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + #X_outside_2SD_K <- X_outside_2SD_K[X_outside_2SD_K$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + + } + if(q > 0){ + X_within_2SD_K_temp <- X[X$Conc_Num_Factor == q,] + X_within_2SD_K_temp <- X_within_2SD_K_temp[!is.na(X_within_2SD_K_temp$l),] + X_stats_TEMP_K <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_within_2SD_K_temp <- X_within_2SD_K_temp[X_within_2SD_K_temp$K >= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])),] + X_within_2SD_K_temp <- X_within_2SD_K_temp[X_within_2SD_K_temp$K <= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])),] + X_within_2SD_K <- rbind(X_within_2SD_K,X_within_2SD_K_temp) + + X_outside_2SD_K_temp <- X[X$Conc_Num_Factor == q,] + X_outside_2SD_K_temp <- X_outside_2SD_K_temp[!is.na(X_outside_2SD_K_temp$l),] + #X_outside_2SD_K_Temp <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_outside_2SD_K_temp <- X_outside_2SD_K_temp[X_outside_2SD_K_temp$K <= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])) | X_outside_2SD_K_temp$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + #X_outside_2SD_K_temp <- X_outside_2SD_K_temp[X_outside_2SD_K_temp$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + X_outside_2SD_K <- rbind(X_outside_2SD_K,X_outside_2SD_K_temp) + } + } + + X_stats_BY_L_within_2SD_K <- ddply(X_within_2SD_K, c("Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean = mean(l), + median = median(l), + max = max(l,na.rm=TRUE), + min = min(l,na.rm=TRUE), + sd = sd(l), + se = sd / sqrt(N-1), + z_max = (max-mean)/sd + ) + print(X_stats_BY_L_within_2SD_K) + X1_SD_within_2SD_K <- max(X_stats_BY_L_within_2SD_K$sd) + write.csv(X_stats_BY_L_within_2SD_K,file=paste(outputpath_QC,"Max_Observed_L_Vals_for_spots_within_2SD_K.csv",sep=""),row.names=FALSE) + + X_stats_BY_L_outside_2SD_K <- ddply(X_outside_2SD_K, c("Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean = mean(l), + median = median(l), + max = max(l,na.rm=TRUE), + min = min(l,na.rm=TRUE), + sd = sd(l), + se = sd / sqrt(N-1) + ) + print(X_stats_BY_L_outside_2SD_K) + X1_SD_outside_2SD_K <- max(X_stats_BY_L_outside_2SD_K$sd) + + #X1_SD_outside_2SD_K <- X[X$l %in% X1_SD_within_2SD_K$l,] + Outside_2SD_K_L_vs_K <- ggplot(X_outside_2SD_K,aes(l,K,color=as.factor(Conc_Num))) + geom_point(aes(ORF=ORF,Gene=Gene,Delta_Backgrd=Delta_Backgrd),shape=3) + + ggtitle("Raw L vs K for strains falling outside 2SD of the K mean at each conc") + theme_Publication_legend_right() + pdf(paste(outputpath_QC,"Raw_L_vs_K_for_strains_2SD_outside_mean_K.pdf",sep=""),width = 10,height = 8) + print(Outside_2SD_K_L_vs_K) + dev.off() + pgg <- ggplotly(Outside_2SD_K_L_vs_K) + plotly_path <- paste(getwd(),"/",outputpath_QC,"RawL_vs_K_for_strains_outside_2SD_K.html",sep="") + saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + + Outside_2SD_K_delta_background_vs_K <- ggplot(X_outside_2SD_K,aes(Delta_Backgrd,K,color=as.factor(Conc_Num))) + geom_point(aes(l=l,ORF=ORF,Gene=Gene),shape=3,position="jitter") + + ggtitle("DeltaBackground vs K for strains falling outside 2SD of the K mean at each conc") + theme_Publication_legend_right() + pdf(paste(outputpath_QC,"DeltaBackground_vs_K_for_strains_2SD_outside_mean_K.pdf",sep=""),width = 10,height = 8) + Outside_2SD_K_delta_background_vs_K + dev.off() + pgg <- ggplotly(Outside_2SD_K_delta_background_vs_K) + #pgg + plotly_path <- paste(getwd(),"/",outputpath_QC,"DeltaBackground_vs_K_for_strains_outside_2SD_K.html",sep="") + saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + + #get the background strain mean values at the no drug conc to calculate shift + Background_L <- X_stats_BY_L$mean[1] + Background_K <- X_stats_BY_K$mean[1] + Background_r <- X_stats_BY_r$mean[1] + Background_AUC <- X_stats_BY_AUC$mean[1] + + #create empty plots for plotting element + p_l <- ggplot() + p_K <- ggplot() + p_r <- ggplot() + p_AUC <- ggplot() + + p_rf_l <- ggplot() + p_rf_K <- ggplot() + p_rf_r <- ggplot() + p_rf_AUC <- ggplot() + + #get only the deletion strains + X2 <- X + X2 <- X2[X2$OrfRep != "YDL227C",] + + #if set to max theoretical value, add a 1 to SM, if not, leave as 0 + #SM = Set to Max + X2$SM <- 0 + #set the missing values to the highest theoretical value at each drug conc for L, leave other values as 0 for the max/min + for(i in 1:length(unique(X2$Conc_Num))){ + Concentration <- unique(X2$Conc_Num)[i] + X2_temp <- X2[X2$Conc_Num == Concentration,] + if(Concentration == 0){ + X2_new <- X2_temp + print(paste("Check loop order, conc =",Concentration,sep=" ")) + } + if(Concentration > 0){ + try(X2_temp[X2_temp$l == 0 & !is.na(X2_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + try(X2_temp[X2_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_temp$l),]$SM <- 1) + try(X2_temp[X2_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + + #X2_temp[X2_temp$K == 0,]$K <- X_stats_ALL_K$max[i] + #X2_temp[X2_temp$r == 0,]$r <- X_stats_ALL_r$max[i] + #X2_temp[X2_temp$AUC == 0,]$AUC <- X_stats_ALL_AUC$max[i] + print(paste("Check loop order, conc =",Concentration,sep=" ")) + + X2_new <- rbind(X2_new,X2_temp) + + } + } + X2 <- X2_new + + + #get only the RF strains + X2_RF <- X + X2_RF <- X2_RF[X2_RF$OrfRep == "YDL227C",] + #if set to max theoretical value, add a 1 to SM, if not, leave as 0 + #SM = Set to Max + X2_RF$SM <- 0 + #set the missing values to the highest theoretical value at each drug conc for L, leave other values as 0 for the max/min + for(i in 1:length(unique(X2_RF$Conc_Num))){ + Concentration <- unique(X2_RF$Conc_Num)[i] + X2_RF_temp <- X2_RF[X2_RF$Conc_Num == Concentration,] + if(Concentration == 0){ + X2_RF_new <- X2_RF_temp + print(paste("Check loop order, conc =",Concentration,sep=" ")) + } + if(Concentration > 0){ + try(X2_RF_temp[X2_RF_temp$l == 0 & !is.na(X2_RF_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + try(X2_temp[X2_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_temp$l),]$SM <- 1) + try(X2_RF_temp[X2_RF_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_RF_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + print(paste("Check loop order, if error, refs have no L values outside theoretical max L, for REFs, conc =",Concentration,sep=" ")) + + X2_RF_new <- rbind(X2_RF_new,X2_RF_temp) + + } + } + X2_RF <- X2_RF_new + + + #######Part 4 Get the RF Z score values + #Change the OrfRep Column to include the RF strain, the Gene name and the Num. so each RF gets its own score + X2_RF$OrfRep <- paste(X2_RF$OrfRep,X2_RF$Gene,X2_RF$Num.,sep="_") + + num_genes_RF <- length(unique(X2_RF$OrfRep)) + print(num_genes_RF) + + + #create the output data.frame containing columns for each RF strain + InteractionScores_RF <- unique(X2_RF["OrfRep"]) + #InteractionScores_RF$Gene <- unique(X2$Gene) + InteractionScores_RF$Gene <- NA + InteractionScores_RF$Raw_Shift_L <- NA + InteractionScores_RF$Z_Shift_L <- NA + InteractionScores_RF$lm_Score_L <- NA + InteractionScores_RF$Z_lm_L <- NA + InteractionScores_RF$R_Squared_L <- NA + InteractionScores_RF$Sum_Z_Score_L <- NA + InteractionScores_RF$Avg_Zscore_L <- NA + InteractionScores_RF$Raw_Shift_K <- NA + InteractionScores_RF$Z_Shift_K <- NA + InteractionScores_RF$lm_Score_K <- NA + InteractionScores_RF$Z_lm_K <- NA + InteractionScores_RF$R_Squared_K <- NA + InteractionScores_RF$Sum_Z_Score_K <- NA + InteractionScores_RF$Avg_Zscore_K <- NA + InteractionScores_RF$Raw_Shift_r <- NA + InteractionScores_RF$Z_Shift_r <- NA + InteractionScores_RF$lm_Score_r <- NA + InteractionScores_RF$Z_lm_r <- NA + InteractionScores_RF$R_Squared_r <- NA + InteractionScores_RF$Sum_Z_Score_r <- NA + InteractionScores_RF$Avg_Zscore_r <- NA + InteractionScores_RF$Raw_Shift_AUC <- NA + InteractionScores_RF$Z_Shift_AUC <- NA + InteractionScores_RF$lm_Score_AUC <- NA + InteractionScores_RF$Z_lm_AUC <- NA + InteractionScores_RF$R_Squared_AUC <- NA + InteractionScores_RF$Sum_Z_Score_AUC <- NA + InteractionScores_RF$Avg_Zscore_AUC <- NA + InteractionScores_RF$NG <- NA + InteractionScores_RF$SM <- NA + + + for(i in 1:num_genes_RF){ + #get each deletion strain ORF + Gene_Sel <- unique(X2_RF$OrfRep)[i] + #extract only the current deletion strain and its data + X_Gene_Sel <- X2_RF[X2_RF$OrfRep == Gene_Sel,] + + X_stats_interaction <- ddply(X_Gene_Sel, c("OrfRep","Gene","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm = TRUE), + median_L = median(l,na.rm = TRUE), + sd_L = sd(l,na.rm = TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm = TRUE), + median_K = median(K,na.rm = TRUE), + sd_K = sd(K,na.rm = TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm = TRUE), + median_r = median(r,na.rm = TRUE), + sd_r = sd(r,na.rm = TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm = TRUE), + median_AUC = median(AUC,na.rm = TRUE), + sd_AUC = sd(AUC,na.rm = TRUE), + se_AUC = sd_AUC / sqrt(N-1), + NG = sum(NG,na.rm=TRUE), + DB= sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + #Get shift vals + #if L is 0, that means the no growth on no drug + #if L is NA at 0, that means the spot was removed due to contamination + #if L is 0, keep the shift at 0 and for other drug concs calculate delta Ls with no shift + #otherwise calculate shift at no drug conc + if(is.na(X_stats_interaction$mean_L[1]) | X_stats_interaction$mean_L[1] == 0 ){ + X_stats_interaction$Raw_Shift_L <- 0 + X_stats_interaction$Raw_Shift_K <- 0 + X_stats_interaction$Raw_Shift_r <- 0 + X_stats_interaction$Raw_Shift_AUC <- 0 + X_stats_interaction$Z_Shift_L <- 0 + X_stats_interaction$Z_Shift_K <- 0 + X_stats_interaction$Z_Shift_r <- 0 + X_stats_interaction$Z_Shift_AUC <- 0 + }else{ + X_stats_interaction$Raw_Shift_L <- X_stats_interaction$mean_L[1] - Background_L + X_stats_interaction$Raw_Shift_K <- X_stats_interaction$mean_K[1] - Background_K + X_stats_interaction$Raw_Shift_r <- X_stats_interaction$mean_r[1] - Background_r + X_stats_interaction$Raw_Shift_AUC <- X_stats_interaction$mean_AUC[1] - Background_AUC + X_stats_interaction$Z_Shift_L <- X_stats_interaction$Raw_Shift_L[1]/X_stats_BY_L$sd[1] + X_stats_interaction$Z_Shift_K <- X_stats_interaction$Raw_Shift_K[1]/X_stats_BY_K$sd[1] + X_stats_interaction$Z_Shift_r <- X_stats_interaction$Raw_Shift_r[1]/X_stats_BY_r$sd[1] + X_stats_interaction$Z_Shift_AUC <- X_stats_interaction$Raw_Shift_AUC[1]/X_stats_BY_AUC$sd[1] + } + + + #get WT vals + X_stats_interaction$WT_l <- X_stats_BY_L$mean + X_stats_interaction$WT_K <- X_stats_BY_K$mean + X_stats_interaction$WT_r <- X_stats_BY_r$mean + X_stats_interaction$WT_AUC <- X_stats_BY_AUC$mean + + #Get WT SD + X_stats_interaction$WT_sd_l <- X_stats_BY_L$sd + X_stats_interaction$WT_sd_K <- X_stats_BY_K$sd + X_stats_interaction$WT_sd_r <- X_stats_BY_r$sd + X_stats_interaction$WT_sd_AUC <- X_stats_BY_AUC$sd + + + #only get scores if there's growth at no drug + if(X_stats_interaction$mean_L[1] != 0 & !is.na(X_stats_interaction$mean_L[1])){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for no growth values in Z score calculation + if(sum(X_stats_interaction$NG,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #get linear model + gene_lm_L <- lm(formula = Delta_L ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_K <- lm(formula = Delta_K ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_r <- lm(formula = Delta_r ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_AUC <- lm(formula = Delta_AUC ~ Conc_Num_Factor,data = X_stats_interaction) + + #get interaction score calculated by linear model and R-squared value for the fit + gene_interaction_L <- MAX_CONC*(gene_lm_L$coefficients[2]) + gene_lm_L$coefficients[1] + r_squared_l <- summary(gene_lm_L)$r.squared + gene_interaction_K <- MAX_CONC*(gene_lm_K$coefficients[2]) + gene_lm_K$coefficients[1] + r_squared_K <- summary(gene_lm_K)$r.squared + gene_interaction_r <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_r$coefficients[1] + r_squared_r <- summary(gene_lm_r)$r.squared + gene_interaction_AUC <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_AUC$coefficients[1] + r_squared_AUC <- summary(gene_lm_AUC)$r.squared + + #Get total of non removed values + Num_non_Removed_Conc <- Total_Conc_Nums - sum(X_stats_interaction$DB,na.rm = TRUE) - 1 + + #report the scores + InteractionScores_RF$OrfRep[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$OrfRep[1] + InteractionScores_RF$Gene[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$Gene[1] + + InteractionScores_RF$Raw_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores_RF$Z_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores_RF$lm_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_L + InteractionScores_RF$R_Squared_L[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores_RF$Sum_Z_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_L[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE)/(Num_non_Removed_Conc) + + + InteractionScores_RF$Raw_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores_RF$Z_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores_RF$lm_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_K + InteractionScores_RF$R_Squared_K[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores_RF$Sum_Z_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_K[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE)/(Num_non_Removed_Conc) + + InteractionScores_RF$Raw_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores_RF$Z_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores_RF$lm_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_r + InteractionScores_RF$R_Squared_r[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores_RF$Sum_Z_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_r[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE)/(Total_Conc_Nums-1) + + InteractionScores_RF$Raw_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores_RF$Z_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores_RF$lm_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_AUC + InteractionScores_RF$R_Squared_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores_RF$Sum_Z_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE)/(Total_Conc_Nums-1) + } + + if(X_stats_interaction$mean_L[1] == 0 | is.na(X_stats_interaction$mean_L[1]) ){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for missing values in Z score calculatiom + if(sum(X_stats_interaction$NG,na.rm = TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #NA values for the next part since there's an NA or 0 at the no drug. + gene_lm_L <- NA + gene_lm_K <- NA + gene_lm_r <- NA + gene_lm_AUC <- NA + + gene_interaction_L <- NA + r_squared_l <- NA + gene_interaction_K <- NA + r_squared_K <- NA + gene_interaction_r <- NA + r_squared_r <- NA + gene_interaction_AUC <- NA + r_squared_AUC <- NA + + X_stats_interaction$Raw_Shift_L <- NA + X_stats_interaction$Raw_Shift_K <- NA + X_stats_interaction$Raw_Shift_r <- NA + X_stats_interaction$Raw_Shift_AUC <- NA + + X_stats_interaction$Z_Shift_L <- NA + X_stats_interaction$Z_Shift_K <- NA + X_stats_interaction$Z_Shift_r <- NA + X_stats_interaction$Z_Shift_AUC <- NA + + InteractionScores_RF$OrfRep[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$OrfRep[1] + InteractionScores_RF$Gene[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$Gene[1] + + InteractionScores_RF$Raw_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores_RF$Z_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores_RF$lm_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_L + InteractionScores_RF$R_Squared_L[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores_RF$Sum_Z_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_L[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + + InteractionScores_RF$Raw_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores_RF$Z_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores_RF$lm_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_K + InteractionScores_RF$R_Squared_K[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores_RF$Sum_Z_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_K[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + + InteractionScores_RF$Raw_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores_RF$Z_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores_RF$lm_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_r + InteractionScores_RF$R_Squared_r[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores_RF$Sum_Z_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_r[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + + InteractionScores_RF$Raw_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores_RF$Z_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores_RF$lm_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_AUC + InteractionScores_RF$R_Squared_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores_RF$Sum_Z_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + } + + if(i == 1){ + X_stats_interaction_ALL_RF <- X_stats_interaction + } + if(i > 1){ + X_stats_interaction_ALL_RF <- rbind(X_stats_interaction_ALL_RF,X_stats_interaction) + } + + InteractionScores_RF$NG[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$NG,na.rm = TRUE) + InteractionScores_RF$DB[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$DB,na.rm = TRUE) + InteractionScores_RF$SM[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$SM,na.rm = TRUE) + + #X_stats_L_int_temp <- rbind(X_stats_L_int_temp,X_stats_L_int) + + + } + print("Pass RF Calculation loop") + + lm_sd_L <- sd(InteractionScores_RF$lm_Score_L,na.rm=TRUE) + lm_sd_K <- sd(InteractionScores_RF$lm_Score_K,na.rm=TRUE) + lm_sd_r <- sd(InteractionScores_RF$lm_Score_r,na.rm=TRUE) + lm_sd_AUC <- sd(InteractionScores_RF$lm_Score_AUC,na.rm=TRUE) + + lm_mean_L <- mean(InteractionScores_RF$lm_Score_L,na.rm=TRUE) + lm_mean_K <- mean(InteractionScores_RF$lm_Score_K,na.rm=TRUE) + lm_mean_r <- mean(InteractionScores_RF$lm_Score_r,na.rm=TRUE) + lm_mean_AUC <- mean(InteractionScores_RF$lm_Score_AUC,na.rm=TRUE) + + print(paste("Mean RF linear regression score L",lm_mean_L)) + + + InteractionScores_RF$Z_lm_L <- (InteractionScores_RF$lm_Score_L - lm_mean_L)/(lm_sd_L) + InteractionScores_RF$Z_lm_K <- (InteractionScores_RF$lm_Score_K - lm_mean_K)/(lm_sd_K) + InteractionScores_RF$Z_lm_r <- (InteractionScores_RF$lm_Score_r - lm_mean_r)/(lm_sd_r) + InteractionScores_RF$Z_lm_AUC <- (InteractionScores_RF$lm_Score_AUC - lm_mean_AUC)/(lm_sd_AUC) + + + InteractionScores_RF <- InteractionScores_RF[order(InteractionScores_RF$Z_lm_L,decreasing=TRUE),] + InteractionScores_RF <- InteractionScores_RF[order(InteractionScores_RF$NG,decreasing=TRUE),] + write.csv(InteractionScores_RF,paste(outputpath,"RF_ZScores_Interaction.csv",sep=""),row.names=FALSE) + + + for(i in 1:num_genes_RF){ + Gene_Sel <- unique(InteractionScores_RF$OrfRep)[i] + X_ZCalculations <- X_stats_interaction_ALL_RF[X_stats_interaction_ALL_RF$OrfRep == Gene_Sel,] + X_Int_Scores <- InteractionScores_RF[InteractionScores_RF$OrfRep == Gene_Sel,] + + p_rf_l[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_L)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_l), ymax=0+(2*WT_sd_l)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_L,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg Zscore =",round(X_Int_Scores$Avg_Zscore_L,2))) + + annotate("text",x=1,y=25,label = paste("lm Zscore =",round(X_Int_Scores$Z_lm_L,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_rf_K[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_K)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_K), ymax=0+(2*WT_sd_K)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_K,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_K,2))) + + annotate("text",x=1,y=25,label = paste("lm ZScore =",round(X_Int_Scores$Z_lm_L,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_rf_r[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_r)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-0.65,0.65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_r), ymax=0+(2*WT_sd_r)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=0.45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_r,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=0.35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_r,2))) + + annotate("text",x=1,y=0.25,label = paste("lm ZScore =",round(X_Int_Scores$Z_lm_r,2))) + + annotate("text",x=1,y=-0.25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-0.35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-0.45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-0.6,-0.4,-0.2,0,0.2,0.4,0.6)) + + theme_Publication() + + p_rf_AUC[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_AUC)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-6500,6500)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_AUC), ymax=0+(2*WT_sd_AUC)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=4500,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_AUC,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=3500,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_AUC,2))) + + annotate("text",x=1,y=2500,label = paste("lm ZScore =",round(X_Int_Scores$Z_lm_AUC,2))) + + annotate("text",x=1,y=-2500,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-3500,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-4500,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-6000,-5000,-4000,-3000,-2000,-1000,0,1000,2000,3000,4000,5000,6000)) + + theme_Publication() + + + + if(i == 1){ + X_stats_interaction_ALL_RF_final <- X_ZCalculations + } + if(i > 1){ + X_stats_interaction_ALL_RF_final <- rbind(X_stats_interaction_ALL_RF_final,X_ZCalculations) + } + } + print("Pass RF ggplot loop") + write.csv(X_stats_interaction_ALL_RF_final,paste(outputpath,"RF_ZScore_Calculations.csv",sep=""),row.names = FALSE) + + + ####### Part 5 - Get Zscores for Gene deletion strains + + + + #get total number of genes for the next loop + num_genes <- length(unique(X2$OrfRep)) + print(num_genes) + + #create the output data.frame containing columns for each deletion strain + InteractionScores <- unique(X2["OrfRep"]) + #InteractionScores$Gene <- unique(X2$Gene) + InteractionScores$Gene <- NA + InteractionScores$Raw_Shift_L <- NA + InteractionScores$Z_Shift_L <- NA + InteractionScores$lm_Score_L <- NA + InteractionScores$Z_lm_L <- NA + InteractionScores$R_Squared_L <- NA + InteractionScores$Sum_Z_Score_L <- NA + InteractionScores$Avg_Zscore_L <- NA + InteractionScores$Raw_Shift_K <- NA + InteractionScores$Z_Shift_K <- NA + InteractionScores$lm_Score_K <- NA + InteractionScores$Z_lm_K <- NA + InteractionScores$R_Squared_K <- NA + InteractionScores$Sum_Z_Score_K <- NA + InteractionScores$Avg_Zscore_K <- NA + InteractionScores$Raw_Shift_r <- NA + InteractionScores$Z_Shift_r <- NA + InteractionScores$lm_Score_r <- NA + InteractionScores$Z_lm_r <- NA + InteractionScores$R_Squared_r <- NA + InteractionScores$Sum_Z_Score_r <- NA + InteractionScores$Avg_Zscore_r <- NA + InteractionScores$Raw_Shift_AUC <- NA + InteractionScores$Z_Shift_AUC <- NA + InteractionScores$lm_Score_AUC <- NA + InteractionScores$Z_lm_AUC <- NA + InteractionScores$R_Squared_AUC <- NA + InteractionScores$Sum_Z_Score_AUC <- NA + InteractionScores$Avg_Zscore_AUC <- NA + InteractionScores$NG <- NA + InteractionScores$DB <- NA + InteractionScores$SM <- NA + + for(i in 1:num_genes){ + #get each deletion strain ORF + Gene_Sel <- unique(X2$OrfRep)[i] + #extract only the current deletion strain and its data + X_Gene_Sel <- X2[X2$OrfRep == Gene_Sel,] + + X_stats_interaction <- ddply(X_Gene_Sel, c("OrfRep","Gene","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm = TRUE), + median_L = median(l,na.rm = TRUE), + sd_L = sd(l,na.rm = TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm = TRUE), + median_K = median(K,na.rm = TRUE), + sd_K = sd(K,na.rm = TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm = TRUE), + median_r = median(r,na.rm = TRUE), + sd_r = sd(r,na.rm = TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm = TRUE), + median_AUC = median(AUC,na.rm = TRUE), + sd_AUC = sd(AUC,na.rm = TRUE), + se_AUC = sd_AUC / sqrt(N-1), + NG = sum(NG,na.rm=TRUE), + DB= sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + #Get shift vals + #if L is 0, that means the no growth on no drug + #if L is NA at 0, that means the spot was removed due to contamination + #if L is 0, keep the shift at 0 and for other drug concs calculate delta Ls with no shift + #otherwise calculate shift at no drug conc + if(is.na(X_stats_interaction$mean_L[1]) | X_stats_interaction$mean_L[1] == 0 ){ + X_stats_interaction$Raw_Shift_L <- 0 + X_stats_interaction$Raw_Shift_K <- 0 + X_stats_interaction$Raw_Shift_r <- 0 + X_stats_interaction$Raw_Shift_AUC <- 0 + X_stats_interaction$Z_Shift_L <- 0 + X_stats_interaction$Z_Shift_K <- 0 + X_stats_interaction$Z_Shift_r <- 0 + X_stats_interaction$Z_Shift_AUC <- 0 + }else{ + X_stats_interaction$Raw_Shift_L <- X_stats_interaction$mean_L[1] - Background_L + X_stats_interaction$Raw_Shift_K <- X_stats_interaction$mean_K[1] - Background_K + X_stats_interaction$Raw_Shift_r <- X_stats_interaction$mean_r[1] - Background_r + X_stats_interaction$Raw_Shift_AUC <- X_stats_interaction$mean_AUC[1] - Background_AUC + X_stats_interaction$Z_Shift_L <- X_stats_interaction$Raw_Shift_L[1]/X_stats_BY_L$sd[1] + X_stats_interaction$Z_Shift_K <- X_stats_interaction$Raw_Shift_K[1]/X_stats_BY_K$sd[1] + X_stats_interaction$Z_Shift_r <- X_stats_interaction$Raw_Shift_r[1]/X_stats_BY_r$sd[1] + X_stats_interaction$Z_Shift_AUC <- X_stats_interaction$Raw_Shift_AUC[1]/X_stats_BY_AUC$sd[1] + } + + + #get WT vals + X_stats_interaction$WT_l <- X_stats_BY_L$mean + X_stats_interaction$WT_K <- X_stats_BY_K$mean + X_stats_interaction$WT_r <- X_stats_BY_r$mean + X_stats_interaction$WT_AUC <- X_stats_BY_AUC$mean + + #Get WT SD + X_stats_interaction$WT_sd_l <- X_stats_BY_L$sd + X_stats_interaction$WT_sd_K <- X_stats_BY_K$sd + X_stats_interaction$WT_sd_r <- X_stats_BY_r$sd + X_stats_interaction$WT_sd_AUC <- X_stats_BY_AUC$sd + + + #only get scores if there's growth at no drug + if(X_stats_interaction$mean_L[1] != 0 & !is.na(X_stats_interaction$mean_L[1])){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for no growth values in Z score calculation + if(sum(X_stats_interaction$NG,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #get linear model + gene_lm_L <- lm(formula = Delta_L ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_K <- lm(formula = Delta_K ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_r <- lm(formula = Delta_r ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_AUC <- lm(formula = Delta_AUC ~ Conc_Num_Factor,data = X_stats_interaction) + + #get interaction score calculated by linear model and R-squared value for the fit + gene_interaction_L <- MAX_CONC*(gene_lm_L$coefficients[2]) + gene_lm_L$coefficients[1] + r_squared_l <- summary(gene_lm_L)$r.squared + gene_interaction_K <- MAX_CONC*(gene_lm_K$coefficients[2]) + gene_lm_K$coefficients[1] + r_squared_K <- summary(gene_lm_K)$r.squared + gene_interaction_r <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_r$coefficients[1] + r_squared_r <- summary(gene_lm_r)$r.squared + gene_interaction_AUC <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_AUC$coefficients[1] + r_squared_AUC <- summary(gene_lm_AUC)$r.squared + + #Get total of non removed values + Num_non_Removed_Conc <- Total_Conc_Nums - sum(X_stats_interaction$DB,na.rm = TRUE) - 1 + + #report the scores + InteractionScores$OrfRep[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$OrfRep[1]) + InteractionScores$Gene[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$Gene[1]) + + InteractionScores$Raw_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores$Z_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores$lm_Score_L[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_L + InteractionScores$Z_lm_L[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_L-lm_mean_L)/lm_sd_L + InteractionScores$R_Squared_L[InteractionScores$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores$Sum_Z_Score_L[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE) + InteractionScores$Avg_Zscore_L[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE)/(Num_non_Removed_Conc) + + + InteractionScores$Raw_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores$Z_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores$lm_Score_K[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_K + InteractionScores$Z_lm_K[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_K-lm_mean_K)/lm_sd_K + InteractionScores$R_Squared_K[InteractionScores$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores$Sum_Z_Score_K[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE) + InteractionScores$Avg_Zscore_K[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE)/(Num_non_Removed_Conc) + + InteractionScores$Raw_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores$Z_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores$lm_Score_r[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_r + InteractionScores$Z_lm_r[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_r-lm_mean_r)/lm_sd_r + InteractionScores$R_Squared_r[InteractionScores$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores$Sum_Z_Score_r[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE) + InteractionScores$Avg_Zscore_r[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE)/(Total_Conc_Nums-1) + + InteractionScores$Raw_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores$Z_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores$lm_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_AUC + InteractionScores$Z_lm_AUC[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_AUC-lm_mean_AUC)/lm_sd_AUC + InteractionScores$R_Squared_AUC[InteractionScores$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores$Sum_Z_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE) + InteractionScores$Avg_Zscore_AUC[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE)/(Total_Conc_Nums-1) + } + + if(X_stats_interaction$mean_L[1] == 0 | is.na(X_stats_interaction$mean_L[1]) ){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for missing values in Z score calculatiom + if(sum(X_stats_interaction$NG,na.rm = TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #NA values for the next part since there's an NA or 0 at the no drug. + gene_lm_L <- NA + gene_lm_K <- NA + gene_lm_r <- NA + + gene_interaction_L <- NA + r_squared_l <- NA + gene_interaction_K <- NA + r_squared_K <- NA + gene_interaction_r <- NA + r_squared_r <- NA + + X_stats_interaction$Raw_Shift_L <- NA + X_stats_interaction$Raw_Shift_K <- NA + X_stats_interaction$Raw_Shift_r <- NA + X_stats_interaction$Raw_Shift_AUC <- NA + + X_stats_interaction$Z_Shift_L <- NA + X_stats_interaction$Z_Shift_K <- NA + X_stats_interaction$Z_Shift_r <- NA + X_stats_interaction$Z_Shift_AUC <- NA + + InteractionScores$OrfRep[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$OrfRep[1]) + InteractionScores$Gene[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$Gene[1]) + + InteractionScores$Raw_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores$Z_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores$lm_Score_L[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_L[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$R_Squared_L[InteractionScores$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores$Sum_Z_Score_L[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_L[InteractionScores$OrfRep == Gene_Sel] <- NA + + InteractionScores$Raw_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores$Z_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores$lm_Score_K[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_K[InteractionScores$OrfRep == Gene_Sel] <-NA + InteractionScores$R_Squared_K[InteractionScores$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores$Sum_Z_Score_K[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_K[InteractionScores$OrfRep == Gene_Sel] <- NA + + InteractionScores$Raw_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores$Z_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores$lm_Score_r[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_r[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$R_Squared_r[InteractionScores$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores$Sum_Z_Score_r[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_r[InteractionScores$OrfRep == Gene_Sel] <- NA + + InteractionScores$Raw_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores$Z_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores$lm_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$R_Squared_AUC[InteractionScores$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores$Sum_Z_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + } + + if(i == 1){ + X_stats_interaction_ALL <- X_stats_interaction + } + if(i > 1){ + X_stats_interaction_ALL <- rbind(X_stats_interaction_ALL,X_stats_interaction) + } + + InteractionScores$NG[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$NG,na.rm = TRUE) + InteractionScores$DB[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$DB,na.rm = TRUE) + InteractionScores$SM[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$SM,na.rm = TRUE) + + #X_stats_L_int_temp <- rbind(X_stats_L_int_temp,X_stats_L_int) + + + } + print("Pass Int Calculation loop") + InteractionScores <- InteractionScores[order(InteractionScores$Z_lm_L,decreasing=TRUE),] + InteractionScores <- InteractionScores[order(InteractionScores$NG,decreasing=TRUE),] + df_order_by_OrfRep <- unique(InteractionScores$OrfRep) + #X_stats_interaction_ALL <- X_stats_interaction_ALL[order(X_stats_interaction_ALL$NG,decreasing=TRUE),] + write.csv(InteractionScores,paste(outputpath,"ZScores_Interaction.csv",sep=""),row.names=FALSE) + + InteractionScores_deletion_enhancers_L <- InteractionScores[InteractionScores$Avg_Zscore_L >= 2,] + InteractionScores_deletion_enhancers_K <- InteractionScores[InteractionScores$Avg_Zscore_K <= -2,] + InteractionScores_deletion_suppressors_L <- InteractionScores[InteractionScores$Avg_Zscore_L <= -2,] + InteractionScores_deletion_suppressors_K <- InteractionScores[InteractionScores$Avg_Zscore_K >= 2,] + InteractionScores_deletion_enhancers_and_Suppressors_L <- InteractionScores[InteractionScores$Avg_Zscore_L >= 2 | InteractionScores$Avg_Zscore_L <= -2,] + InteractionScores_deletion_enhancers_and_Suppressors_K <- InteractionScores[InteractionScores$Avg_Zscore_K >= 2 | InteractionScores$Avg_Zscore_K <= -2,] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L <- InteractionScores[InteractionScores$Z_lm_L >= 2 & InteractionScores$Avg_Zscore_L <= -2,] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L <- InteractionScores[InteractionScores$Z_lm_L <= -2 & InteractionScores$Avg_Zscore_L >= 2,] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K <- InteractionScores[InteractionScores$Z_lm_K <= -2 & InteractionScores$Avg_Zscore_K >= 2,] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K <- InteractionScores[InteractionScores$Z_lm_K >= 2 & InteractionScores$Avg_Zscore_K <= -2,] + + InteractionScores_deletion_enhancers_L <- InteractionScores_deletion_enhancers_L[!is.na(InteractionScores_deletion_enhancers_L$OrfRep),] + InteractionScores_deletion_enhancers_K <- InteractionScores_deletion_enhancers_K[!is.na(InteractionScores_deletion_enhancers_K$OrfRep),] + InteractionScores_deletion_suppressors_L <- InteractionScores_deletion_suppressors_L[!is.na(InteractionScores_deletion_suppressors_L$OrfRep),] + InteractionScores_deletion_suppressors_K <- InteractionScores_deletion_suppressors_K[!is.na(InteractionScores_deletion_suppressors_K$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_L <- InteractionScores_deletion_enhancers_and_Suppressors_L[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_L$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_K <- InteractionScores_deletion_enhancers_and_Suppressors_K[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_K$OrfRep),] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L <- InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L[!is.na(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L$OrfRep),] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L <- InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L[!is.na(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L$OrfRep),] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K <- InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K[!is.na(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K$OrfRep),] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K <- InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K[!is.na(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K$OrfRep),] + + write.csv(InteractionScores_deletion_enhancers_L,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_K,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_L,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_K,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_L,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_K,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L,paste(outputpath,"ZScores_Interaction_Suppressors_and_lm_Enhancers_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L,paste(outputpath,"ZScores_Interaction_Enhancers_and_lm_Suppressors_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K,paste(outputpath,"ZScores_Interaction_Suppressors_and_lm_Enhancers_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K,paste(outputpath,"ZScores_Interaction_Enhancers_and_lm_Suppressors_K.csv",sep=""),row.names=FALSE) + + #get enhancers and suppressors for linear regression + InteractionScores_deletion_enhancers_L_lm <- InteractionScores[InteractionScores$Z_lm_L >= 2,] + InteractionScores_deletion_enhancers_K_lm <- InteractionScores[InteractionScores$Z_lm_K <= -2,] + InteractionScores_deletion_suppressors_L_lm <- InteractionScores[InteractionScores$Z_lm_L <= -2,] + InteractionScores_deletion_suppressors_K_lm <- InteractionScores[InteractionScores$Z_lm_K >= 2,] + InteractionScores_deletion_enhancers_and_Suppressors_L_lm <- InteractionScores[InteractionScores$Z_lm_L >= 2 | InteractionScores$Z_lm_L <= -2,] + InteractionScores_deletion_enhancers_and_Suppressors_K_lm <- InteractionScores[InteractionScores$Z_lm_K >= 2 | InteractionScores$Z_lm_K <= -2,] + + InteractionScores_deletion_enhancers_L_lm <- InteractionScores_deletion_enhancers_L_lm[!is.na(InteractionScores_deletion_enhancers_L_lm$OrfRep),] + InteractionScores_deletion_enhancers_K_lm <- InteractionScores_deletion_enhancers_K_lm[!is.na(InteractionScores_deletion_enhancers_K_lm$OrfRep),] + InteractionScores_deletion_suppressors_L_lm <- InteractionScores_deletion_suppressors_L_lm[!is.na(InteractionScores_deletion_suppressors_L_lm$OrfRep),] + InteractionScores_deletion_suppressors_K_lm <- InteractionScores_deletion_suppressors_K_lm[!is.na(InteractionScores_deletion_suppressors_K_lm$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_L_lm <- InteractionScores_deletion_enhancers_and_Suppressors_L_lm[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_L_lm$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_K_lm <- InteractionScores_deletion_enhancers_and_Suppressors_K_lm[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_K_lm$OrfRep),] + + write.csv(InteractionScores_deletion_enhancers_L_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_L_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_K_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_K_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_L_lm,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_L_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_K_lm,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_K_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_L_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_L_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_K_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_K_lm.csv",sep=""),row.names=FALSE) + + + write.csv(Labels,file=paste("../Code/StudyInfo.csv"),row.names = FALSE) + print('ln 1570 write StudyInfo.csv after ') + #write.table(Labels,file=paste("../Code/StudyInfo.txt"),sep="\t",row.names = FALSE) + + for(i in 1:num_genes){ + Gene_Sel <- unique(InteractionScores$OrfRep)[i] + X_ZCalculations <- X_stats_interaction_ALL[X_stats_interaction_ALL$OrfRep == Gene_Sel,] + X_Int_Scores <- InteractionScores[InteractionScores$OrfRep == Gene_Sel,] + + p_l[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_L)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_l), ymax=0+(2*WT_sd_l)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_L,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_L,2))) + + annotate("text",x=1,y=25,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_L,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_K[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_K)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_K), ymax=0+(2*WT_sd_K)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_K,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_K,2))) + + annotate("text",x=1,y=25,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_K,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_r[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_r)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-0.65,0.65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_r), ymax=0+(2*WT_sd_r)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=0.45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_r,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=0.35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_r,2))) + + annotate("text",x=1,y=0.25,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_r,2))) + + annotate("text",x=1,y=-0.25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-0.35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-0.45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-0.6,-0.4,-0.2,0,0.2,0.4,0.6)) + + theme_Publication() + + p_AUC[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_AUC)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-6500,6500)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_AUC), ymax=0+(2*WT_sd_AUC)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=4500,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_AUC,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=3500,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_AUC,2))) + + annotate("text",x=1,y=2500,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_AUC,2))) + + annotate("text",x=1,y=-2500,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-3500,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-4500,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-6000,-5000,-4000,-3000,-2000,-1000,0,1000,2000,3000,4000,5000,6000)) + + theme_Publication() + + + + if(i == 1){ + X_stats_interaction_ALL_final <- X_ZCalculations + } + if(i > 1){ + X_stats_interaction_ALL_final <- rbind(X_stats_interaction_ALL_final,X_ZCalculations) + } + } + print("Pass Int ggplot loop") + write.csv(X_stats_interaction_ALL_final,paste(outputpath,"ZScore_Calculations.csv",sep=""),row.names = FALSE) + + + + + + + Blank <- ggplot(X2_RF) + geom_blank() + + pdf(paste(outputpath,"InteractionPlots.pdf",sep=""),width = 16, height = 16, onefile = TRUE) + + X_stats_X2_RF <- ddply(X2_RF, c("Conc_Num","Conc_Num_Factor"), summarise, + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_AUC = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + NG = sum(NG,na.rm=TRUE), + DB = sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + L_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,l)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,160)) + + annotate("text",x=-0.25,y=10,label="NG") + + annotate("text",x=-0.25,y=5,label="DB") + + annotate("text",x=-0.25,y=0,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=0,label=X_stats_X2_RF$SM) + + theme_Publication() + + K_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,K)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(-20,160)) + + annotate("text",x=-0.25,y=-5,label="NG") + + annotate("text",x=-0.25,y=-12.5,label="DB") + + annotate("text",x=-0.25,y=-20,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-5,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-12.5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-20,label=X_stats_X2_RF$SM) + + theme_Publication() + + R_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,r)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + annotate("text",x=-0.25,y=.9,label="NG") + + annotate("text",x=-0.25,y=.8,label="DB") + + annotate("text",x=-0.25,y=.7,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.9,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.8,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.7,label=X_stats_X2_RF$SM) + + theme_Publication() + + AUC_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,AUC)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(0,12500)) + + annotate("text",x=-0.25,y=11000,label="NG") + + annotate("text",x=-0.25,y=10000,label="DB") + + annotate("text",x=-0.25,y=9000,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=11000,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10000,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=9000,label=X_stats_X2_RF$SM) + + theme_Publication() + + + L_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),l)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,160)) + + theme_Publication() + + K_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),K)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(0,130)) + + theme_Publication() + + r_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),r)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + theme_Publication() + + AUC_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),AUC)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(0,12500)) + + theme_Publication() + + + grid.arrange(L_Stats,K_Stats,R_Stats,AUC_Stats,ncol=2,nrow=2) + grid.arrange(L_Stats_Box,K_Stats_Box,r_Stats_Box,AUC_Stats_Box,ncol=2,nrow=2) + + + + #plot the references + #grid.arrange(p3,p3_K,p3_r,p4,p4_K,p4_r,p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=4) + #grid.arrange(p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=2) + + #loop for grid arrange 4x3 + j <- rep(1,((num_genes)/3)-1) + for(n in 1:length(j)){ + j[n+1] <- n*3 + 1 + } + #loop for printing each plot + num <- 0 + for(m in 1:(round((num_genes)/3)-1)){ + num <- j[m] + grid.arrange(p_l[[num]],p_K[[num]],p_r[[num]],p_AUC[[num]],p_l[[num+1]],p_K[[num+1]],p_r[[num+1]],p_AUC[[num+1]],p_l[[num+2]],p_K[[num+2]],p_r[[num+2]],p_AUC[[num+2]],ncol=4,nrow=3) + #grid.arrange(p_l[[364]],p_K[[364]],p_r[[364]],p_l[[365]],p_K[[365]],p_r[[365]],p_l[[366]],p_K[[366]],p_r[[366]],ncol=3,nrow=3) + + + #p1[[num+3]],p_K[[num+3]],p_r[[num+3]],p1[[num+4]],p_K[[num+4]],p_r[[num+4]] + } + if(num_genes != (num+2)){ + total_num = num_genes - (num+2) + if(total_num == 5){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],p_l[[num+5]],p_K[[num+5]],p_r[[num+5]],p_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_AUC[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],p_AUC[[num+7]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + if(total_num == 4){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],p_l[[num+5]],p_K[[num+5]],p_r[[num+5]],p_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_AUC[[num+6]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + + if(total_num == 3){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],p_l[[num+5]],p_K[[num+5]],p_r[[num+5]],p_AUC[[num+5]],ncol=4,nrow=3) + #grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 2){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 1){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + } + dev.off() + + + + pdf(paste(outputpath,"RF_InteractionPlots.pdf",sep=""),width = 16, height = 16, onefile = TRUE) + + X_stats_X2_RF <- ddply(X2_RF, c("Conc_Num","Conc_Num_Factor"), summarise, + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_AUC = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + NG = sum(NG,na.rm=TRUE), + DB = sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + L_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,l)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,130)) + + annotate("text",x=-0.25,y=10,label="NG") + + annotate("text",x=-0.25,y=5,label="DB") + + annotate("text",x=-0.25,y=0,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=0,label=X_stats_X2_RF$SM) + + theme_Publication() + + K_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,K)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(-20,160)) + + annotate("text",x=-0.25,y=-5,label="NG") + + annotate("text",x=-0.25,y=-12.5,label="DB") + + annotate("text",x=-0.25,y=-20,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-5,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-12.5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-20,label=X_stats_X2_RF$SM) + + theme_Publication() + + R_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,r)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + annotate("text",x=-0.25,y=.9,label="NG") + + annotate("text",x=-0.25,y=.8,label="DB") + + annotate("text",x=-0.25,y=.7,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.9,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.8,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.7,label=X_stats_X2_RF$SM) + + theme_Publication() + + AUC_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,AUC)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(0,12500)) + + annotate("text",x=-0.25,y=11000,label="NG") + + annotate("text",x=-0.25,y=10000,label="DB") + + annotate("text",x=-0.25,y=9000,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=11000,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10000,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=9000,label=X_stats_X2_RF$SM) + + theme_Publication() + + + L_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),l)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,130)) + + theme_Publication() + + K_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),K)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(0,160)) + + theme_Publication() + + r_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),r)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + theme_Publication() + + AUC_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),AUC)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(12000,0)) + + theme_Publication() + + + grid.arrange(L_Stats,K_Stats,R_Stats,AUC_Stats,ncol=2,nrow=2) + grid.arrange(L_Stats_Box,K_Stats_Box,r_Stats_Box,AUC_Stats_Box,ncol=2,nrow=2) + + + + #plot the references + #grid.arrange(p3,p3_K,p3_r,p4,p4_K,p4_r,p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=4) + #grid.arrange(p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=2) + + #loop for grid arrange 4x3 + j <- rep(1,((num_genes_RF)/3)-1) + for(n in 1:length(j)){ + j[n+1] <- n*3 + 1 + } + #loop for printing each plot + num <- 0 + for(m in 1:(round((num_genes_RF)/3)-1)){ + num <- j[m] + grid.arrange(p_rf_l[[num]],p_rf_K[[num]],p_rf_r[[num]],p_rf_AUC[[num]],p_rf_l[[num+1]],p_rf_K[[num+1]],p_rf_r[[num+1]],p_rf_AUC[[num+1]],p_rf_l[[num+2]],p_rf_K[[num+2]],p_rf_r[[num+2]],p_rf_AUC[[num+2]],ncol=4,nrow=3) + #grid.arrange(p_rf_l[[364]],p_rf_K[[364]],p_rf_r[[364]],p_rf_l[[365]],p_rf_K[[365]],p_rf_r[[365]],p_rf_l[[366]],p_rf_K[[366]],p_rf_r[[366]],ncol=3,nrow=3) + + + #p1[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p1[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]] + } + if(num_genes_RF != (num+2)){ + total_num = num_genes_RF - (num+2) + if(total_num == 5){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],p_rf_l[[num+5]],p_rf_K[[num+5]],p_rf_r[[num+5]],p_rf_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_AUC[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],p_rf_AUC[[num+7]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + if(total_num == 4){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],p_rf_l[[num+5]],p_rf_K[[num+5]],p_rf_r[[num+5]],p_rf_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_AUC[[num+6]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + + if(total_num == 3){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],p_rf_l[[num+5]],p_rf_K[[num+5]],p_rf_r[[num+5]],p_rf_AUC[[num+5]],ncol=4,nrow=3) + #grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 2){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 1){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + } + dev.off() + + #print rank plots for L and K gene interactions + + + InteractionScores_AdjustMissing <- InteractionScores + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_L),]$Avg_Zscore_L <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_K),]$Avg_Zscore_K <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_r),]$Avg_Zscore_r <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_AUC),]$Avg_Zscore_AUC <- 0.001 + + InteractionScores_AdjustMissing$L_Rank <- NA + InteractionScores_AdjustMissing$K_Rank <- NA + InteractionScores_AdjustMissing$r_Rank <- NA + InteractionScores_AdjustMissing$AUC_Rank <- NA + + InteractionScores_AdjustMissing$L_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_L) + InteractionScores_AdjustMissing$K_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_K) + InteractionScores_AdjustMissing$r_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_r) + InteractionScores_AdjustMissing$AUC_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_AUC) + + # + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_L),]$Z_lm_L <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_K),]$Z_lm_K <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_r),]$Z_lm_r <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_AUC),]$Z_lm_AUC <- 0.001 + + InteractionScores_AdjustMissing$L_Rank_lm <- NA + InteractionScores_AdjustMissing$K_Rank_lm <- NA + InteractionScores_AdjustMissing$r_Rank_lm <- NA + InteractionScores_AdjustMissing$AUC_Rank_lm <- NA + + InteractionScores_AdjustMissing$L_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_L) + InteractionScores_AdjustMissing$K_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_K) + InteractionScores_AdjustMissing$r_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_r) + InteractionScores_AdjustMissing$AUC_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_AUC) + + + + Rank_L_1SD <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L >= 1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L >= 2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L >= 3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K <= -1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K <= -2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K <= -3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + pdf(paste(outputpath,"RankPlots.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD,Rank_L_2SD,Rank_L_3SD,Rank_K_1SD,Rank_K_2SD,Rank_K_3SD,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext,Rank_L_2SD_notext,Rank_L_3SD_notext,Rank_K_1SD_notext,Rank_K_2SD_notext,Rank_K_3SD_notext,ncol=3,nrow=2) + + dev.off() + + + Rank_L_1SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L >= 1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L >= 2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L >= 3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K <= -1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K <= -2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K <= -3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + pdf(paste(outputpath,"RankPlots_lm.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD_lm,Rank_L_2SD_lm,Rank_L_3SD_lm,Rank_K_1SD_lm,Rank_K_2SD_lm,Rank_K_3SD_lm,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext_lm,Rank_L_2SD_notext_lm,Rank_L_3SD_notext_lm,Rank_K_1SD_notext_lm,Rank_K_2SD_notext_lm,Rank_K_3SD_notext_lm,ncol=3,nrow=2) + + dev.off() + + + + X_NArm <- InteractionScores[!is.na(InteractionScores$Z_lm_L) | !is.na(InteractionScores$Avg_Zscore_L) ,] + + #find overlaps + X_NArm$Overlap <- "No Effect" + try(X_NArm[X_NArm$Z_lm_L >= 2 & X_NArm$Avg_Zscore_L >= 2,]$Overlap <- "Deletion Enhancer Both") + try(X_NArm[X_NArm$Z_lm_L <= -2 & X_NArm$Avg_Zscore_L <= -2,]$Overlap <- "Deletion Suppressor Both") + try(X_NArm[X_NArm$Z_lm_L >= 2 & X_NArm$Avg_Zscore_L <= 2,]$Overlap <- "Deletion Enhancer lm only") + try(X_NArm[X_NArm$Z_lm_L <= 2 & X_NArm$Avg_Zscore_L >= 2,]$Overlap <- "Deletion Enhancer Avg Zscore only") + try(X_NArm[X_NArm$Z_lm_L <= -2 & X_NArm$Avg_Zscore_L >= -2,]$Overlap <- "Deletion Suppressor lm only") + try(X_NArm[X_NArm$Z_lm_L >= -2 & X_NArm$Avg_Zscore_L <= -2,]$Overlap <- "Deletion Suppressor Avg Zscore only") + try(X_NArm[X_NArm$Z_lm_L >= 2 & X_NArm$Avg_Zscore_L <= -2,]$Overlap <- "Deletion Enhancer lm, Deletion Suppressor Avg Z score") + try(X_NArm[X_NArm$Z_lm_L <= -2 & X_NArm$Avg_Zscore_L >= 2,]$Overlap <- "Deletion Suppressor lm, Deletion Enhancer Avg Z score") + + #get the linear model info and the r-squared value for all CPPs in results 1 vs results 2 + get_lm_L <- lm(X_NArm$Z_lm_L~X_NArm$Avg_Zscore_L) + L_lm <- summary(get_lm_L) + + get_lm_K <- lm(X_NArm$Z_lm_K~X_NArm$Avg_Zscore_K) + K_lm <- summary(get_lm_K) + + get_lm_r <- lm(X_NArm$Z_lm_r~X_NArm$Avg_Zscore_r) + r_lm <- summary(get_lm_r) + + get_lm_AUC <- lm(X_NArm$Z_lm_AUC~X_NArm$Avg_Zscore_AUC) + AUC_lm <- summary(get_lm_AUC) + + pdf(paste(outputpath,"Avg_Zscore_vs_lm_NA_rm.pdf",sep=""),width = 16, height = 12, onefile = TRUE) + + print(ggplot(X_NArm,aes(Avg_Zscore_L,Z_lm_L)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm L") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(Avg_Zscore_K,Z_lm_K)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm K") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(K_lm$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(Avg_Zscore_r,Z_lm_r)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm r") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(r_lm$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(Avg_Zscore_AUC,Z_lm_AUC)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm AUC") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(AUC_lm$r.squared,2))) + theme_Publication_legend_right()) + + dev.off() + + + lm_v_Zscore_L <- ggplot(X_NArm,aes(Avg_Zscore_L,Z_lm_L,ORF=OrfRep,Gene=Gene,NG=NG,SM=SM,DB=DB)) + geom_point(aes(color=Overlap),shape=3) + + geom_smooth(method = "lm",color=1) + ggtitle("Avg Zscore vs lm L") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm$r.squared,2))) + theme_Publication_legend_right() + + pgg <- ggplotly(lm_v_Zscore_L) + #pgg + plotly_path <- paste(getwd(),"/",outputpath,"Avg_Zscore_vs_lm_NA_rm.html",sep="") + saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + X_NArm$L_Rank <- rank(X_NArm$Avg_Zscore_L) + X_NArm$K_Rank <- rank(X_NArm$Avg_Zscore_K) + X_NArm$r_Rank <- rank(X_NArm$Avg_Zscore_r) + X_NArm$AUC_Rank <- rank(X_NArm$Avg_Zscore_AUC) + + X_NArm$L_Rank_lm <- rank(X_NArm$Z_lm_L) + X_NArm$K_Rank_lm <- rank(X_NArm$Z_lm_K) + X_NArm$r_Rank_lm <- rank(X_NArm$Z_lm_r) + X_NArm$AUC_Rank_lm <- rank(X_NArm$Z_lm_AUC) + + #get the linear model info and the r-squared value for all CPPs in results 1 vs results 2 + get_lm_L2 <- lm(X_NArm$L_Rank_lm~X_NArm$L_Rank) + L_lm2 <- summary(get_lm_L2) + + get_lm_K2 <- lm(X_NArm$K_Rank_lm~X_NArm$K_Rank) + K_lm2 <- summary(get_lm_K2) + + get_lm_r2 <- lm(X_NArm$r_Rank_lm~X_NArm$r_Rank) + r_lm2 <- summary(get_lm_r2) + + get_lm_AUC2 <- lm(X_NArm$AUC_Rank_lm~X_NArm$AUC_Rank) + AUC_lm2 <- summary(get_lm_AUC2) + + num_genes_NArm2 <- (dim(X_NArm)[1])/2 + + pdf(paste(outputpath,"Avg_Zscore_vs_lm_ranked_NA_rm.pdf",sep=""),width = 16, height = 12, onefile = TRUE) + + print(ggplot(X_NArm,aes(L_Rank,L_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank Avg Zscore vs lm L") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(L_lm2$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(K_Rank,K_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank Avg Zscore vs lm K") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(K_lm2$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(r_Rank,r_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank Avg Zscore vs lm r") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(r_lm2$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(AUC_Rank,AUC_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank of Avg Zscore vs lm AUC") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(AUC_lm2$r.squared,2))) + theme_Publication_legend_right()) + + + + dev.off() + + + + Rank_L_1SD <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_L >= 1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_L >= 2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_L >= 3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_K <= -1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_K <= -2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_K <= -3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + pdf(paste(outputpath,"RankPlots_naRM.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD,Rank_L_2SD,Rank_L_3SD,Rank_K_1SD,Rank_K_2SD,Rank_K_3SD,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext,Rank_L_2SD_notext,Rank_L_3SD_notext,Rank_K_1SD_notext,Rank_K_2SD_notext,Rank_K_3SD_notext,ncol=3,nrow=2) + + dev.off() + + + Rank_L_1SD_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_L >= 1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_L >= 2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_L >= 3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_K <= -1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_K <= -2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_K <= -3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + pdf(paste(outputpath,"RankPlots_lm_naRM.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD_lm,Rank_L_2SD_lm,Rank_L_3SD_lm,Rank_K_1SD_lm,Rank_K_2SD_lm,Rank_K_3SD_lm,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext_lm,Rank_L_2SD_notext_lm,Rank_L_3SD_notext_lm,Rank_K_1SD_notext_lm,Rank_K_2SD_notext_lm,Rank_K_3SD_notext_lm,ncol=3,nrow=2) + + dev.off() + +} + + + +#get the linear model info and the r-squared value for all CPPs in results 1 vs results 2 +get_lm_1 <- lm(X_NArm$Z_lm_K~X_NArm$Z_lm_L) +L_lm_1 <- summary(get_lm_1) + +get_lm_2 <- lm(X_NArm$Z_lm_r~X_NArm$Z_lm_L) +L_lm_2 <- summary(get_lm_2) + +get_lm_3 <- lm(X_NArm$Z_lm_AUC~X_NArm$Z_lm_L) +L_lm_3 <- summary(get_lm_3) + +get_lm_4 <- lm(X_NArm$Z_lm_r~X_NArm$Z_lm_K) +L_lm_4 <- summary(get_lm_4) + +get_lm_5 <- lm(X_NArm$Z_lm_AUC~X_NArm$Z_lm_K) +L_lm_5 <- summary(get_lm_5) + +get_lm_6 <- lm(X_NArm$Z_lm_AUC~X_NArm$Z_lm_r) +L_lm_6 <- summary(get_lm_6) + + +pdf(file=paste(outputpath,"Correlation_CPPs.pdf",sep=""),width = 10, height = 7, onefile = TRUE) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_K)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction L vs. Interaction K") + + xlab("z-score L") + ylab("z-score K") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_1$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction L vs. Interaction r") + + xlab("z-score L") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_2$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction L vs. Interaction AUC") + + xlab("z-score L") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_3$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction K vs. Interaction r") + + xlab("z-score K") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_4$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction K vs. Interaction AUC") + + xlab("z-score K") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_5$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_r,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction r vs. Interaction AUC") + + xlab("z-score r") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_6$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +InteractionScores_RF2 <- InteractionScores_RF[!is.na(InteractionScores_RF$Z_lm_L),] +ggplot(X_NArm,aes(Z_lm_L,Z_lm_K)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_L,Z_lm_K),color="cyan") + + ggtitle("Interaction L vs. Interaction K") + + xlab("z-score L") + ylab("z-score K") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_1$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_L,Z_lm_r),color="cyan") + + ggtitle("Interaction L vs. Interaction r") + + xlab("z-score L") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_2$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_L,Z_lm_AUC),color="cyan") + + ggtitle("Interaction L vs. Interaction AUC") + + xlab("z-score L") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_3$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_K,Z_lm_r),color="cyan") + + ggtitle("Interaction K vs. Interaction r") + + xlab("z-score K") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_4$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_K,Z_lm_AUC),color="cyan") + + ggtitle("Interaction K vs. Interaction AUC") + + xlab("z-score K") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_5$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_r,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_r,Z_lm_AUC),color="cyan") + + ggtitle("Interaction r vs. Interaction AUC") + + xlab("z-score r") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_6$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + + + + + +dev.off() + + +#write.csv(Labels,file=paste("../Code/Parameters.csv"),row.names = FALSE) +timestamp() + +#BoneYard*********************************************** +#I'm thinking this parameter needs to be save somewhere "permanent' for the record so outputs can be reproduced. +#take this out of the Arguments. In Matlab I could for future in .mat file. Maybe I could save the SD Args[2] as part of the StudyInfo.txt. +#Corruptable but better than nothing. +#if(is.na(Args[2])){ +# std=3 +#}else { +# std= Arg[2] +#Delta_Background_sdFactor <- 2 #Args[3] +#DelBGFactr <- as.numeric(Delta_Background_sdFactor) +#} + diff --git a/workflow/.old/templates/qhtcp/Exp3/.DS_Store b/workflow/.old/templates/qhtcp/Exp3/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ccdc65b6102c7bfbf585ab506f1e24c5f7f4bb9f GIT binary patch literal 6148 zcmeI0F;2rk5Jmr(ND0tHG*Hq}r%OQrkvV}oL;eWc6I_lR-1eQ%mK`xG1|u<9OtJ;6z&`V5I@HT73#dsiq!S8 zjWNP!H${p&WLUSKpDSp0Yp8fwB$+EK|4X8`mwra+;y5i_%6I1LtUmuZ{=6K@%72kn zJ+@bSS3lQCkip>z_sy%;SnUjTtSZxPM%(Jq&Fk{VYG zQNu9)9PSUNdbY5Vz-{}p!j|At}wV`LI1@yZw7VOVQf fPjAC8YjFD@K$=59q<= Delta_Background_Tolerance,] + +X_Delta_Backgrd_above_Tolerance_K_halfmedian <- (median(X_Delta_Backgrd_above_Tolerance$K,na.rm = TRUE))/2 +X_Delta_Backgrd_above_Tolerance_L_halfmedian <- (median(X_Delta_Backgrd_above_Tolerance$l,na.rm = TRUE))/2 +X_Delta_Backgrd_above_Tolerance_toRemove <- dim(X_Delta_Backgrd_above_Tolerance)[1] + +X_Delta_Backgrd_above_Tolerance_L_vs_K <- ggplot(X_Delta_Backgrd_above_Tolerance,aes(l,K,color=as.factor(Conc_Num))) + geom_point(aes(ORF=ORF,Gene=Gene,Delta_Backgrd=Delta_Backgrd),shape=3) + + ggtitle(paste("Raw L vs K for strains above delta background threshold of",Delta_Background_Tolerance,"or above")) + + annotate("text",x=X_Delta_Backgrd_above_Tolerance_L_halfmedian,y=X_Delta_Backgrd_above_Tolerance_K_halfmedian, + label = paste("Strains above delta background tolerance = ",X_Delta_Backgrd_above_Tolerance_toRemove)) + + theme_Publication_legend_right() +pdf(paste(outputpath_QC,"Raw_L_vs_K_for_strains_above_deltabackgrd_threshold.pdf",sep=""),width = 12,height = 8) +X_Delta_Backgrd_above_Tolerance_L_vs_K +dev.off() +pgg <- ggplotly(X_Delta_Backgrd_above_Tolerance_L_vs_K) +#pgg +plotly_path <- paste(getwd(),"/",outputpath_QC,"Raw_L_vs_K_for_strains_above_deltabackgrd_threshold.html",sep="") +saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + +#frequency plot for all data vs. the delta_background +DeltaBackground_Frequency_Plot <- ggplot(X,aes(Delta_Backgrd,color=as.factor(Conc_Num))) + geom_density() + + ggtitle("Density plot for Delta Background by Conc All Data") + theme_Publication_legend_right() + +#bar plot for all data vs. the delta_background +DeltaBackground_Bar_Plot <- ggplot(X,aes(Delta_Backgrd,color=as.factor(Conc_Num))) + geom_bar() + + ggtitle("Bar plot for Delta Background by Conc All Data") + theme_Publication_legend_right() + +pdf(file = paste(outputpath_QC,"Frequency_Delta_Background.pdf",sep=""),width = 12,height = 8) +print(DeltaBackground_Frequency_Plot) +print(DeltaBackground_Bar_Plot) +dev.off() + + +#Need to identify missing data, and differentiate between this data and removed data so the removed data can get set to NA and the missing data can get set to max theoretical values +#1 for missing data, 0 for non missing data +#Use "NG" for NoGrowth rather than "missing" +X$NG <- 0 +try(X[X$l == 0 & !is.na(X$l),]$NG <- 1) + +#1 for removed data, 0 non removed data +#Use DB to identify number of genes removed due to the DeltaBackground Threshold rather than "Removed" +X$DB <- 0 +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$DB <- 1) + +#replace the CPPs for l, r, AUC and K (must be last!) for removed data +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$l <- NA) +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$r <- NA) +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$AUC <- NA) +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$K <- NA) + + +Plate_Analysis_L_afterQC <- ggplot(X,aes(Scan,l,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_afterQC <- ggplot(X,aes(Scan,K,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_afterQC <- ggplot(X,aes(Scan,r,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_afterQC <- ggplot(X,aes(Scan,AUC,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_afterQC <- ggplot(X,aes(Scan,Delta_Backgrd,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + + +Plate_Analysis_L_Box_afterQC <- ggplot(X,aes(as.factor(Scan),l,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_Box_afterQC <- ggplot(X,aes(as.factor(Scan),K,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_Box_afterQC <- ggplot(X,aes(as.factor(Scan),r,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_Box_afterQC <- ggplot(X,aes(as.factor(Scan),AUC,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_Box_afterQC <- ggplot(X,aes(as.factor(Scan),Delta_Backgrd,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis.pdf",sep=""),width = 14,height=9) +Plate_Analysis_L +Plate_Analysis_L_afterQC +Plate_Analysis_K +Plate_Analysis_K_afterQC +Plate_Analysis_r +Plate_Analysis_r_afterQC +Plate_Analysis_AUC +Plate_Analysis_AUC_afterQC +Plate_Analysis_Delta_Backgrd +Plate_Analysis_Delta_Backgrd_afterQC +dev.off() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis_Boxplots.pdf",sep=""),width = 18,height=9) +Plate_Analysis_L_Box +Plate_Analysis_L_Box_afterQC +Plate_Analysis_K_Box +Plate_Analysis_K_Box_afterQC +Plate_Analysis_r_Box +Plate_Analysis_r_Box_afterQC +Plate_Analysis_AUC_Box +Plate_Analysis_AUC_Box_afterQC +Plate_Analysis_Delta_Backgrd_Box +Plate_Analysis_Delta_Backgrd_Box_afterQC +dev.off() + +#remove the zero values and print plate analysis +X_noZero <- X[which(X$l > 0),] +Plate_Analysis_L_afterQC_Z <- ggplot(X_noZero,aes(Scan,l,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_afterQC_Z <- ggplot(X_noZero,aes(Scan,K,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_afterQC_Z <- ggplot(X_noZero,aes(Scan,r,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_afterQC_Z <- ggplot(X_noZero,aes(Scan,AUC,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_afterQC_Z <- ggplot(X_noZero,aes(Scan,Delta_Backgrd,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + + +Plate_Analysis_L_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),l,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),K,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),r,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),AUC,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),Delta_Backgrd,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis_noZeros.pdf",sep=""),width = 14,height=9) +Plate_Analysis_L_afterQC_Z +Plate_Analysis_K_afterQC_Z +Plate_Analysis_r_afterQC_Z +Plate_Analysis_AUC_afterQC_Z +Plate_Analysis_Delta_Backgrd_afterQC_Z +dev.off() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis_noZeros_Boxplots.pdf",sep=""),width = 18,height=9) +Plate_Analysis_L_Box_afterQC_Z +Plate_Analysis_K_Box_afterQC_Z +Plate_Analysis_r_Box_afterQC_Z +Plate_Analysis_AUC_Box_afterQC_Z +Plate_Analysis_Delta_Backgrd_Box_afterQC_Z +dev.off() + +#remove dataset with zeros removed +rm(X_noZero) + + +#X_test_missing_and_removed <- X[X$Removed == 1,] + +#calculate summary statistics for all strains, including both background and the deletions +X_stats_ALL <- ddply(X, c("Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_AUC = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + se_AUC = sd_AUC / sqrt(N-1) +) +#print(X_stats_ALL_L) + +write.csv(X_stats_ALL,file=paste(outputpath,"SummaryStats_ALLSTRAINS.csv"),row.names = FALSE) +#+++++END QC SECTION+++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +##### Part 3 - Generate summary statistics and calculate the max theoretical L value +##### Calculate the Z score at each drug conc for each deletion strain + + +#get the background strains - can be modified to take another argument but for most screens will just be YDL227C +Background_Strains <- c("YDL227C") + +#first part of loop will go through for each background strain +#most cases there will only be one YDL227C +for(s in Background_Strains){ + X_Background <- X[X$OrfRep == s,] + + #if there's missing data for the background strains set these values to NA so the 0 values aren't included in summary statistics + #we may want to consider in some cases giving the max high value to L depending on the data type + if(table(X_Background$l)[1] == 0){ + X_Background[X_Background$l == 0,]$l <- NA + X_Background[X_Background$K == 0,]$K <- NA + X_Background[X_Background$r == 0,]$r <- NA + X_Background[X_Background$AUC == 0,]$AUC <- NA + } + + X_Background <- X_Background[!is.na(X_Background$l),] + + #get summary stats for L, K, R, AUC + X_stats_BY_L <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean = mean(l,na.rm=TRUE), + median = median(l,na.rm=TRUE), + max = max(l,na.rm=TRUE), + min = min(l,na.rm=TRUE), + sd = sd(l,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + print(X_stats_BY_L) + X1_SD <- max(X_stats_BY_L$sd) + + X_stats_BY_K <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(K)), + mean = mean(K,na.rm=TRUE), + median = median(K,na.rm=TRUE), + max = max(K,na.rm=TRUE), + min = min(K,na.rm=TRUE), + sd = sd(K,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + + X1_SD_K <- max(X_stats_BY_K$sd) + + + X_stats_BY_r <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = length(r), + mean = mean(r,na.rm=TRUE), + median = median(r,na.rm=TRUE), + max = max(r,na.rm=TRUE), + min = min(r,na.rm=TRUE), + sd = sd(r,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + + X1_SD_r <- max(X_stats_BY_r$sd) + + X_stats_BY_AUC <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = length(AUC), + mean = mean(AUC,na.rm=TRUE), + median = median(AUC,na.rm=TRUE), + max = max(AUC,na.rm=TRUE), + min = min(AUC,na.rm=TRUE), + sd = sd(AUC,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + + X1_SD_AUC <- max(X_stats_BY_AUC$sd) + + X_stats_BY <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_L = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + se_AUC = sd_AUC / sqrt(N-1) + ) + + write.csv(X_stats_BY,file=paste(outputpath,"SummaryStats_BackgroundStrains.csv"),row.names=FALSE) + + #calculate the max theoretical L values + #only look for max values when K is within 2SD of the ref strain + for(q in unique(X$Conc_Num_Factor)){ + if(q == 0){ + X_within_2SD_K <- X[X$Conc_Num_Factor == q,] + X_within_2SD_K <- X_within_2SD_K[!is.na(X_within_2SD_K$l),] + X_stats_TEMP_K <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_within_2SD_K <- X_within_2SD_K[X_within_2SD_K$K >= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])) ,] + X_within_2SD_K <- X_within_2SD_K[X_within_2SD_K$K <= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + + X_outside_2SD_K <- X[X$Conc_Num_Factor == q,] + X_outside_2SD_K <- X_outside_2SD_K[!is.na(X_outside_2SD_K$l),] + #X_outside_2SD_K_Temp <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_outside_2SD_K <- X_outside_2SD_K[X_outside_2SD_K$K <= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])) | X_outside_2SD_K$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + #X_outside_2SD_K <- X_outside_2SD_K[X_outside_2SD_K$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + + } + if(q > 0){ + X_within_2SD_K_temp <- X[X$Conc_Num_Factor == q,] + X_within_2SD_K_temp <- X_within_2SD_K_temp[!is.na(X_within_2SD_K_temp$l),] + X_stats_TEMP_K <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_within_2SD_K_temp <- X_within_2SD_K_temp[X_within_2SD_K_temp$K >= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])),] + X_within_2SD_K_temp <- X_within_2SD_K_temp[X_within_2SD_K_temp$K <= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])),] + X_within_2SD_K <- rbind(X_within_2SD_K,X_within_2SD_K_temp) + + X_outside_2SD_K_temp <- X[X$Conc_Num_Factor == q,] + X_outside_2SD_K_temp <- X_outside_2SD_K_temp[!is.na(X_outside_2SD_K_temp$l),] + #X_outside_2SD_K_Temp <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_outside_2SD_K_temp <- X_outside_2SD_K_temp[X_outside_2SD_K_temp$K <= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])) | X_outside_2SD_K_temp$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + #X_outside_2SD_K_temp <- X_outside_2SD_K_temp[X_outside_2SD_K_temp$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + X_outside_2SD_K <- rbind(X_outside_2SD_K,X_outside_2SD_K_temp) + } + } + + X_stats_BY_L_within_2SD_K <- ddply(X_within_2SD_K, c("Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean = mean(l), + median = median(l), + max = max(l,na.rm=TRUE), + min = min(l,na.rm=TRUE), + sd = sd(l), + se = sd / sqrt(N-1), + z_max = (max-mean)/sd + ) + print(X_stats_BY_L_within_2SD_K) + X1_SD_within_2SD_K <- max(X_stats_BY_L_within_2SD_K$sd) + write.csv(X_stats_BY_L_within_2SD_K,file=paste(outputpath_QC,"Max_Observed_L_Vals_for_spots_within_2SD_K.csv",sep=""),row.names=FALSE) + + X_stats_BY_L_outside_2SD_K <- ddply(X_outside_2SD_K, c("Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean = mean(l), + median = median(l), + max = max(l,na.rm=TRUE), + min = min(l,na.rm=TRUE), + sd = sd(l), + se = sd / sqrt(N-1) + ) + print(X_stats_BY_L_outside_2SD_K) + X1_SD_outside_2SD_K <- max(X_stats_BY_L_outside_2SD_K$sd) + + #X1_SD_outside_2SD_K <- X[X$l %in% X1_SD_within_2SD_K$l,] + Outside_2SD_K_L_vs_K <- ggplot(X_outside_2SD_K,aes(l,K,color=as.factor(Conc_Num))) + geom_point(aes(ORF=ORF,Gene=Gene,Delta_Backgrd=Delta_Backgrd),shape=3) + + ggtitle("Raw L vs K for strains falling outside 2SD of the K mean at each conc") + theme_Publication_legend_right() + pdf(paste(outputpath_QC,"Raw_L_vs_K_for_strains_2SD_outside_mean_K.pdf",sep=""),width = 10,height = 8) + print(Outside_2SD_K_L_vs_K) + dev.off() + pgg <- ggplotly(Outside_2SD_K_L_vs_K) + plotly_path <- paste(getwd(),"/",outputpath_QC,"RawL_vs_K_for_strains_outside_2SD_K.html",sep="") + saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + + Outside_2SD_K_delta_background_vs_K <- ggplot(X_outside_2SD_K,aes(Delta_Backgrd,K,color=as.factor(Conc_Num))) + geom_point(aes(l=l,ORF=ORF,Gene=Gene),shape=3,position="jitter") + + ggtitle("DeltaBackground vs K for strains falling outside 2SD of the K mean at each conc") + theme_Publication_legend_right() + pdf(paste(outputpath_QC,"DeltaBackground_vs_K_for_strains_2SD_outside_mean_K.pdf",sep=""),width = 10,height = 8) + Outside_2SD_K_delta_background_vs_K + dev.off() + pgg <- ggplotly(Outside_2SD_K_delta_background_vs_K) + #pgg + plotly_path <- paste(getwd(),"/",outputpath_QC,"DeltaBackground_vs_K_for_strains_outside_2SD_K.html",sep="") + saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + + #get the background strain mean values at the no drug conc to calculate shift + Background_L <- X_stats_BY_L$mean[1] + Background_K <- X_stats_BY_K$mean[1] + Background_r <- X_stats_BY_r$mean[1] + Background_AUC <- X_stats_BY_AUC$mean[1] + + #create empty plots for plotting element + p_l <- ggplot() + p_K <- ggplot() + p_r <- ggplot() + p_AUC <- ggplot() + + p_rf_l <- ggplot() + p_rf_K <- ggplot() + p_rf_r <- ggplot() + p_rf_AUC <- ggplot() + + #get only the deletion strains + X2 <- X + X2 <- X2[X2$OrfRep != "YDL227C",] + + #if set to max theoretical value, add a 1 to SM, if not, leave as 0 + #SM = Set to Max + X2$SM <- 0 + #set the missing values to the highest theoretical value at each drug conc for L, leave other values as 0 for the max/min + for(i in 1:length(unique(X2$Conc_Num))){ + Concentration <- unique(X2$Conc_Num)[i] + X2_temp <- X2[X2$Conc_Num == Concentration,] + if(Concentration == 0){ + X2_new <- X2_temp + print(paste("Check loop order, conc =",Concentration,sep=" ")) + } + if(Concentration > 0){ + try(X2_temp[X2_temp$l == 0 & !is.na(X2_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + try(X2_temp[X2_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_temp$l),]$SM <- 1) + try(X2_temp[X2_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + + #X2_temp[X2_temp$K == 0,]$K <- X_stats_ALL_K$max[i] + #X2_temp[X2_temp$r == 0,]$r <- X_stats_ALL_r$max[i] + #X2_temp[X2_temp$AUC == 0,]$AUC <- X_stats_ALL_AUC$max[i] + print(paste("Check loop order, conc =",Concentration,sep=" ")) + + X2_new <- rbind(X2_new,X2_temp) + + } + } + X2 <- X2_new + + + #get only the RF strains + X2_RF <- X + X2_RF <- X2_RF[X2_RF$OrfRep == "YDL227C",] + #if set to max theoretical value, add a 1 to SM, if not, leave as 0 + #SM = Set to Max + X2_RF$SM <- 0 + #set the missing values to the highest theoretical value at each drug conc for L, leave other values as 0 for the max/min + for(i in 1:length(unique(X2_RF$Conc_Num))){ + Concentration <- unique(X2_RF$Conc_Num)[i] + X2_RF_temp <- X2_RF[X2_RF$Conc_Num == Concentration,] + if(Concentration == 0){ + X2_RF_new <- X2_RF_temp + print(paste("Check loop order, conc =",Concentration,sep=" ")) + } + if(Concentration > 0){ + try(X2_RF_temp[X2_RF_temp$l == 0 & !is.na(X2_RF_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + try(X2_temp[X2_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_temp$l),]$SM <- 1) + try(X2_RF_temp[X2_RF_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_RF_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + print(paste("Check loop order, if error, refs have no L values outside theoretical max L, for REFs, conc =",Concentration,sep=" ")) + + X2_RF_new <- rbind(X2_RF_new,X2_RF_temp) + + } + } + X2_RF <- X2_RF_new + + + #######Part 4 Get the RF Z score values + #Change the OrfRep Column to include the RF strain, the Gene name and the Num. so each RF gets its own score + X2_RF$OrfRep <- paste(X2_RF$OrfRep,X2_RF$Gene,X2_RF$Num.,sep="_") + + num_genes_RF <- length(unique(X2_RF$OrfRep)) + print(num_genes_RF) + + + #create the output data.frame containing columns for each RF strain + InteractionScores_RF <- unique(X2_RF["OrfRep"]) + #InteractionScores_RF$Gene <- unique(X2$Gene) + InteractionScores_RF$Gene <- NA + InteractionScores_RF$Raw_Shift_L <- NA + InteractionScores_RF$Z_Shift_L <- NA + InteractionScores_RF$lm_Score_L <- NA + InteractionScores_RF$Z_lm_L <- NA + InteractionScores_RF$R_Squared_L <- NA + InteractionScores_RF$Sum_Z_Score_L <- NA + InteractionScores_RF$Avg_Zscore_L <- NA + InteractionScores_RF$Raw_Shift_K <- NA + InteractionScores_RF$Z_Shift_K <- NA + InteractionScores_RF$lm_Score_K <- NA + InteractionScores_RF$Z_lm_K <- NA + InteractionScores_RF$R_Squared_K <- NA + InteractionScores_RF$Sum_Z_Score_K <- NA + InteractionScores_RF$Avg_Zscore_K <- NA + InteractionScores_RF$Raw_Shift_r <- NA + InteractionScores_RF$Z_Shift_r <- NA + InteractionScores_RF$lm_Score_r <- NA + InteractionScores_RF$Z_lm_r <- NA + InteractionScores_RF$R_Squared_r <- NA + InteractionScores_RF$Sum_Z_Score_r <- NA + InteractionScores_RF$Avg_Zscore_r <- NA + InteractionScores_RF$Raw_Shift_AUC <- NA + InteractionScores_RF$Z_Shift_AUC <- NA + InteractionScores_RF$lm_Score_AUC <- NA + InteractionScores_RF$Z_lm_AUC <- NA + InteractionScores_RF$R_Squared_AUC <- NA + InteractionScores_RF$Sum_Z_Score_AUC <- NA + InteractionScores_RF$Avg_Zscore_AUC <- NA + InteractionScores_RF$NG <- NA + InteractionScores_RF$SM <- NA + + + for(i in 1:num_genes_RF){ + #get each deletion strain ORF + Gene_Sel <- unique(X2_RF$OrfRep)[i] + #extract only the current deletion strain and its data + X_Gene_Sel <- X2_RF[X2_RF$OrfRep == Gene_Sel,] + + X_stats_interaction <- ddply(X_Gene_Sel, c("OrfRep","Gene","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm = TRUE), + median_L = median(l,na.rm = TRUE), + sd_L = sd(l,na.rm = TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm = TRUE), + median_K = median(K,na.rm = TRUE), + sd_K = sd(K,na.rm = TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm = TRUE), + median_r = median(r,na.rm = TRUE), + sd_r = sd(r,na.rm = TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm = TRUE), + median_AUC = median(AUC,na.rm = TRUE), + sd_AUC = sd(AUC,na.rm = TRUE), + se_AUC = sd_AUC / sqrt(N-1), + NG = sum(NG,na.rm=TRUE), + DB= sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + #Get shift vals + #if L is 0, that means the no growth on no drug + #if L is NA at 0, that means the spot was removed due to contamination + #if L is 0, keep the shift at 0 and for other drug concs calculate delta Ls with no shift + #otherwise calculate shift at no drug conc + if(is.na(X_stats_interaction$mean_L[1]) | X_stats_interaction$mean_L[1] == 0 ){ + X_stats_interaction$Raw_Shift_L <- 0 + X_stats_interaction$Raw_Shift_K <- 0 + X_stats_interaction$Raw_Shift_r <- 0 + X_stats_interaction$Raw_Shift_AUC <- 0 + X_stats_interaction$Z_Shift_L <- 0 + X_stats_interaction$Z_Shift_K <- 0 + X_stats_interaction$Z_Shift_r <- 0 + X_stats_interaction$Z_Shift_AUC <- 0 + }else{ + X_stats_interaction$Raw_Shift_L <- X_stats_interaction$mean_L[1] - Background_L + X_stats_interaction$Raw_Shift_K <- X_stats_interaction$mean_K[1] - Background_K + X_stats_interaction$Raw_Shift_r <- X_stats_interaction$mean_r[1] - Background_r + X_stats_interaction$Raw_Shift_AUC <- X_stats_interaction$mean_AUC[1] - Background_AUC + X_stats_interaction$Z_Shift_L <- X_stats_interaction$Raw_Shift_L[1]/X_stats_BY_L$sd[1] + X_stats_interaction$Z_Shift_K <- X_stats_interaction$Raw_Shift_K[1]/X_stats_BY_K$sd[1] + X_stats_interaction$Z_Shift_r <- X_stats_interaction$Raw_Shift_r[1]/X_stats_BY_r$sd[1] + X_stats_interaction$Z_Shift_AUC <- X_stats_interaction$Raw_Shift_AUC[1]/X_stats_BY_AUC$sd[1] + } + + + #get WT vals + X_stats_interaction$WT_l <- X_stats_BY_L$mean + X_stats_interaction$WT_K <- X_stats_BY_K$mean + X_stats_interaction$WT_r <- X_stats_BY_r$mean + X_stats_interaction$WT_AUC <- X_stats_BY_AUC$mean + + #Get WT SD + X_stats_interaction$WT_sd_l <- X_stats_BY_L$sd + X_stats_interaction$WT_sd_K <- X_stats_BY_K$sd + X_stats_interaction$WT_sd_r <- X_stats_BY_r$sd + X_stats_interaction$WT_sd_AUC <- X_stats_BY_AUC$sd + + + #only get scores if there's growth at no drug + if(X_stats_interaction$mean_L[1] != 0 & !is.na(X_stats_interaction$mean_L[1])){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for no growth values in Z score calculation + if(sum(X_stats_interaction$NG,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #get linear model + gene_lm_L <- lm(formula = Delta_L ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_K <- lm(formula = Delta_K ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_r <- lm(formula = Delta_r ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_AUC <- lm(formula = Delta_AUC ~ Conc_Num_Factor,data = X_stats_interaction) + + #get interaction score calculated by linear model and R-squared value for the fit + gene_interaction_L <- MAX_CONC*(gene_lm_L$coefficients[2]) + gene_lm_L$coefficients[1] + r_squared_l <- summary(gene_lm_L)$r.squared + gene_interaction_K <- MAX_CONC*(gene_lm_K$coefficients[2]) + gene_lm_K$coefficients[1] + r_squared_K <- summary(gene_lm_K)$r.squared + gene_interaction_r <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_r$coefficients[1] + r_squared_r <- summary(gene_lm_r)$r.squared + gene_interaction_AUC <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_AUC$coefficients[1] + r_squared_AUC <- summary(gene_lm_AUC)$r.squared + + #Get total of non removed values + Num_non_Removed_Conc <- Total_Conc_Nums - sum(X_stats_interaction$DB,na.rm = TRUE) - 1 + + #report the scores + InteractionScores_RF$OrfRep[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$OrfRep[1] + InteractionScores_RF$Gene[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$Gene[1] + + InteractionScores_RF$Raw_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores_RF$Z_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores_RF$lm_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_L + InteractionScores_RF$R_Squared_L[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores_RF$Sum_Z_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_L[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE)/(Num_non_Removed_Conc) + + + InteractionScores_RF$Raw_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores_RF$Z_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores_RF$lm_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_K + InteractionScores_RF$R_Squared_K[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores_RF$Sum_Z_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_K[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE)/(Num_non_Removed_Conc) + + InteractionScores_RF$Raw_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores_RF$Z_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores_RF$lm_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_r + InteractionScores_RF$R_Squared_r[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores_RF$Sum_Z_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_r[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE)/(Total_Conc_Nums-1) + + InteractionScores_RF$Raw_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores_RF$Z_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores_RF$lm_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_AUC + InteractionScores_RF$R_Squared_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores_RF$Sum_Z_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE)/(Total_Conc_Nums-1) + } + + if(X_stats_interaction$mean_L[1] == 0 | is.na(X_stats_interaction$mean_L[1]) ){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for missing values in Z score calculatiom + if(sum(X_stats_interaction$NG,na.rm = TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #NA values for the next part since there's an NA or 0 at the no drug. + gene_lm_L <- NA + gene_lm_K <- NA + gene_lm_r <- NA + gene_lm_AUC <- NA + + gene_interaction_L <- NA + r_squared_l <- NA + gene_interaction_K <- NA + r_squared_K <- NA + gene_interaction_r <- NA + r_squared_r <- NA + gene_interaction_AUC <- NA + r_squared_AUC <- NA + + X_stats_interaction$Raw_Shift_L <- NA + X_stats_interaction$Raw_Shift_K <- NA + X_stats_interaction$Raw_Shift_r <- NA + X_stats_interaction$Raw_Shift_AUC <- NA + + X_stats_interaction$Z_Shift_L <- NA + X_stats_interaction$Z_Shift_K <- NA + X_stats_interaction$Z_Shift_r <- NA + X_stats_interaction$Z_Shift_AUC <- NA + + InteractionScores_RF$OrfRep[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$OrfRep[1] + InteractionScores_RF$Gene[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$Gene[1] + + InteractionScores_RF$Raw_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores_RF$Z_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores_RF$lm_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_L + InteractionScores_RF$R_Squared_L[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores_RF$Sum_Z_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_L[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + + InteractionScores_RF$Raw_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores_RF$Z_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores_RF$lm_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_K + InteractionScores_RF$R_Squared_K[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores_RF$Sum_Z_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_K[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + + InteractionScores_RF$Raw_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores_RF$Z_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores_RF$lm_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_r + InteractionScores_RF$R_Squared_r[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores_RF$Sum_Z_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_r[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + + InteractionScores_RF$Raw_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores_RF$Z_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores_RF$lm_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_AUC + InteractionScores_RF$R_Squared_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores_RF$Sum_Z_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + } + + if(i == 1){ + X_stats_interaction_ALL_RF <- X_stats_interaction + } + if(i > 1){ + X_stats_interaction_ALL_RF <- rbind(X_stats_interaction_ALL_RF,X_stats_interaction) + } + + InteractionScores_RF$NG[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$NG,na.rm = TRUE) + InteractionScores_RF$DB[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$DB,na.rm = TRUE) + InteractionScores_RF$SM[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$SM,na.rm = TRUE) + + #X_stats_L_int_temp <- rbind(X_stats_L_int_temp,X_stats_L_int) + + + } + print("Pass RF Calculation loop") + + lm_sd_L <- sd(InteractionScores_RF$lm_Score_L,na.rm=TRUE) + lm_sd_K <- sd(InteractionScores_RF$lm_Score_K,na.rm=TRUE) + lm_sd_r <- sd(InteractionScores_RF$lm_Score_r,na.rm=TRUE) + lm_sd_AUC <- sd(InteractionScores_RF$lm_Score_AUC,na.rm=TRUE) + + lm_mean_L <- mean(InteractionScores_RF$lm_Score_L,na.rm=TRUE) + lm_mean_K <- mean(InteractionScores_RF$lm_Score_K,na.rm=TRUE) + lm_mean_r <- mean(InteractionScores_RF$lm_Score_r,na.rm=TRUE) + lm_mean_AUC <- mean(InteractionScores_RF$lm_Score_AUC,na.rm=TRUE) + + print(paste("Mean RF linear regression score L",lm_mean_L)) + + + InteractionScores_RF$Z_lm_L <- (InteractionScores_RF$lm_Score_L - lm_mean_L)/(lm_sd_L) + InteractionScores_RF$Z_lm_K <- (InteractionScores_RF$lm_Score_K - lm_mean_K)/(lm_sd_K) + InteractionScores_RF$Z_lm_r <- (InteractionScores_RF$lm_Score_r - lm_mean_r)/(lm_sd_r) + InteractionScores_RF$Z_lm_AUC <- (InteractionScores_RF$lm_Score_AUC - lm_mean_AUC)/(lm_sd_AUC) + + + InteractionScores_RF <- InteractionScores_RF[order(InteractionScores_RF$Z_lm_L,decreasing=TRUE),] + InteractionScores_RF <- InteractionScores_RF[order(InteractionScores_RF$NG,decreasing=TRUE),] + write.csv(InteractionScores_RF,paste(outputpath,"RF_ZScores_Interaction.csv",sep=""),row.names=FALSE) + + + for(i in 1:num_genes_RF){ + Gene_Sel <- unique(InteractionScores_RF$OrfRep)[i] + X_ZCalculations <- X_stats_interaction_ALL_RF[X_stats_interaction_ALL_RF$OrfRep == Gene_Sel,] + X_Int_Scores <- InteractionScores_RF[InteractionScores_RF$OrfRep == Gene_Sel,] + + p_rf_l[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_L)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_l), ymax=0+(2*WT_sd_l)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_L,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg Zscore =",round(X_Int_Scores$Avg_Zscore_L,2))) + + annotate("text",x=1,y=25,label = paste("lm Zscore =",round(X_Int_Scores$Z_lm_L,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_rf_K[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_K)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_K), ymax=0+(2*WT_sd_K)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_K,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_K,2))) + + annotate("text",x=1,y=25,label = paste("lm ZScore =",round(X_Int_Scores$Z_lm_L,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_rf_r[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_r)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-0.65,0.65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_r), ymax=0+(2*WT_sd_r)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=0.45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_r,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=0.35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_r,2))) + + annotate("text",x=1,y=0.25,label = paste("lm ZScore =",round(X_Int_Scores$Z_lm_r,2))) + + annotate("text",x=1,y=-0.25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-0.35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-0.45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-0.6,-0.4,-0.2,0,0.2,0.4,0.6)) + + theme_Publication() + + p_rf_AUC[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_AUC)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-6500,6500)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_AUC), ymax=0+(2*WT_sd_AUC)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=4500,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_AUC,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=3500,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_AUC,2))) + + annotate("text",x=1,y=2500,label = paste("lm ZScore =",round(X_Int_Scores$Z_lm_AUC,2))) + + annotate("text",x=1,y=-2500,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-3500,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-4500,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-6000,-5000,-4000,-3000,-2000,-1000,0,1000,2000,3000,4000,5000,6000)) + + theme_Publication() + + + + if(i == 1){ + X_stats_interaction_ALL_RF_final <- X_ZCalculations + } + if(i > 1){ + X_stats_interaction_ALL_RF_final <- rbind(X_stats_interaction_ALL_RF_final,X_ZCalculations) + } + } + print("Pass RF ggplot loop") + write.csv(X_stats_interaction_ALL_RF_final,paste(outputpath,"RF_ZScore_Calculations.csv",sep=""),row.names = FALSE) + + + ####### Part 5 - Get Zscores for Gene deletion strains + + + + #get total number of genes for the next loop + num_genes <- length(unique(X2$OrfRep)) + print(num_genes) + + #create the output data.frame containing columns for each deletion strain + InteractionScores <- unique(X2["OrfRep"]) + #InteractionScores$Gene <- unique(X2$Gene) + InteractionScores$Gene <- NA + InteractionScores$Raw_Shift_L <- NA + InteractionScores$Z_Shift_L <- NA + InteractionScores$lm_Score_L <- NA + InteractionScores$Z_lm_L <- NA + InteractionScores$R_Squared_L <- NA + InteractionScores$Sum_Z_Score_L <- NA + InteractionScores$Avg_Zscore_L <- NA + InteractionScores$Raw_Shift_K <- NA + InteractionScores$Z_Shift_K <- NA + InteractionScores$lm_Score_K <- NA + InteractionScores$Z_lm_K <- NA + InteractionScores$R_Squared_K <- NA + InteractionScores$Sum_Z_Score_K <- NA + InteractionScores$Avg_Zscore_K <- NA + InteractionScores$Raw_Shift_r <- NA + InteractionScores$Z_Shift_r <- NA + InteractionScores$lm_Score_r <- NA + InteractionScores$Z_lm_r <- NA + InteractionScores$R_Squared_r <- NA + InteractionScores$Sum_Z_Score_r <- NA + InteractionScores$Avg_Zscore_r <- NA + InteractionScores$Raw_Shift_AUC <- NA + InteractionScores$Z_Shift_AUC <- NA + InteractionScores$lm_Score_AUC <- NA + InteractionScores$Z_lm_AUC <- NA + InteractionScores$R_Squared_AUC <- NA + InteractionScores$Sum_Z_Score_AUC <- NA + InteractionScores$Avg_Zscore_AUC <- NA + InteractionScores$NG <- NA + InteractionScores$DB <- NA + InteractionScores$SM <- NA + + for(i in 1:num_genes){ + #get each deletion strain ORF + Gene_Sel <- unique(X2$OrfRep)[i] + #extract only the current deletion strain and its data + X_Gene_Sel <- X2[X2$OrfRep == Gene_Sel,] + + X_stats_interaction <- ddply(X_Gene_Sel, c("OrfRep","Gene","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm = TRUE), + median_L = median(l,na.rm = TRUE), + sd_L = sd(l,na.rm = TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm = TRUE), + median_K = median(K,na.rm = TRUE), + sd_K = sd(K,na.rm = TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm = TRUE), + median_r = median(r,na.rm = TRUE), + sd_r = sd(r,na.rm = TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm = TRUE), + median_AUC = median(AUC,na.rm = TRUE), + sd_AUC = sd(AUC,na.rm = TRUE), + se_AUC = sd_AUC / sqrt(N-1), + NG = sum(NG,na.rm=TRUE), + DB= sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + #Get shift vals + #if L is 0, that means the no growth on no drug + #if L is NA at 0, that means the spot was removed due to contamination + #if L is 0, keep the shift at 0 and for other drug concs calculate delta Ls with no shift + #otherwise calculate shift at no drug conc + if(is.na(X_stats_interaction$mean_L[1]) | X_stats_interaction$mean_L[1] == 0 ){ + X_stats_interaction$Raw_Shift_L <- 0 + X_stats_interaction$Raw_Shift_K <- 0 + X_stats_interaction$Raw_Shift_r <- 0 + X_stats_interaction$Raw_Shift_AUC <- 0 + X_stats_interaction$Z_Shift_L <- 0 + X_stats_interaction$Z_Shift_K <- 0 + X_stats_interaction$Z_Shift_r <- 0 + X_stats_interaction$Z_Shift_AUC <- 0 + }else{ + X_stats_interaction$Raw_Shift_L <- X_stats_interaction$mean_L[1] - Background_L + X_stats_interaction$Raw_Shift_K <- X_stats_interaction$mean_K[1] - Background_K + X_stats_interaction$Raw_Shift_r <- X_stats_interaction$mean_r[1] - Background_r + X_stats_interaction$Raw_Shift_AUC <- X_stats_interaction$mean_AUC[1] - Background_AUC + X_stats_interaction$Z_Shift_L <- X_stats_interaction$Raw_Shift_L[1]/X_stats_BY_L$sd[1] + X_stats_interaction$Z_Shift_K <- X_stats_interaction$Raw_Shift_K[1]/X_stats_BY_K$sd[1] + X_stats_interaction$Z_Shift_r <- X_stats_interaction$Raw_Shift_r[1]/X_stats_BY_r$sd[1] + X_stats_interaction$Z_Shift_AUC <- X_stats_interaction$Raw_Shift_AUC[1]/X_stats_BY_AUC$sd[1] + } + + + #get WT vals + X_stats_interaction$WT_l <- X_stats_BY_L$mean + X_stats_interaction$WT_K <- X_stats_BY_K$mean + X_stats_interaction$WT_r <- X_stats_BY_r$mean + X_stats_interaction$WT_AUC <- X_stats_BY_AUC$mean + + #Get WT SD + X_stats_interaction$WT_sd_l <- X_stats_BY_L$sd + X_stats_interaction$WT_sd_K <- X_stats_BY_K$sd + X_stats_interaction$WT_sd_r <- X_stats_BY_r$sd + X_stats_interaction$WT_sd_AUC <- X_stats_BY_AUC$sd + + + #only get scores if there's growth at no drug + if(X_stats_interaction$mean_L[1] != 0 & !is.na(X_stats_interaction$mean_L[1])){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for no growth values in Z score calculation + if(sum(X_stats_interaction$NG,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #get linear model + gene_lm_L <- lm(formula = Delta_L ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_K <- lm(formula = Delta_K ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_r <- lm(formula = Delta_r ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_AUC <- lm(formula = Delta_AUC ~ Conc_Num_Factor,data = X_stats_interaction) + + #get interaction score calculated by linear model and R-squared value for the fit + gene_interaction_L <- MAX_CONC*(gene_lm_L$coefficients[2]) + gene_lm_L$coefficients[1] + r_squared_l <- summary(gene_lm_L)$r.squared + gene_interaction_K <- MAX_CONC*(gene_lm_K$coefficients[2]) + gene_lm_K$coefficients[1] + r_squared_K <- summary(gene_lm_K)$r.squared + gene_interaction_r <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_r$coefficients[1] + r_squared_r <- summary(gene_lm_r)$r.squared + gene_interaction_AUC <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_AUC$coefficients[1] + r_squared_AUC <- summary(gene_lm_AUC)$r.squared + + #Get total of non removed values + Num_non_Removed_Conc <- Total_Conc_Nums - sum(X_stats_interaction$DB,na.rm = TRUE) - 1 + + #report the scores + InteractionScores$OrfRep[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$OrfRep[1]) + InteractionScores$Gene[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$Gene[1]) + + InteractionScores$Raw_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores$Z_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores$lm_Score_L[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_L + InteractionScores$Z_lm_L[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_L-lm_mean_L)/lm_sd_L + InteractionScores$R_Squared_L[InteractionScores$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores$Sum_Z_Score_L[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE) + InteractionScores$Avg_Zscore_L[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE)/(Num_non_Removed_Conc) + + + InteractionScores$Raw_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores$Z_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores$lm_Score_K[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_K + InteractionScores$Z_lm_K[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_K-lm_mean_K)/lm_sd_K + InteractionScores$R_Squared_K[InteractionScores$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores$Sum_Z_Score_K[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE) + InteractionScores$Avg_Zscore_K[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE)/(Num_non_Removed_Conc) + + InteractionScores$Raw_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores$Z_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores$lm_Score_r[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_r + InteractionScores$Z_lm_r[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_r-lm_mean_r)/lm_sd_r + InteractionScores$R_Squared_r[InteractionScores$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores$Sum_Z_Score_r[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE) + InteractionScores$Avg_Zscore_r[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE)/(Total_Conc_Nums-1) + + InteractionScores$Raw_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores$Z_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores$lm_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_AUC + InteractionScores$Z_lm_AUC[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_AUC-lm_mean_AUC)/lm_sd_AUC + InteractionScores$R_Squared_AUC[InteractionScores$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores$Sum_Z_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE) + InteractionScores$Avg_Zscore_AUC[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE)/(Total_Conc_Nums-1) + } + + if(X_stats_interaction$mean_L[1] == 0 | is.na(X_stats_interaction$mean_L[1]) ){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for missing values in Z score calculatiom + if(sum(X_stats_interaction$NG,na.rm = TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #NA values for the next part since there's an NA or 0 at the no drug. + gene_lm_L <- NA + gene_lm_K <- NA + gene_lm_r <- NA + + gene_interaction_L <- NA + r_squared_l <- NA + gene_interaction_K <- NA + r_squared_K <- NA + gene_interaction_r <- NA + r_squared_r <- NA + + X_stats_interaction$Raw_Shift_L <- NA + X_stats_interaction$Raw_Shift_K <- NA + X_stats_interaction$Raw_Shift_r <- NA + X_stats_interaction$Raw_Shift_AUC <- NA + + X_stats_interaction$Z_Shift_L <- NA + X_stats_interaction$Z_Shift_K <- NA + X_stats_interaction$Z_Shift_r <- NA + X_stats_interaction$Z_Shift_AUC <- NA + + InteractionScores$OrfRep[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$OrfRep[1]) + InteractionScores$Gene[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$Gene[1]) + + InteractionScores$Raw_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores$Z_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores$lm_Score_L[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_L[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$R_Squared_L[InteractionScores$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores$Sum_Z_Score_L[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_L[InteractionScores$OrfRep == Gene_Sel] <- NA + + InteractionScores$Raw_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores$Z_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores$lm_Score_K[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_K[InteractionScores$OrfRep == Gene_Sel] <-NA + InteractionScores$R_Squared_K[InteractionScores$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores$Sum_Z_Score_K[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_K[InteractionScores$OrfRep == Gene_Sel] <- NA + + InteractionScores$Raw_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores$Z_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores$lm_Score_r[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_r[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$R_Squared_r[InteractionScores$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores$Sum_Z_Score_r[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_r[InteractionScores$OrfRep == Gene_Sel] <- NA + + InteractionScores$Raw_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores$Z_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores$lm_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$R_Squared_AUC[InteractionScores$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores$Sum_Z_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + } + + if(i == 1){ + X_stats_interaction_ALL <- X_stats_interaction + } + if(i > 1){ + X_stats_interaction_ALL <- rbind(X_stats_interaction_ALL,X_stats_interaction) + } + + InteractionScores$NG[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$NG,na.rm = TRUE) + InteractionScores$DB[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$DB,na.rm = TRUE) + InteractionScores$SM[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$SM,na.rm = TRUE) + + #X_stats_L_int_temp <- rbind(X_stats_L_int_temp,X_stats_L_int) + + + } + print("Pass Int Calculation loop") + InteractionScores <- InteractionScores[order(InteractionScores$Z_lm_L,decreasing=TRUE),] + InteractionScores <- InteractionScores[order(InteractionScores$NG,decreasing=TRUE),] + df_order_by_OrfRep <- unique(InteractionScores$OrfRep) + #X_stats_interaction_ALL <- X_stats_interaction_ALL[order(X_stats_interaction_ALL$NG,decreasing=TRUE),] + write.csv(InteractionScores,paste(outputpath,"ZScores_Interaction.csv",sep=""),row.names=FALSE) + + InteractionScores_deletion_enhancers_L <- InteractionScores[InteractionScores$Avg_Zscore_L >= 2,] + InteractionScores_deletion_enhancers_K <- InteractionScores[InteractionScores$Avg_Zscore_K <= -2,] + InteractionScores_deletion_suppressors_L <- InteractionScores[InteractionScores$Avg_Zscore_L <= -2,] + InteractionScores_deletion_suppressors_K <- InteractionScores[InteractionScores$Avg_Zscore_K >= 2,] + InteractionScores_deletion_enhancers_and_Suppressors_L <- InteractionScores[InteractionScores$Avg_Zscore_L >= 2 | InteractionScores$Avg_Zscore_L <= -2,] + InteractionScores_deletion_enhancers_and_Suppressors_K <- InteractionScores[InteractionScores$Avg_Zscore_K >= 2 | InteractionScores$Avg_Zscore_K <= -2,] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L <- InteractionScores[InteractionScores$Z_lm_L >= 2 & InteractionScores$Avg_Zscore_L <= -2,] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L <- InteractionScores[InteractionScores$Z_lm_L <= -2 & InteractionScores$Avg_Zscore_L >= 2,] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K <- InteractionScores[InteractionScores$Z_lm_K <= -2 & InteractionScores$Avg_Zscore_K >= 2,] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K <- InteractionScores[InteractionScores$Z_lm_K >= 2 & InteractionScores$Avg_Zscore_K <= -2,] + + InteractionScores_deletion_enhancers_L <- InteractionScores_deletion_enhancers_L[!is.na(InteractionScores_deletion_enhancers_L$OrfRep),] + InteractionScores_deletion_enhancers_K <- InteractionScores_deletion_enhancers_K[!is.na(InteractionScores_deletion_enhancers_K$OrfRep),] + InteractionScores_deletion_suppressors_L <- InteractionScores_deletion_suppressors_L[!is.na(InteractionScores_deletion_suppressors_L$OrfRep),] + InteractionScores_deletion_suppressors_K <- InteractionScores_deletion_suppressors_K[!is.na(InteractionScores_deletion_suppressors_K$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_L <- InteractionScores_deletion_enhancers_and_Suppressors_L[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_L$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_K <- InteractionScores_deletion_enhancers_and_Suppressors_K[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_K$OrfRep),] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L <- InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L[!is.na(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L$OrfRep),] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L <- InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L[!is.na(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L$OrfRep),] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K <- InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K[!is.na(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K$OrfRep),] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K <- InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K[!is.na(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K$OrfRep),] + + write.csv(InteractionScores_deletion_enhancers_L,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_K,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_L,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_K,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_L,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_K,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L,paste(outputpath,"ZScores_Interaction_Suppressors_and_lm_Enhancers_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L,paste(outputpath,"ZScores_Interaction_Enhancers_and_lm_Suppressors_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K,paste(outputpath,"ZScores_Interaction_Suppressors_and_lm_Enhancers_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K,paste(outputpath,"ZScores_Interaction_Enhancers_and_lm_Suppressors_K.csv",sep=""),row.names=FALSE) + + #get enhancers and suppressors for linear regression + InteractionScores_deletion_enhancers_L_lm <- InteractionScores[InteractionScores$Z_lm_L >= 2,] + InteractionScores_deletion_enhancers_K_lm <- InteractionScores[InteractionScores$Z_lm_K <= -2,] + InteractionScores_deletion_suppressors_L_lm <- InteractionScores[InteractionScores$Z_lm_L <= -2,] + InteractionScores_deletion_suppressors_K_lm <- InteractionScores[InteractionScores$Z_lm_K >= 2,] + InteractionScores_deletion_enhancers_and_Suppressors_L_lm <- InteractionScores[InteractionScores$Z_lm_L >= 2 | InteractionScores$Z_lm_L <= -2,] + InteractionScores_deletion_enhancers_and_Suppressors_K_lm <- InteractionScores[InteractionScores$Z_lm_K >= 2 | InteractionScores$Z_lm_K <= -2,] + + InteractionScores_deletion_enhancers_L_lm <- InteractionScores_deletion_enhancers_L_lm[!is.na(InteractionScores_deletion_enhancers_L_lm$OrfRep),] + InteractionScores_deletion_enhancers_K_lm <- InteractionScores_deletion_enhancers_K_lm[!is.na(InteractionScores_deletion_enhancers_K_lm$OrfRep),] + InteractionScores_deletion_suppressors_L_lm <- InteractionScores_deletion_suppressors_L_lm[!is.na(InteractionScores_deletion_suppressors_L_lm$OrfRep),] + InteractionScores_deletion_suppressors_K_lm <- InteractionScores_deletion_suppressors_K_lm[!is.na(InteractionScores_deletion_suppressors_K_lm$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_L_lm <- InteractionScores_deletion_enhancers_and_Suppressors_L_lm[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_L_lm$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_K_lm <- InteractionScores_deletion_enhancers_and_Suppressors_K_lm[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_K_lm$OrfRep),] + + write.csv(InteractionScores_deletion_enhancers_L_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_L_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_K_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_K_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_L_lm,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_L_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_K_lm,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_K_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_L_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_L_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_K_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_K_lm.csv",sep=""),row.names=FALSE) + + + write.csv(Labels,file=paste("../Code/StudyInfo.csv"),row.names = FALSE) + print('ln 1570 write StudyInfo.csv after ') + #write.table(Labels,file=paste("../Code/StudyInfo.txt"),sep="\t",row.names = FALSE) + + for(i in 1:num_genes){ + Gene_Sel <- unique(InteractionScores$OrfRep)[i] + X_ZCalculations <- X_stats_interaction_ALL[X_stats_interaction_ALL$OrfRep == Gene_Sel,] + X_Int_Scores <- InteractionScores[InteractionScores$OrfRep == Gene_Sel,] + + p_l[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_L)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_l), ymax=0+(2*WT_sd_l)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_L,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_L,2))) + + annotate("text",x=1,y=25,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_L,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_K[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_K)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_K), ymax=0+(2*WT_sd_K)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_K,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_K,2))) + + annotate("text",x=1,y=25,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_K,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_r[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_r)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-0.65,0.65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_r), ymax=0+(2*WT_sd_r)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=0.45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_r,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=0.35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_r,2))) + + annotate("text",x=1,y=0.25,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_r,2))) + + annotate("text",x=1,y=-0.25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-0.35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-0.45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-0.6,-0.4,-0.2,0,0.2,0.4,0.6)) + + theme_Publication() + + p_AUC[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_AUC)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-6500,6500)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_AUC), ymax=0+(2*WT_sd_AUC)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=4500,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_AUC,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=3500,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_AUC,2))) + + annotate("text",x=1,y=2500,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_AUC,2))) + + annotate("text",x=1,y=-2500,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-3500,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-4500,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-6000,-5000,-4000,-3000,-2000,-1000,0,1000,2000,3000,4000,5000,6000)) + + theme_Publication() + + + + if(i == 1){ + X_stats_interaction_ALL_final <- X_ZCalculations + } + if(i > 1){ + X_stats_interaction_ALL_final <- rbind(X_stats_interaction_ALL_final,X_ZCalculations) + } + } + print("Pass Int ggplot loop") + write.csv(X_stats_interaction_ALL_final,paste(outputpath,"ZScore_Calculations.csv",sep=""),row.names = FALSE) + + + + + + + Blank <- ggplot(X2_RF) + geom_blank() + + pdf(paste(outputpath,"InteractionPlots.pdf",sep=""),width = 16, height = 16, onefile = TRUE) + + X_stats_X2_RF <- ddply(X2_RF, c("Conc_Num","Conc_Num_Factor"), summarise, + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_AUC = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + NG = sum(NG,na.rm=TRUE), + DB = sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + L_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,l)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,160)) + + annotate("text",x=-0.25,y=10,label="NG") + + annotate("text",x=-0.25,y=5,label="DB") + + annotate("text",x=-0.25,y=0,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=0,label=X_stats_X2_RF$SM) + + theme_Publication() + + K_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,K)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(-20,160)) + + annotate("text",x=-0.25,y=-5,label="NG") + + annotate("text",x=-0.25,y=-12.5,label="DB") + + annotate("text",x=-0.25,y=-20,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-5,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-12.5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-20,label=X_stats_X2_RF$SM) + + theme_Publication() + + R_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,r)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + annotate("text",x=-0.25,y=.9,label="NG") + + annotate("text",x=-0.25,y=.8,label="DB") + + annotate("text",x=-0.25,y=.7,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.9,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.8,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.7,label=X_stats_X2_RF$SM) + + theme_Publication() + + AUC_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,AUC)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(0,12500)) + + annotate("text",x=-0.25,y=11000,label="NG") + + annotate("text",x=-0.25,y=10000,label="DB") + + annotate("text",x=-0.25,y=9000,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=11000,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10000,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=9000,label=X_stats_X2_RF$SM) + + theme_Publication() + + + L_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),l)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,160)) + + theme_Publication() + + K_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),K)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(0,130)) + + theme_Publication() + + r_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),r)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + theme_Publication() + + AUC_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),AUC)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(0,12500)) + + theme_Publication() + + + grid.arrange(L_Stats,K_Stats,R_Stats,AUC_Stats,ncol=2,nrow=2) + grid.arrange(L_Stats_Box,K_Stats_Box,r_Stats_Box,AUC_Stats_Box,ncol=2,nrow=2) + + + + #plot the references + #grid.arrange(p3,p3_K,p3_r,p4,p4_K,p4_r,p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=4) + #grid.arrange(p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=2) + + #loop for grid arrange 4x3 + j <- rep(1,((num_genes)/3)-1) + for(n in 1:length(j)){ + j[n+1] <- n*3 + 1 + } + #loop for printing each plot + num <- 0 + for(m in 1:(round((num_genes)/3)-1)){ + num <- j[m] + grid.arrange(p_l[[num]],p_K[[num]],p_r[[num]],p_AUC[[num]],p_l[[num+1]],p_K[[num+1]],p_r[[num+1]],p_AUC[[num+1]],p_l[[num+2]],p_K[[num+2]],p_r[[num+2]],p_AUC[[num+2]],ncol=4,nrow=3) + #grid.arrange(p_l[[364]],p_K[[364]],p_r[[364]],p_l[[365]],p_K[[365]],p_r[[365]],p_l[[366]],p_K[[366]],p_r[[366]],ncol=3,nrow=3) + + + #p1[[num+3]],p_K[[num+3]],p_r[[num+3]],p1[[num+4]],p_K[[num+4]],p_r[[num+4]] + } + if(num_genes != (num+2)){ + total_num = num_genes - (num+2) + if(total_num == 5){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],p_l[[num+5]],p_K[[num+5]],p_r[[num+5]],p_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_AUC[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],p_AUC[[num+7]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + if(total_num == 4){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],p_l[[num+5]],p_K[[num+5]],p_r[[num+5]],p_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_AUC[[num+6]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + + if(total_num == 3){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],p_l[[num+5]],p_K[[num+5]],p_r[[num+5]],p_AUC[[num+5]],ncol=4,nrow=3) + #grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 2){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 1){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + } + dev.off() + + + + pdf(paste(outputpath,"RF_InteractionPlots.pdf",sep=""),width = 16, height = 16, onefile = TRUE) + + X_stats_X2_RF <- ddply(X2_RF, c("Conc_Num","Conc_Num_Factor"), summarise, + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_AUC = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + NG = sum(NG,na.rm=TRUE), + DB = sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + L_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,l)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,130)) + + annotate("text",x=-0.25,y=10,label="NG") + + annotate("text",x=-0.25,y=5,label="DB") + + annotate("text",x=-0.25,y=0,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=0,label=X_stats_X2_RF$SM) + + theme_Publication() + + K_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,K)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(-20,160)) + + annotate("text",x=-0.25,y=-5,label="NG") + + annotate("text",x=-0.25,y=-12.5,label="DB") + + annotate("text",x=-0.25,y=-20,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-5,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-12.5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-20,label=X_stats_X2_RF$SM) + + theme_Publication() + + R_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,r)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + annotate("text",x=-0.25,y=.9,label="NG") + + annotate("text",x=-0.25,y=.8,label="DB") + + annotate("text",x=-0.25,y=.7,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.9,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.8,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.7,label=X_stats_X2_RF$SM) + + theme_Publication() + + AUC_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,AUC)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(0,12500)) + + annotate("text",x=-0.25,y=11000,label="NG") + + annotate("text",x=-0.25,y=10000,label="DB") + + annotate("text",x=-0.25,y=9000,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=11000,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10000,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=9000,label=X_stats_X2_RF$SM) + + theme_Publication() + + + L_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),l)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,130)) + + theme_Publication() + + K_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),K)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(0,160)) + + theme_Publication() + + r_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),r)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + theme_Publication() + + AUC_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),AUC)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(12000,0)) + + theme_Publication() + + + grid.arrange(L_Stats,K_Stats,R_Stats,AUC_Stats,ncol=2,nrow=2) + grid.arrange(L_Stats_Box,K_Stats_Box,r_Stats_Box,AUC_Stats_Box,ncol=2,nrow=2) + + + + #plot the references + #grid.arrange(p3,p3_K,p3_r,p4,p4_K,p4_r,p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=4) + #grid.arrange(p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=2) + + #loop for grid arrange 4x3 + j <- rep(1,((num_genes_RF)/3)-1) + for(n in 1:length(j)){ + j[n+1] <- n*3 + 1 + } + #loop for printing each plot + num <- 0 + for(m in 1:(round((num_genes_RF)/3)-1)){ + num <- j[m] + grid.arrange(p_rf_l[[num]],p_rf_K[[num]],p_rf_r[[num]],p_rf_AUC[[num]],p_rf_l[[num+1]],p_rf_K[[num+1]],p_rf_r[[num+1]],p_rf_AUC[[num+1]],p_rf_l[[num+2]],p_rf_K[[num+2]],p_rf_r[[num+2]],p_rf_AUC[[num+2]],ncol=4,nrow=3) + #grid.arrange(p_rf_l[[364]],p_rf_K[[364]],p_rf_r[[364]],p_rf_l[[365]],p_rf_K[[365]],p_rf_r[[365]],p_rf_l[[366]],p_rf_K[[366]],p_rf_r[[366]],ncol=3,nrow=3) + + + #p1[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p1[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]] + } + if(num_genes_RF != (num+2)){ + total_num = num_genes_RF - (num+2) + if(total_num == 5){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],p_rf_l[[num+5]],p_rf_K[[num+5]],p_rf_r[[num+5]],p_rf_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_AUC[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],p_rf_AUC[[num+7]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + if(total_num == 4){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],p_rf_l[[num+5]],p_rf_K[[num+5]],p_rf_r[[num+5]],p_rf_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_AUC[[num+6]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + + if(total_num == 3){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],p_rf_l[[num+5]],p_rf_K[[num+5]],p_rf_r[[num+5]],p_rf_AUC[[num+5]],ncol=4,nrow=3) + #grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 2){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 1){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + } + dev.off() + + #print rank plots for L and K gene interactions + + + InteractionScores_AdjustMissing <- InteractionScores + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_L),]$Avg_Zscore_L <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_K),]$Avg_Zscore_K <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_r),]$Avg_Zscore_r <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_AUC),]$Avg_Zscore_AUC <- 0.001 + + InteractionScores_AdjustMissing$L_Rank <- NA + InteractionScores_AdjustMissing$K_Rank <- NA + InteractionScores_AdjustMissing$r_Rank <- NA + InteractionScores_AdjustMissing$AUC_Rank <- NA + + InteractionScores_AdjustMissing$L_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_L) + InteractionScores_AdjustMissing$K_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_K) + InteractionScores_AdjustMissing$r_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_r) + InteractionScores_AdjustMissing$AUC_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_AUC) + + # + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_L),]$Z_lm_L <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_K),]$Z_lm_K <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_r),]$Z_lm_r <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_AUC),]$Z_lm_AUC <- 0.001 + + InteractionScores_AdjustMissing$L_Rank_lm <- NA + InteractionScores_AdjustMissing$K_Rank_lm <- NA + InteractionScores_AdjustMissing$r_Rank_lm <- NA + InteractionScores_AdjustMissing$AUC_Rank_lm <- NA + + InteractionScores_AdjustMissing$L_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_L) + InteractionScores_AdjustMissing$K_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_K) + InteractionScores_AdjustMissing$r_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_r) + InteractionScores_AdjustMissing$AUC_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_AUC) + + + + Rank_L_1SD <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L >= 1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L >= 2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L >= 3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K <= -1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K <= -2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K <= -3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + pdf(paste(outputpath,"RankPlots.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD,Rank_L_2SD,Rank_L_3SD,Rank_K_1SD,Rank_K_2SD,Rank_K_3SD,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext,Rank_L_2SD_notext,Rank_L_3SD_notext,Rank_K_1SD_notext,Rank_K_2SD_notext,Rank_K_3SD_notext,ncol=3,nrow=2) + + dev.off() + + + Rank_L_1SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L >= 1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L >= 2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L >= 3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K <= -1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K <= -2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K <= -3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + pdf(paste(outputpath,"RankPlots_lm.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD_lm,Rank_L_2SD_lm,Rank_L_3SD_lm,Rank_K_1SD_lm,Rank_K_2SD_lm,Rank_K_3SD_lm,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext_lm,Rank_L_2SD_notext_lm,Rank_L_3SD_notext_lm,Rank_K_1SD_notext_lm,Rank_K_2SD_notext_lm,Rank_K_3SD_notext_lm,ncol=3,nrow=2) + + dev.off() + + + + X_NArm <- InteractionScores[!is.na(InteractionScores$Z_lm_L) | !is.na(InteractionScores$Avg_Zscore_L) ,] + + #find overlaps + X_NArm$Overlap <- "No Effect" + try(X_NArm[X_NArm$Z_lm_L >= 2 & X_NArm$Avg_Zscore_L >= 2,]$Overlap <- "Deletion Enhancer Both") + try(X_NArm[X_NArm$Z_lm_L <= -2 & X_NArm$Avg_Zscore_L <= -2,]$Overlap <- "Deletion Suppressor Both") + try(X_NArm[X_NArm$Z_lm_L >= 2 & X_NArm$Avg_Zscore_L <= 2,]$Overlap <- "Deletion Enhancer lm only") + try(X_NArm[X_NArm$Z_lm_L <= 2 & X_NArm$Avg_Zscore_L >= 2,]$Overlap <- "Deletion Enhancer Avg Zscore only") + try(X_NArm[X_NArm$Z_lm_L <= -2 & X_NArm$Avg_Zscore_L >= -2,]$Overlap <- "Deletion Suppressor lm only") + try(X_NArm[X_NArm$Z_lm_L >= -2 & X_NArm$Avg_Zscore_L <= -2,]$Overlap <- "Deletion Suppressor Avg Zscore only") + try(X_NArm[X_NArm$Z_lm_L >= 2 & X_NArm$Avg_Zscore_L <= -2,]$Overlap <- "Deletion Enhancer lm, Deletion Suppressor Avg Z score") + try(X_NArm[X_NArm$Z_lm_L <= -2 & X_NArm$Avg_Zscore_L >= 2,]$Overlap <- "Deletion Suppressor lm, Deletion Enhancer Avg Z score") + + #get the linear model info and the r-squared value for all CPPs in results 1 vs results 2 + get_lm_L <- lm(X_NArm$Z_lm_L~X_NArm$Avg_Zscore_L) + L_lm <- summary(get_lm_L) + + get_lm_K <- lm(X_NArm$Z_lm_K~X_NArm$Avg_Zscore_K) + K_lm <- summary(get_lm_K) + + get_lm_r <- lm(X_NArm$Z_lm_r~X_NArm$Avg_Zscore_r) + r_lm <- summary(get_lm_r) + + get_lm_AUC <- lm(X_NArm$Z_lm_AUC~X_NArm$Avg_Zscore_AUC) + AUC_lm <- summary(get_lm_AUC) + + pdf(paste(outputpath,"Avg_Zscore_vs_lm_NA_rm.pdf",sep=""),width = 16, height = 12, onefile = TRUE) + + print(ggplot(X_NArm,aes(Avg_Zscore_L,Z_lm_L)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm L") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(Avg_Zscore_K,Z_lm_K)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm K") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(K_lm$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(Avg_Zscore_r,Z_lm_r)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm r") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(r_lm$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(Avg_Zscore_AUC,Z_lm_AUC)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm AUC") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(AUC_lm$r.squared,2))) + theme_Publication_legend_right()) + + dev.off() + + + lm_v_Zscore_L <- ggplot(X_NArm,aes(Avg_Zscore_L,Z_lm_L,ORF=OrfRep,Gene=Gene,NG=NG,SM=SM,DB=DB)) + geom_point(aes(color=Overlap),shape=3) + + geom_smooth(method = "lm",color=1) + ggtitle("Avg Zscore vs lm L") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm$r.squared,2))) + theme_Publication_legend_right() + + pgg <- ggplotly(lm_v_Zscore_L) + #pgg + plotly_path <- paste(getwd(),"/",outputpath,"Avg_Zscore_vs_lm_NA_rm.html",sep="") + saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + X_NArm$L_Rank <- rank(X_NArm$Avg_Zscore_L) + X_NArm$K_Rank <- rank(X_NArm$Avg_Zscore_K) + X_NArm$r_Rank <- rank(X_NArm$Avg_Zscore_r) + X_NArm$AUC_Rank <- rank(X_NArm$Avg_Zscore_AUC) + + X_NArm$L_Rank_lm <- rank(X_NArm$Z_lm_L) + X_NArm$K_Rank_lm <- rank(X_NArm$Z_lm_K) + X_NArm$r_Rank_lm <- rank(X_NArm$Z_lm_r) + X_NArm$AUC_Rank_lm <- rank(X_NArm$Z_lm_AUC) + + #get the linear model info and the r-squared value for all CPPs in results 1 vs results 2 + get_lm_L2 <- lm(X_NArm$L_Rank_lm~X_NArm$L_Rank) + L_lm2 <- summary(get_lm_L2) + + get_lm_K2 <- lm(X_NArm$K_Rank_lm~X_NArm$K_Rank) + K_lm2 <- summary(get_lm_K2) + + get_lm_r2 <- lm(X_NArm$r_Rank_lm~X_NArm$r_Rank) + r_lm2 <- summary(get_lm_r2) + + get_lm_AUC2 <- lm(X_NArm$AUC_Rank_lm~X_NArm$AUC_Rank) + AUC_lm2 <- summary(get_lm_AUC2) + + num_genes_NArm2 <- (dim(X_NArm)[1])/2 + + pdf(paste(outputpath,"Avg_Zscore_vs_lm_ranked_NA_rm.pdf",sep=""),width = 16, height = 12, onefile = TRUE) + + print(ggplot(X_NArm,aes(L_Rank,L_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank Avg Zscore vs lm L") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(L_lm2$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(K_Rank,K_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank Avg Zscore vs lm K") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(K_lm2$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(r_Rank,r_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank Avg Zscore vs lm r") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(r_lm2$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(AUC_Rank,AUC_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank of Avg Zscore vs lm AUC") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(AUC_lm2$r.squared,2))) + theme_Publication_legend_right()) + + + + dev.off() + + + + Rank_L_1SD <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_L >= 1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_L >= 2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_L >= 3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_K <= -1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_K <= -2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_K <= -3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + pdf(paste(outputpath,"RankPlots_naRM.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD,Rank_L_2SD,Rank_L_3SD,Rank_K_1SD,Rank_K_2SD,Rank_K_3SD,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext,Rank_L_2SD_notext,Rank_L_3SD_notext,Rank_K_1SD_notext,Rank_K_2SD_notext,Rank_K_3SD_notext,ncol=3,nrow=2) + + dev.off() + + + Rank_L_1SD_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_L >= 1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_L >= 2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_L >= 3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_K <= -1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_K <= -2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_K <= -3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + pdf(paste(outputpath,"RankPlots_lm_naRM.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD_lm,Rank_L_2SD_lm,Rank_L_3SD_lm,Rank_K_1SD_lm,Rank_K_2SD_lm,Rank_K_3SD_lm,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext_lm,Rank_L_2SD_notext_lm,Rank_L_3SD_notext_lm,Rank_K_1SD_notext_lm,Rank_K_2SD_notext_lm,Rank_K_3SD_notext_lm,ncol=3,nrow=2) + + dev.off() + +} + + + +#get the linear model info and the r-squared value for all CPPs in results 1 vs results 2 +get_lm_1 <- lm(X_NArm$Z_lm_K~X_NArm$Z_lm_L) +L_lm_1 <- summary(get_lm_1) + +get_lm_2 <- lm(X_NArm$Z_lm_r~X_NArm$Z_lm_L) +L_lm_2 <- summary(get_lm_2) + +get_lm_3 <- lm(X_NArm$Z_lm_AUC~X_NArm$Z_lm_L) +L_lm_3 <- summary(get_lm_3) + +get_lm_4 <- lm(X_NArm$Z_lm_r~X_NArm$Z_lm_K) +L_lm_4 <- summary(get_lm_4) + +get_lm_5 <- lm(X_NArm$Z_lm_AUC~X_NArm$Z_lm_K) +L_lm_5 <- summary(get_lm_5) + +get_lm_6 <- lm(X_NArm$Z_lm_AUC~X_NArm$Z_lm_r) +L_lm_6 <- summary(get_lm_6) + + +pdf(file=paste(outputpath,"Correlation_CPPs.pdf",sep=""),width = 10, height = 7, onefile = TRUE) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_K)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction L vs. Interaction K") + + xlab("z-score L") + ylab("z-score K") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_1$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction L vs. Interaction r") + + xlab("z-score L") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_2$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction L vs. Interaction AUC") + + xlab("z-score L") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_3$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction K vs. Interaction r") + + xlab("z-score K") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_4$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction K vs. Interaction AUC") + + xlab("z-score K") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_5$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_r,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction r vs. Interaction AUC") + + xlab("z-score r") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_6$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +InteractionScores_RF2 <- InteractionScores_RF[!is.na(InteractionScores_RF$Z_lm_L),] +ggplot(X_NArm,aes(Z_lm_L,Z_lm_K)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_L,Z_lm_K),color="cyan") + + ggtitle("Interaction L vs. Interaction K") + + xlab("z-score L") + ylab("z-score K") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_1$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_L,Z_lm_r),color="cyan") + + ggtitle("Interaction L vs. Interaction r") + + xlab("z-score L") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_2$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_L,Z_lm_AUC),color="cyan") + + ggtitle("Interaction L vs. Interaction AUC") + + xlab("z-score L") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_3$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_K,Z_lm_r),color="cyan") + + ggtitle("Interaction K vs. Interaction r") + + xlab("z-score K") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_4$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_K,Z_lm_AUC),color="cyan") + + ggtitle("Interaction K vs. Interaction AUC") + + xlab("z-score K") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_5$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_r,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_r,Z_lm_AUC),color="cyan") + + ggtitle("Interaction r vs. Interaction AUC") + + xlab("z-score r") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_6$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + + + + + +dev.off() + + +#write.csv(Labels,file=paste("../Code/Parameters.csv"),row.names = FALSE) +timestamp() + +#BoneYard*********************************************** +#I'm thinking this parameter needs to be save somewhere "permanent' for the record so outputs can be reproduced. +#take this out of the Arguments. In Matlab I could for future in .mat file. Maybe I could save the SD Args[2] as part of the StudyInfo.txt. +#Corruptable but better than nothing. +#if(is.na(Args[2])){ +# std=3 +#}else { +# std= Arg[2] +#Delta_Background_sdFactor <- 2 #Args[3] +#DelBGFactr <- as.numeric(Delta_Background_sdFactor) +#} + diff --git a/workflow/.old/templates/qhtcp/Exp3/backups/InteractTemplateB4Prompt4SDinput.R b/workflow/.old/templates/qhtcp/Exp3/backups/InteractTemplateB4Prompt4SDinput.R new file mode 100644 index 00000000..3b11777c --- /dev/null +++ b/workflow/.old/templates/qhtcp/Exp3/backups/InteractTemplateB4Prompt4SDinput.R @@ -0,0 +1,2702 @@ +#Based on InteractionTemplate.R which is based on Sean Santose's Interaction_V5 script. +#Adapt SS For Structured Data storage but using command line scripts +###Set up the required libraries, call required plot theme elements and set up the command line arguments +library("ggplot2") +library("plyr") +library("extrafont") +library("gridExtra") +library("gplots") +library("RColorBrewer") +library("stringr") +#library("gdata") +library(plotly) +library(htmlwidgets) + +Args <- commandArgs(TRUE) +input_file <- Args[1] #"!!Results_17_0827_yor1null-rpl12anull misLabeledAsFrom MI 17_0919_yor1-curated.txt" #Args[1] #Arg 1 #"!!ResultsStd_JS 19_1224_HLEG_P53.txt" is the !!results ... .txt + +#Path to Output Directory +W=getwd() #R is F'd up, Can't use, Any legitamate platfold could build out dirs from this +outDir <- "ZScores/" #"Args[2] #paste0(W,"/ZScores/") +subDir <- outDir #Args[2] + +if (file.exists(subDir)){ + outputpath <- subDir +} else { + dir.create(file.path(subDir)) +} + +if (file.exists(paste(subDir,"QC/",sep=""))){ + outputpath_QC <- paste(subDir,"QC/",sep="") +} else { + dir.create(file.path(paste(subDir,"QC/",sep=""))) + outputpath_QC <- paste(subDir,"QC/",sep="") +} +#define the output path (formerly the second argument from Rscript) +outputpath <- outDir + +#Set Args[2] the Background contamination noise filter as a function of standard deviation +#Sean recommends 3 or 5 SD factor. +#Capture Exp_ number,use it to Save Args[2]{std}to Labels field and then Write to Labels to studyInfo.txt for future reference +Labels <- read.csv(file= "../Code/StudyInfo.csv",stringsAsFactors = FALSE) #,sep= ",") +print("Be sure to include Argument 2 the Bacground noise filter standard deviation i.e., 3 or 5 per Sean") +std= as.numeric(Args[2]) +expNumber<- as.numeric(sub("^.*?(\\d+)$", "\\1", getwd())) +Labels[expNumber,3]= as.numeric(std) +Delta_Background_sdFactor <- std +DelBGFactr <- as.numeric(Delta_Background_sdFactor) +#Write Background SD value to studyInfo.txt file +#write.csv(Labels,file=paste("../Code/StudyInfo.csv"),row.names = FALSE) +write.csv(Labels,file=paste("../Code/StudyInfo.csv"),row.names = FALSE) +print('ln 50 write StudyInfo.csv ') +#write.table(Labels,file=paste(outputpath,"StudyInfo.txt"),sep = "\t",row.names = FALSE) + +#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +#++++++BEGIN USER DATA SELECTION SECTION+++++++++++++++++++++++++++++++++++++++++++++++++ + + +#read in the data +X <- read.delim(input_file,skip=2,as.is=T,row.names=1,strip.white=TRUE) +X <- X[!(X[[1]]%in%c("","Scan")),] +#X <- X[!(X[[1]]%in%c(61:76)),] #Remove dAmp plates which are Scans 61 thru 76 + +#X <- X[which(X$Specifics == "WT"),] + +X_length <- length(X[1,]) +X_end <- length(X[1,]) - 2 +X <- X[,c(1:46,X_end:X_length)] + + +#use numeric data to perform operations +X$Col <- as.numeric(X$Col) +X$Row <- as.numeric(X$Row) +X$l <- as.numeric(X$l) +X$K <- as.numeric(X$K) +X$r <- as.numeric(X$r) +X$Scan <- as.numeric(X$Scan) +X$AUC <- as.numeric(X$AUC) +X$LstBackgrd <- as.numeric(X$LstBackgrd) +X$X1stBackgrd <- as.numeric(X$X1stBackgrd) + +#set the OrfRep to YDL227C for the ref data +X[X$ORF == "YDL227C",]$OrfRep <- "YDL227C" +#Sean removes the Doxycyclin at 0.0ug.mL so that only the Oligomycin series with Doxycyclin of 0.12ug/mL are used. +#That is the first DM plates are removed from the data set with the following. +X <- X[X$Conc1 != "0ug/mL",] #This occurs only for Exp1 and Exp2 and so doesn't have any effect on Exp3&4 + + +#Mert placed the"bad_spot" text in the ORF col. for particular spots in the RF1 and RF2 plates. +#This code removes those spots from the data set used for the interaction analysis. Dr.Hartman feels that these donot effect Zscores significantly and so "non-currated" files were used. +#try(X <- X[X$ORF != "bad_spot",]) +#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= + +#get total number of drug concentrations +Total_Conc_Nums <- length(unique(X$Conc)) + +#function to ID numbers in string with characters+numbers (ie to get numeric drug conc) +numextract <- function(string){ + str_extract(string, "\\-*\\d+\\.*\\d*") +} + +#generate a new column with the numeric drug concs +X$Conc_Num <- as.numeric(numextract(X$Conc)) +#Generate new column with the numeric drug concs as factors starting at 0 for the graphing later +X$Conc_Num_Factor <- as.numeric(as.factor(X$Conc_Num)) - 1 + +#Get the max factor for concentration +MAX_CONC <- max(X$Conc_Num_Factor) +#if treating numbers not as factors uncomment next line and comment out previous line +#MAX_CONC <- max(X$Conc_Num) + +#remove wells with problems for making graphs and to not include in summary statistics +X <- X[X$Gene != "BLANK",] +X <- X[X$Gene != "Blank",] +X <- X[X$ORF != "Blank",] +X <- X[X$Gene != "blank",] +#X <- X[X$Gene != "HO",] +Xbu= X +#Inserted to use SGDgenelist to update orfs and replace empty geneName cells with ORF name (adapted from Sean's Merge script). This is to 'fix' the naming for everything that follows (REMc, Heatmaps ... et.al) rather than do it piece meal later +#Sean's Match Script( which was adapted here) was fixed 2022_0608 so as not to write over the RF1&RF2 geneNames which caused a variance with his code results +#in the Z_lm_L,K,r&AUC output values. Values correlated well but were off by a multiplier factor. +SGDgeneList= "../Code/SGD_features.tab" +genes = data.frame(read.delim(file=SGDgeneList,quote="",header=FALSE,colClasses = c(rep("NULL",3), rep("character", 2), rep("NULL", 11)))) +for(i in 1:length(X[,14])){ + ii= as.numeric(i) + line_num = match(X[ii,14],genes[,1],nomatch=1) + OrfRepColNum= as.numeric(match('OrfRep',names(X))) + if(X[ii,OrfRepColNum]!= "YDL227C"){ + X[ii,15] = genes[line_num,2] + } + if((X[ii,15] == "")||(X[ii,15] == "OCT1")){ + X[ii,15] = X[ii,OrfRepColNum] + } +} +Xblankreplace= X +#X= Xbu #for restore testing restore X if geneName 'Match' routine needs changing + +#Remove dAmPs ******************************* +DAmPs_List <- "../Code/22_0602_Remy_DAmPsList.txt" +Damps <- read.delim(DAmPs_List,header=F) + +X <- X[!(X$ORF %in% Damps$V1),] #fix this to Damps[,1] +XafterDampsRM=X #Backup for debugging especially when Rstudio goes crazy out of control +# *********** + + +#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +#++++++END USER DATA SELECTION+++++++++++++++++++++++++++++++++++++++++++++++++ +#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +print("ln137 End of User Section including blank gene writeOver") +#++++Begin Graphics Boiler Plate Section+++++++++++++++++++++++++++++++++++++++ +#theme elements for plots +theme_Publication <- function(base_size=14, base_family="sans") { + library(grid) + library(ggthemes) + (theme_foundation(base_size=base_size, base_family=base_family) + + theme(plot.title = element_text(face = "bold", + size = rel(1.2), hjust = 0.5), + text = element_text(), + panel.background = element_rect(colour = NA), + plot.background = element_rect(colour = NA), + panel.border = element_rect(colour = NA), + axis.title = element_text(face = "bold",size = rel(1)), + axis.title.y = element_text(angle=90,vjust =2), + axis.title.x = element_text(vjust = -0.2), + axis.text = element_text(), + axis.line = element_line(colour="black"), + axis.ticks = element_line(), + panel.grid.major = element_line(colour="#f0f0f0"), + panel.grid.minor = element_blank(), + legend.key = element_rect(colour = NA), + legend.position = "bottom", + legend.direction = "horizontal", + legend.key.size= unit(0.2, "cm"), + legend.spacing = unit(0, "cm"), + legend.title = element_text(face="italic"), + plot.margin=unit(c(10,5,5,5),"mm"), + strip.background=element_rect(colour="#f0f0f0",fill="#f0f0f0"), + strip.text = element_text(face="bold") + )) + +} + +scale_fill_Publication <- function(...){ + library(scales) + discrete_scale("fill","Publication",manual_pal(values = c("#386cb0","#fdb462","#7fc97f","#ef3b2c","#662506","#a6cee3","#fb9a99","#984ea3","#ffff33")), ...) + +} + +scale_colour_Publication <- function(...){ + discrete_scale("colour","Publication",manual_pal(values = c("#386cb0","#fdb462","#7fc97f","#ef3b2c","#662506","#a6cee3","#fb9a99","#984ea3","#ffff33")), ...) + +} + + +theme_Publication_legend_right <- function(base_size=14, base_family="sans") { + (theme_foundation(base_size=base_size, base_family=base_family) + + theme(plot.title = element_text(face = "bold", + size = rel(1.2), hjust = 0.5), + text = element_text(), + panel.background = element_rect(colour = NA), + plot.background = element_rect(colour = NA), + panel.border = element_rect(colour = NA), + axis.title = element_text(face = "bold",size = rel(1)), + axis.title.y = element_text(angle=90,vjust =2), + axis.title.x = element_text(vjust = -0.2), + axis.text = element_text(), + axis.line = element_line(colour="black"), + axis.ticks = element_line(), + panel.grid.major = element_line(colour="#f0f0f0"), + panel.grid.minor = element_blank(), + legend.key = element_rect(colour = NA), + legend.position = "right", + legend.direction = "vertical", + legend.key.size= unit(0.5, "cm"), + legend.spacing = unit(0, "cm"), + legend.title = element_text(face="italic"), + plot.margin=unit(c(10,5,5,5),"mm"), + strip.background=element_rect(colour="#f0f0f0",fill="#f0f0f0"), + strip.text = element_text(face="bold") + )) + +} + +scale_fill_Publication <- function(...){ + discrete_scale("fill","Publication",manual_pal(values = c("#386cb0","#fdb462","#7fc97f","#ef3b2c","#662506","#a6cee3","#fb9a99","#984ea3","#ffff33")), ...) + +} + +scale_colour_Publication <- function(...){ + discrete_scale("colour","Publication",manual_pal(values = c("#386cb0","#fdb462","#7fc97f","#ef3b2c","#662506","#a6cee3","#fb9a99","#984ea3","#ffff33")), ...) + +} + + +#print timestamp for initial time the code starts +timestamp() +#+++++BEGIN QC SECTION+++++++++++++++++++++++++++++++++++++++++++++++++++++++ +###Part 2 - Quality control +#print quality control graphs for each dataset before removing data due to contamination +#and before adjusting missing data to max theoretical values + +#plate analysis plot +#plate analysis is a quality check to identify plate effects containing anomalies + +Plate_Analysis_L <- ggplot(X,aes(Scan,l,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for L before quality control") + theme_Publication() + +Plate_Analysis_K <- ggplot(X,aes(Scan,K,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for K before quality control") + theme_Publication() + +Plate_Analysis_r <- ggplot(X,aes(Scan,r,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for r before quality control") + theme_Publication() + +Plate_Analysis_AUC <- ggplot(X,aes(Scan,AUC,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for AUC before quality control") + theme_Publication() + + + +Plate_Analysis_L_Box <- ggplot(X,aes(as.factor(Scan),l,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for L before quality control") + theme_Publication() + +Plate_Analysis_K_Box <- ggplot(X,aes(as.factor(Scan),K,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for K before quality control") + theme_Publication() + +Plate_Analysis_r_Box <- ggplot(X,aes(as.factor(Scan),r,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for r before quality control") + theme_Publication() + +Plate_Analysis_AUC_Box <- ggplot(X,aes(as.factor(Scan),AUC,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for AUC before quality control") + theme_Publication() + +#quality control - values with a high delta background likely have heavy contamination +#check the frequency of these values +#report the L and K values of these spots +#report the number to be removed based on the Delta_Background_Tolerance +X$Delta_Backgrd <- X$LstBackgrd - X$X1stBackgrd + + +#raw l vs K before QC +Raw_l_vs_K_beforeQC <- ggplot(X,aes(l,K,color=as.factor(Conc_Num))) + geom_point(aes(ORF=ORF,Gene=Gene,Delta_Backgrd=Delta_Backgrd),shape=3) + + ggtitle("Raw L vs K before QC") + + theme_Publication_legend_right() +pdf(paste(outputpath_QC,"Raw_L_vs_K_beforeQC.pdf",sep=""),width = 12,height = 8) +Raw_l_vs_K_beforeQC +dev.off() +pgg <- ggplotly(Raw_l_vs_K_beforeQC) +#pgg +plotly_path <- paste(getwd(),"/",outputpath_QC,"Raw_L_vs_K_beforeQC.html",sep="") +saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + +#set delta background tolerance based on 3 sds from the mean delta background +Delta_Background_Tolerance <- mean(X$Delta_Backgrd)+(DelBGFactr*sd(X$Delta_Backgrd)) +#Delta_Background_Tolerance <- mean(X$Delta_Backgrd)+(3*sd(X$Delta_Backgrd)) +print(paste("Delta_Background_Tolerance is",Delta_Background_Tolerance,sep=" ")) + +Plate_Analysis_Delta_Backgrd <- ggplot(X,aes(Scan,Delta_Backgrd,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2,position="jitter") + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd before quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_Box <- ggplot(X,aes(as.factor(Scan),Delta_Backgrd,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd before quality control") + theme_Publication() + + + +X_Delta_Backgrd_above_Tolerance <- X[X$Delta_Backgrd >= Delta_Background_Tolerance,] + +X_Delta_Backgrd_above_Tolerance_K_halfmedian <- (median(X_Delta_Backgrd_above_Tolerance$K,na.rm = TRUE))/2 +X_Delta_Backgrd_above_Tolerance_L_halfmedian <- (median(X_Delta_Backgrd_above_Tolerance$l,na.rm = TRUE))/2 +X_Delta_Backgrd_above_Tolerance_toRemove <- dim(X_Delta_Backgrd_above_Tolerance)[1] + +X_Delta_Backgrd_above_Tolerance_L_vs_K <- ggplot(X_Delta_Backgrd_above_Tolerance,aes(l,K,color=as.factor(Conc_Num))) + geom_point(aes(ORF=ORF,Gene=Gene,Delta_Backgrd=Delta_Backgrd),shape=3) + + ggtitle(paste("Raw L vs K for strains above delta background threshold of",Delta_Background_Tolerance,"or above")) + + annotate("text",x=X_Delta_Backgrd_above_Tolerance_L_halfmedian,y=X_Delta_Backgrd_above_Tolerance_K_halfmedian, + label = paste("Strains above delta background tolerance = ",X_Delta_Backgrd_above_Tolerance_toRemove)) + + theme_Publication_legend_right() +pdf(paste(outputpath_QC,"Raw_L_vs_K_for_strains_above_deltabackgrd_threshold.pdf",sep=""),width = 12,height = 8) +X_Delta_Backgrd_above_Tolerance_L_vs_K +dev.off() +pgg <- ggplotly(X_Delta_Backgrd_above_Tolerance_L_vs_K) +#pgg +plotly_path <- paste(getwd(),"/",outputpath_QC,"Raw_L_vs_K_for_strains_above_deltabackgrd_threshold.html",sep="") +saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + +#frequency plot for all data vs. the delta_background +DeltaBackground_Frequency_Plot <- ggplot(X,aes(Delta_Backgrd,color=as.factor(Conc_Num))) + geom_density() + + ggtitle("Density plot for Delta Background by Conc All Data") + theme_Publication_legend_right() + +#bar plot for all data vs. the delta_background +DeltaBackground_Bar_Plot <- ggplot(X,aes(Delta_Backgrd,color=as.factor(Conc_Num))) + geom_bar() + + ggtitle("Bar plot for Delta Background by Conc All Data") + theme_Publication_legend_right() + +pdf(file = paste(outputpath_QC,"Frequency_Delta_Background.pdf",sep=""),width = 12,height = 8) +print(DeltaBackground_Frequency_Plot) +print(DeltaBackground_Bar_Plot) +dev.off() + + +#Need to identify missing data, and differentiate between this data and removed data so the removed data can get set to NA and the missing data can get set to max theoretical values +#1 for missing data, 0 for non missing data +#Use "NG" for NoGrowth rather than "missing" +X$NG <- 0 +try(X[X$l == 0 & !is.na(X$l),]$NG <- 1) + +#1 for removed data, 0 non removed data +#Use DB to identify number of genes removed due to the DeltaBackground Threshold rather than "Removed" +X$DB <- 0 +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$DB <- 1) + +#replace the CPPs for l, r, AUC and K (must be last!) for removed data +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$l <- NA) +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$r <- NA) +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$AUC <- NA) +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$K <- NA) + + +Plate_Analysis_L_afterQC <- ggplot(X,aes(Scan,l,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_afterQC <- ggplot(X,aes(Scan,K,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_afterQC <- ggplot(X,aes(Scan,r,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_afterQC <- ggplot(X,aes(Scan,AUC,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_afterQC <- ggplot(X,aes(Scan,Delta_Backgrd,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + + +Plate_Analysis_L_Box_afterQC <- ggplot(X,aes(as.factor(Scan),l,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_Box_afterQC <- ggplot(X,aes(as.factor(Scan),K,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_Box_afterQC <- ggplot(X,aes(as.factor(Scan),r,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_Box_afterQC <- ggplot(X,aes(as.factor(Scan),AUC,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_Box_afterQC <- ggplot(X,aes(as.factor(Scan),Delta_Backgrd,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis.pdf",sep=""),width = 14,height=9) +Plate_Analysis_L +Plate_Analysis_L_afterQC +Plate_Analysis_K +Plate_Analysis_K_afterQC +Plate_Analysis_r +Plate_Analysis_r_afterQC +Plate_Analysis_AUC +Plate_Analysis_AUC_afterQC +Plate_Analysis_Delta_Backgrd +Plate_Analysis_Delta_Backgrd_afterQC +dev.off() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis_Boxplots.pdf",sep=""),width = 18,height=9) +Plate_Analysis_L_Box +Plate_Analysis_L_Box_afterQC +Plate_Analysis_K_Box +Plate_Analysis_K_Box_afterQC +Plate_Analysis_r_Box +Plate_Analysis_r_Box_afterQC +Plate_Analysis_AUC_Box +Plate_Analysis_AUC_Box_afterQC +Plate_Analysis_Delta_Backgrd_Box +Plate_Analysis_Delta_Backgrd_Box_afterQC +dev.off() + +#remove the zero values and print plate analysis +X_noZero <- X[which(X$l > 0),] +Plate_Analysis_L_afterQC_Z <- ggplot(X_noZero,aes(Scan,l,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_afterQC_Z <- ggplot(X_noZero,aes(Scan,K,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_afterQC_Z <- ggplot(X_noZero,aes(Scan,r,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_afterQC_Z <- ggplot(X_noZero,aes(Scan,AUC,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_afterQC_Z <- ggplot(X_noZero,aes(Scan,Delta_Backgrd,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + + +Plate_Analysis_L_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),l,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),K,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),r,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),AUC,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),Delta_Backgrd,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis_noZeros.pdf",sep=""),width = 14,height=9) +Plate_Analysis_L_afterQC_Z +Plate_Analysis_K_afterQC_Z +Plate_Analysis_r_afterQC_Z +Plate_Analysis_AUC_afterQC_Z +Plate_Analysis_Delta_Backgrd_afterQC_Z +dev.off() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis_noZeros_Boxplots.pdf",sep=""),width = 18,height=9) +Plate_Analysis_L_Box_afterQC_Z +Plate_Analysis_K_Box_afterQC_Z +Plate_Analysis_r_Box_afterQC_Z +Plate_Analysis_AUC_Box_afterQC_Z +Plate_Analysis_Delta_Backgrd_Box_afterQC_Z +dev.off() + +#remove dataset with zeros removed +rm(X_noZero) + + +#X_test_missing_and_removed <- X[X$Removed == 1,] + +#calculate summary statistics for all strains, including both background and the deletions +X_stats_ALL <- ddply(X, c("Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_AUC = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + se_AUC = sd_AUC / sqrt(N-1) +) +#print(X_stats_ALL_L) + +write.csv(X_stats_ALL,file=paste(outputpath,"SummaryStats_ALLSTRAINS.csv"),row.names = FALSE) +#+++++END QC SECTION+++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +##### Part 3 - Generate summary statistics and calculate the max theoretical L value +##### Calculate the Z score at each drug conc for each deletion strain + + +#get the background strains - can be modified to take another argument but for most screens will just be YDL227C +Background_Strains <- c("YDL227C") + +#first part of loop will go through for each background strain +#most cases there will only be one YDL227C +for(s in Background_Strains){ + X_Background <- X[X$OrfRep == s,] + + #if there's missing data for the background strains set these values to NA so the 0 values aren't included in summary statistics + #we may want to consider in some cases giving the max high value to L depending on the data type + if(table(X_Background$l)[1] == 0){ + X_Background[X_Background$l == 0,]$l <- NA + X_Background[X_Background$K == 0,]$K <- NA + X_Background[X_Background$r == 0,]$r <- NA + X_Background[X_Background$AUC == 0,]$AUC <- NA + } + + X_Background <- X_Background[!is.na(X_Background$l),] + + #get summary stats for L, K, R, AUC + X_stats_BY_L <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean = mean(l,na.rm=TRUE), + median = median(l,na.rm=TRUE), + max = max(l,na.rm=TRUE), + min = min(l,na.rm=TRUE), + sd = sd(l,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + print(X_stats_BY_L) + X1_SD <- max(X_stats_BY_L$sd) + + X_stats_BY_K <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(K)), + mean = mean(K,na.rm=TRUE), + median = median(K,na.rm=TRUE), + max = max(K,na.rm=TRUE), + min = min(K,na.rm=TRUE), + sd = sd(K,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + + X1_SD_K <- max(X_stats_BY_K$sd) + + + X_stats_BY_r <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = length(r), + mean = mean(r,na.rm=TRUE), + median = median(r,na.rm=TRUE), + max = max(r,na.rm=TRUE), + min = min(r,na.rm=TRUE), + sd = sd(r,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + + X1_SD_r <- max(X_stats_BY_r$sd) + + X_stats_BY_AUC <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = length(AUC), + mean = mean(AUC,na.rm=TRUE), + median = median(AUC,na.rm=TRUE), + max = max(AUC,na.rm=TRUE), + min = min(AUC,na.rm=TRUE), + sd = sd(AUC,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + + X1_SD_AUC <- max(X_stats_BY_AUC$sd) + + X_stats_BY <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_L = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + se_AUC = sd_AUC / sqrt(N-1) + ) + + write.csv(X_stats_BY,file=paste(outputpath,"SummaryStats_BackgroundStrains.csv"),row.names=FALSE) + + #calculate the max theoretical L values + #only look for max values when K is within 2SD of the ref strain + for(q in unique(X$Conc_Num_Factor)){ + if(q == 0){ + X_within_2SD_K <- X[X$Conc_Num_Factor == q,] + X_within_2SD_K <- X_within_2SD_K[!is.na(X_within_2SD_K$l),] + X_stats_TEMP_K <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_within_2SD_K <- X_within_2SD_K[X_within_2SD_K$K >= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])) ,] + X_within_2SD_K <- X_within_2SD_K[X_within_2SD_K$K <= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + + X_outside_2SD_K <- X[X$Conc_Num_Factor == q,] + X_outside_2SD_K <- X_outside_2SD_K[!is.na(X_outside_2SD_K$l),] + #X_outside_2SD_K_Temp <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_outside_2SD_K <- X_outside_2SD_K[X_outside_2SD_K$K <= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])) | X_outside_2SD_K$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + #X_outside_2SD_K <- X_outside_2SD_K[X_outside_2SD_K$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + + } + if(q > 0){ + X_within_2SD_K_temp <- X[X$Conc_Num_Factor == q,] + X_within_2SD_K_temp <- X_within_2SD_K_temp[!is.na(X_within_2SD_K_temp$l),] + X_stats_TEMP_K <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_within_2SD_K_temp <- X_within_2SD_K_temp[X_within_2SD_K_temp$K >= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])),] + X_within_2SD_K_temp <- X_within_2SD_K_temp[X_within_2SD_K_temp$K <= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])),] + X_within_2SD_K <- rbind(X_within_2SD_K,X_within_2SD_K_temp) + + X_outside_2SD_K_temp <- X[X$Conc_Num_Factor == q,] + X_outside_2SD_K_temp <- X_outside_2SD_K_temp[!is.na(X_outside_2SD_K_temp$l),] + #X_outside_2SD_K_Temp <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_outside_2SD_K_temp <- X_outside_2SD_K_temp[X_outside_2SD_K_temp$K <= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])) | X_outside_2SD_K_temp$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + #X_outside_2SD_K_temp <- X_outside_2SD_K_temp[X_outside_2SD_K_temp$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + X_outside_2SD_K <- rbind(X_outside_2SD_K,X_outside_2SD_K_temp) + } + } + + X_stats_BY_L_within_2SD_K <- ddply(X_within_2SD_K, c("Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean = mean(l), + median = median(l), + max = max(l,na.rm=TRUE), + min = min(l,na.rm=TRUE), + sd = sd(l), + se = sd / sqrt(N-1), + z_max = (max-mean)/sd + ) + print(X_stats_BY_L_within_2SD_K) + X1_SD_within_2SD_K <- max(X_stats_BY_L_within_2SD_K$sd) + write.csv(X_stats_BY_L_within_2SD_K,file=paste(outputpath_QC,"Max_Observed_L_Vals_for_spots_within_2SD_K.csv",sep=""),row.names=FALSE) + + X_stats_BY_L_outside_2SD_K <- ddply(X_outside_2SD_K, c("Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean = mean(l), + median = median(l), + max = max(l,na.rm=TRUE), + min = min(l,na.rm=TRUE), + sd = sd(l), + se = sd / sqrt(N-1) + ) + print(X_stats_BY_L_outside_2SD_K) + X1_SD_outside_2SD_K <- max(X_stats_BY_L_outside_2SD_K$sd) + + #X1_SD_outside_2SD_K <- X[X$l %in% X1_SD_within_2SD_K$l,] + Outside_2SD_K_L_vs_K <- ggplot(X_outside_2SD_K,aes(l,K,color=as.factor(Conc_Num))) + geom_point(aes(ORF=ORF,Gene=Gene,Delta_Backgrd=Delta_Backgrd),shape=3) + + ggtitle("Raw L vs K for strains falling outside 2SD of the K mean at each conc") + theme_Publication_legend_right() + pdf(paste(outputpath_QC,"Raw_L_vs_K_for_strains_2SD_outside_mean_K.pdf",sep=""),width = 10,height = 8) + print(Outside_2SD_K_L_vs_K) + dev.off() + pgg <- ggplotly(Outside_2SD_K_L_vs_K) + plotly_path <- paste(getwd(),"/",outputpath_QC,"RawL_vs_K_for_strains_outside_2SD_K.html",sep="") + saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + + Outside_2SD_K_delta_background_vs_K <- ggplot(X_outside_2SD_K,aes(Delta_Backgrd,K,color=as.factor(Conc_Num))) + geom_point(aes(l=l,ORF=ORF,Gene=Gene),shape=3,position="jitter") + + ggtitle("DeltaBackground vs K for strains falling outside 2SD of the K mean at each conc") + theme_Publication_legend_right() + pdf(paste(outputpath_QC,"DeltaBackground_vs_K_for_strains_2SD_outside_mean_K.pdf",sep=""),width = 10,height = 8) + Outside_2SD_K_delta_background_vs_K + dev.off() + pgg <- ggplotly(Outside_2SD_K_delta_background_vs_K) + #pgg + plotly_path <- paste(getwd(),"/",outputpath_QC,"DeltaBackground_vs_K_for_strains_outside_2SD_K.html",sep="") + saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + + #get the background strain mean values at the no drug conc to calculate shift + Background_L <- X_stats_BY_L$mean[1] + Background_K <- X_stats_BY_K$mean[1] + Background_r <- X_stats_BY_r$mean[1] + Background_AUC <- X_stats_BY_AUC$mean[1] + + #create empty plots for plotting element + p_l <- ggplot() + p_K <- ggplot() + p_r <- ggplot() + p_AUC <- ggplot() + + p_rf_l <- ggplot() + p_rf_K <- ggplot() + p_rf_r <- ggplot() + p_rf_AUC <- ggplot() + + #get only the deletion strains + X2 <- X + X2 <- X2[X2$OrfRep != "YDL227C",] + + #if set to max theoretical value, add a 1 to SM, if not, leave as 0 + #SM = Set to Max + X2$SM <- 0 + #set the missing values to the highest theoretical value at each drug conc for L, leave other values as 0 for the max/min + for(i in 1:length(unique(X2$Conc_Num))){ + Concentration <- unique(X2$Conc_Num)[i] + X2_temp <- X2[X2$Conc_Num == Concentration,] + if(Concentration == 0){ + X2_new <- X2_temp + print(paste("Check loop order, conc =",Concentration,sep=" ")) + } + if(Concentration > 0){ + try(X2_temp[X2_temp$l == 0 & !is.na(X2_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + try(X2_temp[X2_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_temp$l),]$SM <- 1) + try(X2_temp[X2_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + + #X2_temp[X2_temp$K == 0,]$K <- X_stats_ALL_K$max[i] + #X2_temp[X2_temp$r == 0,]$r <- X_stats_ALL_r$max[i] + #X2_temp[X2_temp$AUC == 0,]$AUC <- X_stats_ALL_AUC$max[i] + print(paste("Check loop order, conc =",Concentration,sep=" ")) + + X2_new <- rbind(X2_new,X2_temp) + + } + } + X2 <- X2_new + + + #get only the RF strains + X2_RF <- X + X2_RF <- X2_RF[X2_RF$OrfRep == "YDL227C",] + #if set to max theoretical value, add a 1 to SM, if not, leave as 0 + #SM = Set to Max + X2_RF$SM <- 0 + #set the missing values to the highest theoretical value at each drug conc for L, leave other values as 0 for the max/min + for(i in 1:length(unique(X2_RF$Conc_Num))){ + Concentration <- unique(X2_RF$Conc_Num)[i] + X2_RF_temp <- X2_RF[X2_RF$Conc_Num == Concentration,] + if(Concentration == 0){ + X2_RF_new <- X2_RF_temp + print(paste("Check loop order, conc =",Concentration,sep=" ")) + } + if(Concentration > 0){ + try(X2_RF_temp[X2_RF_temp$l == 0 & !is.na(X2_RF_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + try(X2_temp[X2_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_temp$l),]$SM <- 1) + try(X2_RF_temp[X2_RF_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_RF_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + print(paste("Check loop order, if error, refs have no L values outside theoretical max L, for REFs, conc =",Concentration,sep=" ")) + + X2_RF_new <- rbind(X2_RF_new,X2_RF_temp) + + } + } + X2_RF <- X2_RF_new + + + #######Part 4 Get the RF Z score values + #Change the OrfRep Column to include the RF strain, the Gene name and the Num. so each RF gets its own score + X2_RF$OrfRep <- paste(X2_RF$OrfRep,X2_RF$Gene,X2_RF$Num.,sep="_") + + num_genes_RF <- length(unique(X2_RF$OrfRep)) + print(num_genes_RF) + + + #create the output data.frame containing columns for each RF strain + InteractionScores_RF <- unique(X2_RF["OrfRep"]) + #InteractionScores_RF$Gene <- unique(X2$Gene) + InteractionScores_RF$Gene <- NA + InteractionScores_RF$Raw_Shift_L <- NA + InteractionScores_RF$Z_Shift_L <- NA + InteractionScores_RF$lm_Score_L <- NA + InteractionScores_RF$Z_lm_L <- NA + InteractionScores_RF$R_Squared_L <- NA + InteractionScores_RF$Sum_Z_Score_L <- NA + InteractionScores_RF$Avg_Zscore_L <- NA + InteractionScores_RF$Raw_Shift_K <- NA + InteractionScores_RF$Z_Shift_K <- NA + InteractionScores_RF$lm_Score_K <- NA + InteractionScores_RF$Z_lm_K <- NA + InteractionScores_RF$R_Squared_K <- NA + InteractionScores_RF$Sum_Z_Score_K <- NA + InteractionScores_RF$Avg_Zscore_K <- NA + InteractionScores_RF$Raw_Shift_r <- NA + InteractionScores_RF$Z_Shift_r <- NA + InteractionScores_RF$lm_Score_r <- NA + InteractionScores_RF$Z_lm_r <- NA + InteractionScores_RF$R_Squared_r <- NA + InteractionScores_RF$Sum_Z_Score_r <- NA + InteractionScores_RF$Avg_Zscore_r <- NA + InteractionScores_RF$Raw_Shift_AUC <- NA + InteractionScores_RF$Z_Shift_AUC <- NA + InteractionScores_RF$lm_Score_AUC <- NA + InteractionScores_RF$Z_lm_AUC <- NA + InteractionScores_RF$R_Squared_AUC <- NA + InteractionScores_RF$Sum_Z_Score_AUC <- NA + InteractionScores_RF$Avg_Zscore_AUC <- NA + InteractionScores_RF$NG <- NA + InteractionScores_RF$SM <- NA + + + for(i in 1:num_genes_RF){ + #get each deletion strain ORF + Gene_Sel <- unique(X2_RF$OrfRep)[i] + #extract only the current deletion strain and its data + X_Gene_Sel <- X2_RF[X2_RF$OrfRep == Gene_Sel,] + + X_stats_interaction <- ddply(X_Gene_Sel, c("OrfRep","Gene","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm = TRUE), + median_L = median(l,na.rm = TRUE), + sd_L = sd(l,na.rm = TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm = TRUE), + median_K = median(K,na.rm = TRUE), + sd_K = sd(K,na.rm = TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm = TRUE), + median_r = median(r,na.rm = TRUE), + sd_r = sd(r,na.rm = TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm = TRUE), + median_AUC = median(AUC,na.rm = TRUE), + sd_AUC = sd(AUC,na.rm = TRUE), + se_AUC = sd_AUC / sqrt(N-1), + NG = sum(NG,na.rm=TRUE), + DB= sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + #Get shift vals + #if L is 0, that means the no growth on no drug + #if L is NA at 0, that means the spot was removed due to contamination + #if L is 0, keep the shift at 0 and for other drug concs calculate delta Ls with no shift + #otherwise calculate shift at no drug conc + if(is.na(X_stats_interaction$mean_L[1]) | X_stats_interaction$mean_L[1] == 0 ){ + X_stats_interaction$Raw_Shift_L <- 0 + X_stats_interaction$Raw_Shift_K <- 0 + X_stats_interaction$Raw_Shift_r <- 0 + X_stats_interaction$Raw_Shift_AUC <- 0 + X_stats_interaction$Z_Shift_L <- 0 + X_stats_interaction$Z_Shift_K <- 0 + X_stats_interaction$Z_Shift_r <- 0 + X_stats_interaction$Z_Shift_AUC <- 0 + }else{ + X_stats_interaction$Raw_Shift_L <- X_stats_interaction$mean_L[1] - Background_L + X_stats_interaction$Raw_Shift_K <- X_stats_interaction$mean_K[1] - Background_K + X_stats_interaction$Raw_Shift_r <- X_stats_interaction$mean_r[1] - Background_r + X_stats_interaction$Raw_Shift_AUC <- X_stats_interaction$mean_AUC[1] - Background_AUC + X_stats_interaction$Z_Shift_L <- X_stats_interaction$Raw_Shift_L[1]/X_stats_BY_L$sd[1] + X_stats_interaction$Z_Shift_K <- X_stats_interaction$Raw_Shift_K[1]/X_stats_BY_K$sd[1] + X_stats_interaction$Z_Shift_r <- X_stats_interaction$Raw_Shift_r[1]/X_stats_BY_r$sd[1] + X_stats_interaction$Z_Shift_AUC <- X_stats_interaction$Raw_Shift_AUC[1]/X_stats_BY_AUC$sd[1] + } + + + #get WT vals + X_stats_interaction$WT_l <- X_stats_BY_L$mean + X_stats_interaction$WT_K <- X_stats_BY_K$mean + X_stats_interaction$WT_r <- X_stats_BY_r$mean + X_stats_interaction$WT_AUC <- X_stats_BY_AUC$mean + + #Get WT SD + X_stats_interaction$WT_sd_l <- X_stats_BY_L$sd + X_stats_interaction$WT_sd_K <- X_stats_BY_K$sd + X_stats_interaction$WT_sd_r <- X_stats_BY_r$sd + X_stats_interaction$WT_sd_AUC <- X_stats_BY_AUC$sd + + + #only get scores if there's growth at no drug + if(X_stats_interaction$mean_L[1] != 0 & !is.na(X_stats_interaction$mean_L[1])){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for no growth values in Z score calculation + if(sum(X_stats_interaction$NG,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #get linear model + gene_lm_L <- lm(formula = Delta_L ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_K <- lm(formula = Delta_K ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_r <- lm(formula = Delta_r ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_AUC <- lm(formula = Delta_AUC ~ Conc_Num_Factor,data = X_stats_interaction) + + #get interaction score calculated by linear model and R-squared value for the fit + gene_interaction_L <- MAX_CONC*(gene_lm_L$coefficients[2]) + gene_lm_L$coefficients[1] + r_squared_l <- summary(gene_lm_L)$r.squared + gene_interaction_K <- MAX_CONC*(gene_lm_K$coefficients[2]) + gene_lm_K$coefficients[1] + r_squared_K <- summary(gene_lm_K)$r.squared + gene_interaction_r <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_r$coefficients[1] + r_squared_r <- summary(gene_lm_r)$r.squared + gene_interaction_AUC <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_AUC$coefficients[1] + r_squared_AUC <- summary(gene_lm_AUC)$r.squared + + #Get total of non removed values + Num_non_Removed_Conc <- Total_Conc_Nums - sum(X_stats_interaction$DB,na.rm = TRUE) - 1 + + #report the scores + InteractionScores_RF$OrfRep[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$OrfRep[1] + InteractionScores_RF$Gene[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$Gene[1] + + InteractionScores_RF$Raw_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores_RF$Z_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores_RF$lm_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_L + InteractionScores_RF$R_Squared_L[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores_RF$Sum_Z_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_L[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE)/(Num_non_Removed_Conc) + + + InteractionScores_RF$Raw_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores_RF$Z_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores_RF$lm_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_K + InteractionScores_RF$R_Squared_K[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores_RF$Sum_Z_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_K[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE)/(Num_non_Removed_Conc) + + InteractionScores_RF$Raw_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores_RF$Z_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores_RF$lm_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_r + InteractionScores_RF$R_Squared_r[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores_RF$Sum_Z_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_r[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE)/(Total_Conc_Nums-1) + + InteractionScores_RF$Raw_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores_RF$Z_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores_RF$lm_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_AUC + InteractionScores_RF$R_Squared_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores_RF$Sum_Z_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE)/(Total_Conc_Nums-1) + } + + if(X_stats_interaction$mean_L[1] == 0 | is.na(X_stats_interaction$mean_L[1]) ){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for missing values in Z score calculatiom + if(sum(X_stats_interaction$NG,na.rm = TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #NA values for the next part since there's an NA or 0 at the no drug. + gene_lm_L <- NA + gene_lm_K <- NA + gene_lm_r <- NA + gene_lm_AUC <- NA + + gene_interaction_L <- NA + r_squared_l <- NA + gene_interaction_K <- NA + r_squared_K <- NA + gene_interaction_r <- NA + r_squared_r <- NA + gene_interaction_AUC <- NA + r_squared_AUC <- NA + + X_stats_interaction$Raw_Shift_L <- NA + X_stats_interaction$Raw_Shift_K <- NA + X_stats_interaction$Raw_Shift_r <- NA + X_stats_interaction$Raw_Shift_AUC <- NA + + X_stats_interaction$Z_Shift_L <- NA + X_stats_interaction$Z_Shift_K <- NA + X_stats_interaction$Z_Shift_r <- NA + X_stats_interaction$Z_Shift_AUC <- NA + + InteractionScores_RF$OrfRep[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$OrfRep[1] + InteractionScores_RF$Gene[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$Gene[1] + + InteractionScores_RF$Raw_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores_RF$Z_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores_RF$lm_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_L + InteractionScores_RF$R_Squared_L[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores_RF$Sum_Z_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_L[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + + InteractionScores_RF$Raw_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores_RF$Z_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores_RF$lm_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_K + InteractionScores_RF$R_Squared_K[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores_RF$Sum_Z_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_K[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + + InteractionScores_RF$Raw_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores_RF$Z_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores_RF$lm_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_r + InteractionScores_RF$R_Squared_r[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores_RF$Sum_Z_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_r[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + + InteractionScores_RF$Raw_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores_RF$Z_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores_RF$lm_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_AUC + InteractionScores_RF$R_Squared_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores_RF$Sum_Z_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + } + + if(i == 1){ + X_stats_interaction_ALL_RF <- X_stats_interaction + } + if(i > 1){ + X_stats_interaction_ALL_RF <- rbind(X_stats_interaction_ALL_RF,X_stats_interaction) + } + + InteractionScores_RF$NG[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$NG,na.rm = TRUE) + InteractionScores_RF$DB[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$DB,na.rm = TRUE) + InteractionScores_RF$SM[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$SM,na.rm = TRUE) + + #X_stats_L_int_temp <- rbind(X_stats_L_int_temp,X_stats_L_int) + + + } + print("Pass RF Calculation loop") + + lm_sd_L <- sd(InteractionScores_RF$lm_Score_L,na.rm=TRUE) + lm_sd_K <- sd(InteractionScores_RF$lm_Score_K,na.rm=TRUE) + lm_sd_r <- sd(InteractionScores_RF$lm_Score_r,na.rm=TRUE) + lm_sd_AUC <- sd(InteractionScores_RF$lm_Score_AUC,na.rm=TRUE) + + lm_mean_L <- mean(InteractionScores_RF$lm_Score_L,na.rm=TRUE) + lm_mean_K <- mean(InteractionScores_RF$lm_Score_K,na.rm=TRUE) + lm_mean_r <- mean(InteractionScores_RF$lm_Score_r,na.rm=TRUE) + lm_mean_AUC <- mean(InteractionScores_RF$lm_Score_AUC,na.rm=TRUE) + + print(paste("Mean RF linear regression score L",lm_mean_L)) + + + InteractionScores_RF$Z_lm_L <- (InteractionScores_RF$lm_Score_L - lm_mean_L)/(lm_sd_L) + InteractionScores_RF$Z_lm_K <- (InteractionScores_RF$lm_Score_K - lm_mean_K)/(lm_sd_K) + InteractionScores_RF$Z_lm_r <- (InteractionScores_RF$lm_Score_r - lm_mean_r)/(lm_sd_r) + InteractionScores_RF$Z_lm_AUC <- (InteractionScores_RF$lm_Score_AUC - lm_mean_AUC)/(lm_sd_AUC) + + + InteractionScores_RF <- InteractionScores_RF[order(InteractionScores_RF$Z_lm_L,decreasing=TRUE),] + InteractionScores_RF <- InteractionScores_RF[order(InteractionScores_RF$NG,decreasing=TRUE),] + write.csv(InteractionScores_RF,paste(outputpath,"RF_ZScores_Interaction.csv",sep=""),row.names=FALSE) + + + for(i in 1:num_genes_RF){ + Gene_Sel <- unique(InteractionScores_RF$OrfRep)[i] + X_ZCalculations <- X_stats_interaction_ALL_RF[X_stats_interaction_ALL_RF$OrfRep == Gene_Sel,] + X_Int_Scores <- InteractionScores_RF[InteractionScores_RF$OrfRep == Gene_Sel,] + + p_rf_l[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_L)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_l), ymax=0+(2*WT_sd_l)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_L,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg Zscore =",round(X_Int_Scores$Avg_Zscore_L,2))) + + annotate("text",x=1,y=25,label = paste("lm Zscore =",round(X_Int_Scores$Z_lm_L,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_rf_K[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_K)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_K), ymax=0+(2*WT_sd_K)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_K,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_K,2))) + + annotate("text",x=1,y=25,label = paste("lm ZScore =",round(X_Int_Scores$Z_lm_L,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_rf_r[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_r)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-0.65,0.65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_r), ymax=0+(2*WT_sd_r)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=0.45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_r,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=0.35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_r,2))) + + annotate("text",x=1,y=0.25,label = paste("lm ZScore =",round(X_Int_Scores$Z_lm_r,2))) + + annotate("text",x=1,y=-0.25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-0.35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-0.45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-0.6,-0.4,-0.2,0,0.2,0.4,0.6)) + + theme_Publication() + + p_rf_AUC[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_AUC)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-6500,6500)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_AUC), ymax=0+(2*WT_sd_AUC)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=4500,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_AUC,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=3500,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_AUC,2))) + + annotate("text",x=1,y=2500,label = paste("lm ZScore =",round(X_Int_Scores$Z_lm_AUC,2))) + + annotate("text",x=1,y=-2500,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-3500,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-4500,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-6000,-5000,-4000,-3000,-2000,-1000,0,1000,2000,3000,4000,5000,6000)) + + theme_Publication() + + + + if(i == 1){ + X_stats_interaction_ALL_RF_final <- X_ZCalculations + } + if(i > 1){ + X_stats_interaction_ALL_RF_final <- rbind(X_stats_interaction_ALL_RF_final,X_ZCalculations) + } + } + print("Pass RF ggplot loop") + write.csv(X_stats_interaction_ALL_RF_final,paste(outputpath,"RF_ZScore_Calculations.csv",sep=""),row.names = FALSE) + + + ####### Part 5 - Get Zscores for Gene deletion strains + + + + #get total number of genes for the next loop + num_genes <- length(unique(X2$OrfRep)) + print(num_genes) + + #create the output data.frame containing columns for each deletion strain + InteractionScores <- unique(X2["OrfRep"]) + #InteractionScores$Gene <- unique(X2$Gene) + InteractionScores$Gene <- NA + InteractionScores$Raw_Shift_L <- NA + InteractionScores$Z_Shift_L <- NA + InteractionScores$lm_Score_L <- NA + InteractionScores$Z_lm_L <- NA + InteractionScores$R_Squared_L <- NA + InteractionScores$Sum_Z_Score_L <- NA + InteractionScores$Avg_Zscore_L <- NA + InteractionScores$Raw_Shift_K <- NA + InteractionScores$Z_Shift_K <- NA + InteractionScores$lm_Score_K <- NA + InteractionScores$Z_lm_K <- NA + InteractionScores$R_Squared_K <- NA + InteractionScores$Sum_Z_Score_K <- NA + InteractionScores$Avg_Zscore_K <- NA + InteractionScores$Raw_Shift_r <- NA + InteractionScores$Z_Shift_r <- NA + InteractionScores$lm_Score_r <- NA + InteractionScores$Z_lm_r <- NA + InteractionScores$R_Squared_r <- NA + InteractionScores$Sum_Z_Score_r <- NA + InteractionScores$Avg_Zscore_r <- NA + InteractionScores$Raw_Shift_AUC <- NA + InteractionScores$Z_Shift_AUC <- NA + InteractionScores$lm_Score_AUC <- NA + InteractionScores$Z_lm_AUC <- NA + InteractionScores$R_Squared_AUC <- NA + InteractionScores$Sum_Z_Score_AUC <- NA + InteractionScores$Avg_Zscore_AUC <- NA + InteractionScores$NG <- NA + InteractionScores$DB <- NA + InteractionScores$SM <- NA + + for(i in 1:num_genes){ + #get each deletion strain ORF + Gene_Sel <- unique(X2$OrfRep)[i] + #extract only the current deletion strain and its data + X_Gene_Sel <- X2[X2$OrfRep == Gene_Sel,] + + X_stats_interaction <- ddply(X_Gene_Sel, c("OrfRep","Gene","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm = TRUE), + median_L = median(l,na.rm = TRUE), + sd_L = sd(l,na.rm = TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm = TRUE), + median_K = median(K,na.rm = TRUE), + sd_K = sd(K,na.rm = TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm = TRUE), + median_r = median(r,na.rm = TRUE), + sd_r = sd(r,na.rm = TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm = TRUE), + median_AUC = median(AUC,na.rm = TRUE), + sd_AUC = sd(AUC,na.rm = TRUE), + se_AUC = sd_AUC / sqrt(N-1), + NG = sum(NG,na.rm=TRUE), + DB= sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + #Get shift vals + #if L is 0, that means the no growth on no drug + #if L is NA at 0, that means the spot was removed due to contamination + #if L is 0, keep the shift at 0 and for other drug concs calculate delta Ls with no shift + #otherwise calculate shift at no drug conc + if(is.na(X_stats_interaction$mean_L[1]) | X_stats_interaction$mean_L[1] == 0 ){ + X_stats_interaction$Raw_Shift_L <- 0 + X_stats_interaction$Raw_Shift_K <- 0 + X_stats_interaction$Raw_Shift_r <- 0 + X_stats_interaction$Raw_Shift_AUC <- 0 + X_stats_interaction$Z_Shift_L <- 0 + X_stats_interaction$Z_Shift_K <- 0 + X_stats_interaction$Z_Shift_r <- 0 + X_stats_interaction$Z_Shift_AUC <- 0 + }else{ + X_stats_interaction$Raw_Shift_L <- X_stats_interaction$mean_L[1] - Background_L + X_stats_interaction$Raw_Shift_K <- X_stats_interaction$mean_K[1] - Background_K + X_stats_interaction$Raw_Shift_r <- X_stats_interaction$mean_r[1] - Background_r + X_stats_interaction$Raw_Shift_AUC <- X_stats_interaction$mean_AUC[1] - Background_AUC + X_stats_interaction$Z_Shift_L <- X_stats_interaction$Raw_Shift_L[1]/X_stats_BY_L$sd[1] + X_stats_interaction$Z_Shift_K <- X_stats_interaction$Raw_Shift_K[1]/X_stats_BY_K$sd[1] + X_stats_interaction$Z_Shift_r <- X_stats_interaction$Raw_Shift_r[1]/X_stats_BY_r$sd[1] + X_stats_interaction$Z_Shift_AUC <- X_stats_interaction$Raw_Shift_AUC[1]/X_stats_BY_AUC$sd[1] + } + + + #get WT vals + X_stats_interaction$WT_l <- X_stats_BY_L$mean + X_stats_interaction$WT_K <- X_stats_BY_K$mean + X_stats_interaction$WT_r <- X_stats_BY_r$mean + X_stats_interaction$WT_AUC <- X_stats_BY_AUC$mean + + #Get WT SD + X_stats_interaction$WT_sd_l <- X_stats_BY_L$sd + X_stats_interaction$WT_sd_K <- X_stats_BY_K$sd + X_stats_interaction$WT_sd_r <- X_stats_BY_r$sd + X_stats_interaction$WT_sd_AUC <- X_stats_BY_AUC$sd + + + #only get scores if there's growth at no drug + if(X_stats_interaction$mean_L[1] != 0 & !is.na(X_stats_interaction$mean_L[1])){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for no growth values in Z score calculation + if(sum(X_stats_interaction$NG,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #get linear model + gene_lm_L <- lm(formula = Delta_L ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_K <- lm(formula = Delta_K ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_r <- lm(formula = Delta_r ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_AUC <- lm(formula = Delta_AUC ~ Conc_Num_Factor,data = X_stats_interaction) + + #get interaction score calculated by linear model and R-squared value for the fit + gene_interaction_L <- MAX_CONC*(gene_lm_L$coefficients[2]) + gene_lm_L$coefficients[1] + r_squared_l <- summary(gene_lm_L)$r.squared + gene_interaction_K <- MAX_CONC*(gene_lm_K$coefficients[2]) + gene_lm_K$coefficients[1] + r_squared_K <- summary(gene_lm_K)$r.squared + gene_interaction_r <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_r$coefficients[1] + r_squared_r <- summary(gene_lm_r)$r.squared + gene_interaction_AUC <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_AUC$coefficients[1] + r_squared_AUC <- summary(gene_lm_AUC)$r.squared + + #Get total of non removed values + Num_non_Removed_Conc <- Total_Conc_Nums - sum(X_stats_interaction$DB,na.rm = TRUE) - 1 + + #report the scores + InteractionScores$OrfRep[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$OrfRep[1]) + InteractionScores$Gene[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$Gene[1]) + + InteractionScores$Raw_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores$Z_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores$lm_Score_L[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_L + InteractionScores$Z_lm_L[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_L-lm_mean_L)/lm_sd_L + InteractionScores$R_Squared_L[InteractionScores$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores$Sum_Z_Score_L[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE) + InteractionScores$Avg_Zscore_L[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE)/(Num_non_Removed_Conc) + + + InteractionScores$Raw_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores$Z_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores$lm_Score_K[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_K + InteractionScores$Z_lm_K[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_K-lm_mean_K)/lm_sd_K + InteractionScores$R_Squared_K[InteractionScores$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores$Sum_Z_Score_K[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE) + InteractionScores$Avg_Zscore_K[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE)/(Num_non_Removed_Conc) + + InteractionScores$Raw_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores$Z_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores$lm_Score_r[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_r + InteractionScores$Z_lm_r[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_r-lm_mean_r)/lm_sd_r + InteractionScores$R_Squared_r[InteractionScores$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores$Sum_Z_Score_r[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE) + InteractionScores$Avg_Zscore_r[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE)/(Total_Conc_Nums-1) + + InteractionScores$Raw_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores$Z_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores$lm_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_AUC + InteractionScores$Z_lm_AUC[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_AUC-lm_mean_AUC)/lm_sd_AUC + InteractionScores$R_Squared_AUC[InteractionScores$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores$Sum_Z_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE) + InteractionScores$Avg_Zscore_AUC[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE)/(Total_Conc_Nums-1) + } + + if(X_stats_interaction$mean_L[1] == 0 | is.na(X_stats_interaction$mean_L[1]) ){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for missing values in Z score calculatiom + if(sum(X_stats_interaction$NG,na.rm = TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #NA values for the next part since there's an NA or 0 at the no drug. + gene_lm_L <- NA + gene_lm_K <- NA + gene_lm_r <- NA + + gene_interaction_L <- NA + r_squared_l <- NA + gene_interaction_K <- NA + r_squared_K <- NA + gene_interaction_r <- NA + r_squared_r <- NA + + X_stats_interaction$Raw_Shift_L <- NA + X_stats_interaction$Raw_Shift_K <- NA + X_stats_interaction$Raw_Shift_r <- NA + X_stats_interaction$Raw_Shift_AUC <- NA + + X_stats_interaction$Z_Shift_L <- NA + X_stats_interaction$Z_Shift_K <- NA + X_stats_interaction$Z_Shift_r <- NA + X_stats_interaction$Z_Shift_AUC <- NA + + InteractionScores$OrfRep[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$OrfRep[1]) + InteractionScores$Gene[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$Gene[1]) + + InteractionScores$Raw_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores$Z_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores$lm_Score_L[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_L[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$R_Squared_L[InteractionScores$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores$Sum_Z_Score_L[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_L[InteractionScores$OrfRep == Gene_Sel] <- NA + + InteractionScores$Raw_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores$Z_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores$lm_Score_K[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_K[InteractionScores$OrfRep == Gene_Sel] <-NA + InteractionScores$R_Squared_K[InteractionScores$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores$Sum_Z_Score_K[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_K[InteractionScores$OrfRep == Gene_Sel] <- NA + + InteractionScores$Raw_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores$Z_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores$lm_Score_r[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_r[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$R_Squared_r[InteractionScores$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores$Sum_Z_Score_r[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_r[InteractionScores$OrfRep == Gene_Sel] <- NA + + InteractionScores$Raw_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores$Z_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores$lm_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$R_Squared_AUC[InteractionScores$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores$Sum_Z_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + } + + if(i == 1){ + X_stats_interaction_ALL <- X_stats_interaction + } + if(i > 1){ + X_stats_interaction_ALL <- rbind(X_stats_interaction_ALL,X_stats_interaction) + } + + InteractionScores$NG[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$NG,na.rm = TRUE) + InteractionScores$DB[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$DB,na.rm = TRUE) + InteractionScores$SM[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$SM,na.rm = TRUE) + + #X_stats_L_int_temp <- rbind(X_stats_L_int_temp,X_stats_L_int) + + + } + print("Pass Int Calculation loop") + InteractionScores <- InteractionScores[order(InteractionScores$Z_lm_L,decreasing=TRUE),] + InteractionScores <- InteractionScores[order(InteractionScores$NG,decreasing=TRUE),] + df_order_by_OrfRep <- unique(InteractionScores$OrfRep) + #X_stats_interaction_ALL <- X_stats_interaction_ALL[order(X_stats_interaction_ALL$NG,decreasing=TRUE),] + write.csv(InteractionScores,paste(outputpath,"ZScores_Interaction.csv",sep=""),row.names=FALSE) + + InteractionScores_deletion_enhancers_L <- InteractionScores[InteractionScores$Avg_Zscore_L >= 2,] + InteractionScores_deletion_enhancers_K <- InteractionScores[InteractionScores$Avg_Zscore_K <= -2,] + InteractionScores_deletion_suppressors_L <- InteractionScores[InteractionScores$Avg_Zscore_L <= -2,] + InteractionScores_deletion_suppressors_K <- InteractionScores[InteractionScores$Avg_Zscore_K >= 2,] + InteractionScores_deletion_enhancers_and_Suppressors_L <- InteractionScores[InteractionScores$Avg_Zscore_L >= 2 | InteractionScores$Avg_Zscore_L <= -2,] + InteractionScores_deletion_enhancers_and_Suppressors_K <- InteractionScores[InteractionScores$Avg_Zscore_K >= 2 | InteractionScores$Avg_Zscore_K <= -2,] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L <- InteractionScores[InteractionScores$Z_lm_L >= 2 & InteractionScores$Avg_Zscore_L <= -2,] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L <- InteractionScores[InteractionScores$Z_lm_L <= -2 & InteractionScores$Avg_Zscore_L >= 2,] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K <- InteractionScores[InteractionScores$Z_lm_K <= -2 & InteractionScores$Avg_Zscore_K >= 2,] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K <- InteractionScores[InteractionScores$Z_lm_K >= 2 & InteractionScores$Avg_Zscore_K <= -2,] + + InteractionScores_deletion_enhancers_L <- InteractionScores_deletion_enhancers_L[!is.na(InteractionScores_deletion_enhancers_L$OrfRep),] + InteractionScores_deletion_enhancers_K <- InteractionScores_deletion_enhancers_K[!is.na(InteractionScores_deletion_enhancers_K$OrfRep),] + InteractionScores_deletion_suppressors_L <- InteractionScores_deletion_suppressors_L[!is.na(InteractionScores_deletion_suppressors_L$OrfRep),] + InteractionScores_deletion_suppressors_K <- InteractionScores_deletion_suppressors_K[!is.na(InteractionScores_deletion_suppressors_K$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_L <- InteractionScores_deletion_enhancers_and_Suppressors_L[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_L$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_K <- InteractionScores_deletion_enhancers_and_Suppressors_K[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_K$OrfRep),] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L <- InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L[!is.na(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L$OrfRep),] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L <- InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L[!is.na(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L$OrfRep),] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K <- InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K[!is.na(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K$OrfRep),] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K <- InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K[!is.na(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K$OrfRep),] + + write.csv(InteractionScores_deletion_enhancers_L,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_K,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_L,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_K,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_L,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_K,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L,paste(outputpath,"ZScores_Interaction_Suppressors_and_lm_Enhancers_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L,paste(outputpath,"ZScores_Interaction_Enhancers_and_lm_Suppressors_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K,paste(outputpath,"ZScores_Interaction_Suppressors_and_lm_Enhancers_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K,paste(outputpath,"ZScores_Interaction_Enhancers_and_lm_Suppressors_K.csv",sep=""),row.names=FALSE) + + #get enhancers and suppressors for linear regression + InteractionScores_deletion_enhancers_L_lm <- InteractionScores[InteractionScores$Z_lm_L >= 2,] + InteractionScores_deletion_enhancers_K_lm <- InteractionScores[InteractionScores$Z_lm_K <= -2,] + InteractionScores_deletion_suppressors_L_lm <- InteractionScores[InteractionScores$Z_lm_L <= -2,] + InteractionScores_deletion_suppressors_K_lm <- InteractionScores[InteractionScores$Z_lm_K >= 2,] + InteractionScores_deletion_enhancers_and_Suppressors_L_lm <- InteractionScores[InteractionScores$Z_lm_L >= 2 | InteractionScores$Z_lm_L <= -2,] + InteractionScores_deletion_enhancers_and_Suppressors_K_lm <- InteractionScores[InteractionScores$Z_lm_K >= 2 | InteractionScores$Z_lm_K <= -2,] + + InteractionScores_deletion_enhancers_L_lm <- InteractionScores_deletion_enhancers_L_lm[!is.na(InteractionScores_deletion_enhancers_L_lm$OrfRep),] + InteractionScores_deletion_enhancers_K_lm <- InteractionScores_deletion_enhancers_K_lm[!is.na(InteractionScores_deletion_enhancers_K_lm$OrfRep),] + InteractionScores_deletion_suppressors_L_lm <- InteractionScores_deletion_suppressors_L_lm[!is.na(InteractionScores_deletion_suppressors_L_lm$OrfRep),] + InteractionScores_deletion_suppressors_K_lm <- InteractionScores_deletion_suppressors_K_lm[!is.na(InteractionScores_deletion_suppressors_K_lm$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_L_lm <- InteractionScores_deletion_enhancers_and_Suppressors_L_lm[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_L_lm$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_K_lm <- InteractionScores_deletion_enhancers_and_Suppressors_K_lm[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_K_lm$OrfRep),] + + write.csv(InteractionScores_deletion_enhancers_L_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_L_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_K_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_K_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_L_lm,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_L_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_K_lm,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_K_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_L_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_L_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_K_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_K_lm.csv",sep=""),row.names=FALSE) + + + write.csv(Labels,file=paste("../Code/StudyInfo.csv"),row.names = FALSE) + print('ln 1570 write StudyInfo.csv after ') + #write.table(Labels,file=paste("../Code/StudyInfo.txt"),sep="\t",row.names = FALSE) + + for(i in 1:num_genes){ + Gene_Sel <- unique(InteractionScores$OrfRep)[i] + X_ZCalculations <- X_stats_interaction_ALL[X_stats_interaction_ALL$OrfRep == Gene_Sel,] + X_Int_Scores <- InteractionScores[InteractionScores$OrfRep == Gene_Sel,] + + p_l[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_L)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_l), ymax=0+(2*WT_sd_l)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_L,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_L,2))) + + annotate("text",x=1,y=25,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_L,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_K[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_K)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_K), ymax=0+(2*WT_sd_K)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_K,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_K,2))) + + annotate("text",x=1,y=25,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_K,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_r[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_r)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-0.65,0.65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_r), ymax=0+(2*WT_sd_r)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=0.45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_r,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=0.35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_r,2))) + + annotate("text",x=1,y=0.25,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_r,2))) + + annotate("text",x=1,y=-0.25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-0.35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-0.45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-0.6,-0.4,-0.2,0,0.2,0.4,0.6)) + + theme_Publication() + + p_AUC[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_AUC)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-6500,6500)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_AUC), ymax=0+(2*WT_sd_AUC)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=4500,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_AUC,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=3500,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_AUC,2))) + + annotate("text",x=1,y=2500,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_AUC,2))) + + annotate("text",x=1,y=-2500,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-3500,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-4500,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-6000,-5000,-4000,-3000,-2000,-1000,0,1000,2000,3000,4000,5000,6000)) + + theme_Publication() + + + + if(i == 1){ + X_stats_interaction_ALL_final <- X_ZCalculations + } + if(i > 1){ + X_stats_interaction_ALL_final <- rbind(X_stats_interaction_ALL_final,X_ZCalculations) + } + } + print("Pass Int ggplot loop") + write.csv(X_stats_interaction_ALL_final,paste(outputpath,"ZScore_Calculations.csv",sep=""),row.names = FALSE) + + + + + + + Blank <- ggplot(X2_RF) + geom_blank() + + pdf(paste(outputpath,"InteractionPlots.pdf",sep=""),width = 16, height = 16, onefile = TRUE) + + X_stats_X2_RF <- ddply(X2_RF, c("Conc_Num","Conc_Num_Factor"), summarise, + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_AUC = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + NG = sum(NG,na.rm=TRUE), + DB = sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + L_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,l)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,160)) + + annotate("text",x=-0.25,y=10,label="NG") + + annotate("text",x=-0.25,y=5,label="DB") + + annotate("text",x=-0.25,y=0,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=0,label=X_stats_X2_RF$SM) + + theme_Publication() + + K_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,K)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(-20,160)) + + annotate("text",x=-0.25,y=-5,label="NG") + + annotate("text",x=-0.25,y=-12.5,label="DB") + + annotate("text",x=-0.25,y=-20,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-5,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-12.5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-20,label=X_stats_X2_RF$SM) + + theme_Publication() + + R_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,r)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + annotate("text",x=-0.25,y=.9,label="NG") + + annotate("text",x=-0.25,y=.8,label="DB") + + annotate("text",x=-0.25,y=.7,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.9,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.8,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.7,label=X_stats_X2_RF$SM) + + theme_Publication() + + AUC_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,AUC)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(0,12500)) + + annotate("text",x=-0.25,y=11000,label="NG") + + annotate("text",x=-0.25,y=10000,label="DB") + + annotate("text",x=-0.25,y=9000,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=11000,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10000,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=9000,label=X_stats_X2_RF$SM) + + theme_Publication() + + + L_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),l)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,160)) + + theme_Publication() + + K_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),K)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(0,130)) + + theme_Publication() + + r_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),r)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + theme_Publication() + + AUC_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),AUC)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(0,12500)) + + theme_Publication() + + + grid.arrange(L_Stats,K_Stats,R_Stats,AUC_Stats,ncol=2,nrow=2) + grid.arrange(L_Stats_Box,K_Stats_Box,r_Stats_Box,AUC_Stats_Box,ncol=2,nrow=2) + + + + #plot the references + #grid.arrange(p3,p3_K,p3_r,p4,p4_K,p4_r,p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=4) + #grid.arrange(p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=2) + + #loop for grid arrange 4x3 + j <- rep(1,((num_genes)/3)-1) + for(n in 1:length(j)){ + j[n+1] <- n*3 + 1 + } + #loop for printing each plot + num <- 0 + for(m in 1:(round((num_genes)/3)-1)){ + num <- j[m] + grid.arrange(p_l[[num]],p_K[[num]],p_r[[num]],p_AUC[[num]],p_l[[num+1]],p_K[[num+1]],p_r[[num+1]],p_AUC[[num+1]],p_l[[num+2]],p_K[[num+2]],p_r[[num+2]],p_AUC[[num+2]],ncol=4,nrow=3) + #grid.arrange(p_l[[364]],p_K[[364]],p_r[[364]],p_l[[365]],p_K[[365]],p_r[[365]],p_l[[366]],p_K[[366]],p_r[[366]],ncol=3,nrow=3) + + + #p1[[num+3]],p_K[[num+3]],p_r[[num+3]],p1[[num+4]],p_K[[num+4]],p_r[[num+4]] + } + if(num_genes != (num+2)){ + total_num = num_genes - (num+2) + if(total_num == 5){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],p_l[[num+5]],p_K[[num+5]],p_r[[num+5]],p_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_AUC[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],p_AUC[[num+7]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + if(total_num == 4){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],p_l[[num+5]],p_K[[num+5]],p_r[[num+5]],p_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_AUC[[num+6]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + + if(total_num == 3){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],p_l[[num+5]],p_K[[num+5]],p_r[[num+5]],p_AUC[[num+5]],ncol=4,nrow=3) + #grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 2){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 1){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + } + dev.off() + + + + pdf(paste(outputpath,"RF_InteractionPlots.pdf",sep=""),width = 16, height = 16, onefile = TRUE) + + X_stats_X2_RF <- ddply(X2_RF, c("Conc_Num","Conc_Num_Factor"), summarise, + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_AUC = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + NG = sum(NG,na.rm=TRUE), + DB = sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + L_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,l)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,130)) + + annotate("text",x=-0.25,y=10,label="NG") + + annotate("text",x=-0.25,y=5,label="DB") + + annotate("text",x=-0.25,y=0,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=0,label=X_stats_X2_RF$SM) + + theme_Publication() + + K_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,K)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(-20,160)) + + annotate("text",x=-0.25,y=-5,label="NG") + + annotate("text",x=-0.25,y=-12.5,label="DB") + + annotate("text",x=-0.25,y=-20,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-5,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-12.5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-20,label=X_stats_X2_RF$SM) + + theme_Publication() + + R_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,r)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + annotate("text",x=-0.25,y=.9,label="NG") + + annotate("text",x=-0.25,y=.8,label="DB") + + annotate("text",x=-0.25,y=.7,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.9,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.8,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.7,label=X_stats_X2_RF$SM) + + theme_Publication() + + AUC_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,AUC)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(0,12500)) + + annotate("text",x=-0.25,y=11000,label="NG") + + annotate("text",x=-0.25,y=10000,label="DB") + + annotate("text",x=-0.25,y=9000,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=11000,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10000,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=9000,label=X_stats_X2_RF$SM) + + theme_Publication() + + + L_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),l)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,130)) + + theme_Publication() + + K_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),K)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(0,160)) + + theme_Publication() + + r_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),r)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + theme_Publication() + + AUC_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),AUC)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(12000,0)) + + theme_Publication() + + + grid.arrange(L_Stats,K_Stats,R_Stats,AUC_Stats,ncol=2,nrow=2) + grid.arrange(L_Stats_Box,K_Stats_Box,r_Stats_Box,AUC_Stats_Box,ncol=2,nrow=2) + + + + #plot the references + #grid.arrange(p3,p3_K,p3_r,p4,p4_K,p4_r,p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=4) + #grid.arrange(p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=2) + + #loop for grid arrange 4x3 + j <- rep(1,((num_genes_RF)/3)-1) + for(n in 1:length(j)){ + j[n+1] <- n*3 + 1 + } + #loop for printing each plot + num <- 0 + for(m in 1:(round((num_genes_RF)/3)-1)){ + num <- j[m] + grid.arrange(p_rf_l[[num]],p_rf_K[[num]],p_rf_r[[num]],p_rf_AUC[[num]],p_rf_l[[num+1]],p_rf_K[[num+1]],p_rf_r[[num+1]],p_rf_AUC[[num+1]],p_rf_l[[num+2]],p_rf_K[[num+2]],p_rf_r[[num+2]],p_rf_AUC[[num+2]],ncol=4,nrow=3) + #grid.arrange(p_rf_l[[364]],p_rf_K[[364]],p_rf_r[[364]],p_rf_l[[365]],p_rf_K[[365]],p_rf_r[[365]],p_rf_l[[366]],p_rf_K[[366]],p_rf_r[[366]],ncol=3,nrow=3) + + + #p1[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p1[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]] + } + if(num_genes_RF != (num+2)){ + total_num = num_genes_RF - (num+2) + if(total_num == 5){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],p_rf_l[[num+5]],p_rf_K[[num+5]],p_rf_r[[num+5]],p_rf_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_AUC[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],p_rf_AUC[[num+7]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + if(total_num == 4){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],p_rf_l[[num+5]],p_rf_K[[num+5]],p_rf_r[[num+5]],p_rf_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_AUC[[num+6]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + + if(total_num == 3){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],p_rf_l[[num+5]],p_rf_K[[num+5]],p_rf_r[[num+5]],p_rf_AUC[[num+5]],ncol=4,nrow=3) + #grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 2){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 1){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + } + dev.off() + + #print rank plots for L and K gene interactions + + + InteractionScores_AdjustMissing <- InteractionScores + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_L),]$Avg_Zscore_L <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_K),]$Avg_Zscore_K <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_r),]$Avg_Zscore_r <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_AUC),]$Avg_Zscore_AUC <- 0.001 + + InteractionScores_AdjustMissing$L_Rank <- NA + InteractionScores_AdjustMissing$K_Rank <- NA + InteractionScores_AdjustMissing$r_Rank <- NA + InteractionScores_AdjustMissing$AUC_Rank <- NA + + InteractionScores_AdjustMissing$L_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_L) + InteractionScores_AdjustMissing$K_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_K) + InteractionScores_AdjustMissing$r_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_r) + InteractionScores_AdjustMissing$AUC_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_AUC) + + # + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_L),]$Z_lm_L <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_K),]$Z_lm_K <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_r),]$Z_lm_r <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_AUC),]$Z_lm_AUC <- 0.001 + + InteractionScores_AdjustMissing$L_Rank_lm <- NA + InteractionScores_AdjustMissing$K_Rank_lm <- NA + InteractionScores_AdjustMissing$r_Rank_lm <- NA + InteractionScores_AdjustMissing$AUC_Rank_lm <- NA + + InteractionScores_AdjustMissing$L_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_L) + InteractionScores_AdjustMissing$K_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_K) + InteractionScores_AdjustMissing$r_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_r) + InteractionScores_AdjustMissing$AUC_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_AUC) + + + + Rank_L_1SD <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L >= 1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L >= 2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L >= 3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K <= -1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K <= -2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K <= -3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + pdf(paste(outputpath,"RankPlots.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD,Rank_L_2SD,Rank_L_3SD,Rank_K_1SD,Rank_K_2SD,Rank_K_3SD,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext,Rank_L_2SD_notext,Rank_L_3SD_notext,Rank_K_1SD_notext,Rank_K_2SD_notext,Rank_K_3SD_notext,ncol=3,nrow=2) + + dev.off() + + + Rank_L_1SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L >= 1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L >= 2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L >= 3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K <= -1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K <= -2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K <= -3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + pdf(paste(outputpath,"RankPlots_lm.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD_lm,Rank_L_2SD_lm,Rank_L_3SD_lm,Rank_K_1SD_lm,Rank_K_2SD_lm,Rank_K_3SD_lm,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext_lm,Rank_L_2SD_notext_lm,Rank_L_3SD_notext_lm,Rank_K_1SD_notext_lm,Rank_K_2SD_notext_lm,Rank_K_3SD_notext_lm,ncol=3,nrow=2) + + dev.off() + + + + X_NArm <- InteractionScores[!is.na(InteractionScores$Z_lm_L) | !is.na(InteractionScores$Avg_Zscore_L) ,] + + #find overlaps + X_NArm$Overlap <- "No Effect" + try(X_NArm[X_NArm$Z_lm_L >= 2 & X_NArm$Avg_Zscore_L >= 2,]$Overlap <- "Deletion Enhancer Both") + try(X_NArm[X_NArm$Z_lm_L <= -2 & X_NArm$Avg_Zscore_L <= -2,]$Overlap <- "Deletion Suppressor Both") + try(X_NArm[X_NArm$Z_lm_L >= 2 & X_NArm$Avg_Zscore_L <= 2,]$Overlap <- "Deletion Enhancer lm only") + try(X_NArm[X_NArm$Z_lm_L <= 2 & X_NArm$Avg_Zscore_L >= 2,]$Overlap <- "Deletion Enhancer Avg Zscore only") + try(X_NArm[X_NArm$Z_lm_L <= -2 & X_NArm$Avg_Zscore_L >= -2,]$Overlap <- "Deletion Suppressor lm only") + try(X_NArm[X_NArm$Z_lm_L >= -2 & X_NArm$Avg_Zscore_L <= -2,]$Overlap <- "Deletion Suppressor Avg Zscore only") + try(X_NArm[X_NArm$Z_lm_L >= 2 & X_NArm$Avg_Zscore_L <= -2,]$Overlap <- "Deletion Enhancer lm, Deletion Suppressor Avg Z score") + try(X_NArm[X_NArm$Z_lm_L <= -2 & X_NArm$Avg_Zscore_L >= 2,]$Overlap <- "Deletion Suppressor lm, Deletion Enhancer Avg Z score") + + #get the linear model info and the r-squared value for all CPPs in results 1 vs results 2 + get_lm_L <- lm(X_NArm$Z_lm_L~X_NArm$Avg_Zscore_L) + L_lm <- summary(get_lm_L) + + get_lm_K <- lm(X_NArm$Z_lm_K~X_NArm$Avg_Zscore_K) + K_lm <- summary(get_lm_K) + + get_lm_r <- lm(X_NArm$Z_lm_r~X_NArm$Avg_Zscore_r) + r_lm <- summary(get_lm_r) + + get_lm_AUC <- lm(X_NArm$Z_lm_AUC~X_NArm$Avg_Zscore_AUC) + AUC_lm <- summary(get_lm_AUC) + + pdf(paste(outputpath,"Avg_Zscore_vs_lm_NA_rm.pdf",sep=""),width = 16, height = 12, onefile = TRUE) + + print(ggplot(X_NArm,aes(Avg_Zscore_L,Z_lm_L)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm L") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(Avg_Zscore_K,Z_lm_K)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm K") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(K_lm$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(Avg_Zscore_r,Z_lm_r)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm r") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(r_lm$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(Avg_Zscore_AUC,Z_lm_AUC)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm AUC") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(AUC_lm$r.squared,2))) + theme_Publication_legend_right()) + + dev.off() + + + lm_v_Zscore_L <- ggplot(X_NArm,aes(Avg_Zscore_L,Z_lm_L,ORF=OrfRep,Gene=Gene,NG=NG,SM=SM,DB=DB)) + geom_point(aes(color=Overlap),shape=3) + + geom_smooth(method = "lm",color=1) + ggtitle("Avg Zscore vs lm L") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm$r.squared,2))) + theme_Publication_legend_right() + + pgg <- ggplotly(lm_v_Zscore_L) + #pgg + plotly_path <- paste(getwd(),"/",outputpath,"Avg_Zscore_vs_lm_NA_rm.html",sep="") + saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + X_NArm$L_Rank <- rank(X_NArm$Avg_Zscore_L) + X_NArm$K_Rank <- rank(X_NArm$Avg_Zscore_K) + X_NArm$r_Rank <- rank(X_NArm$Avg_Zscore_r) + X_NArm$AUC_Rank <- rank(X_NArm$Avg_Zscore_AUC) + + X_NArm$L_Rank_lm <- rank(X_NArm$Z_lm_L) + X_NArm$K_Rank_lm <- rank(X_NArm$Z_lm_K) + X_NArm$r_Rank_lm <- rank(X_NArm$Z_lm_r) + X_NArm$AUC_Rank_lm <- rank(X_NArm$Z_lm_AUC) + + #get the linear model info and the r-squared value for all CPPs in results 1 vs results 2 + get_lm_L2 <- lm(X_NArm$L_Rank_lm~X_NArm$L_Rank) + L_lm2 <- summary(get_lm_L2) + + get_lm_K2 <- lm(X_NArm$K_Rank_lm~X_NArm$K_Rank) + K_lm2 <- summary(get_lm_K2) + + get_lm_r2 <- lm(X_NArm$r_Rank_lm~X_NArm$r_Rank) + r_lm2 <- summary(get_lm_r2) + + get_lm_AUC2 <- lm(X_NArm$AUC_Rank_lm~X_NArm$AUC_Rank) + AUC_lm2 <- summary(get_lm_AUC2) + + num_genes_NArm2 <- (dim(X_NArm)[1])/2 + + pdf(paste(outputpath,"Avg_Zscore_vs_lm_ranked_NA_rm.pdf",sep=""),width = 16, height = 12, onefile = TRUE) + + print(ggplot(X_NArm,aes(L_Rank,L_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank Avg Zscore vs lm L") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(L_lm2$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(K_Rank,K_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank Avg Zscore vs lm K") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(K_lm2$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(r_Rank,r_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank Avg Zscore vs lm r") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(r_lm2$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(AUC_Rank,AUC_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank of Avg Zscore vs lm AUC") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(AUC_lm2$r.squared,2))) + theme_Publication_legend_right()) + + + + dev.off() + + + + Rank_L_1SD <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_L >= 1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_L >= 2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_L >= 3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_K <= -1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_K <= -2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_K <= -3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + pdf(paste(outputpath,"RankPlots_naRM.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD,Rank_L_2SD,Rank_L_3SD,Rank_K_1SD,Rank_K_2SD,Rank_K_3SD,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext,Rank_L_2SD_notext,Rank_L_3SD_notext,Rank_K_1SD_notext,Rank_K_2SD_notext,Rank_K_3SD_notext,ncol=3,nrow=2) + + dev.off() + + + Rank_L_1SD_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_L >= 1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_L >= 2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_L >= 3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_K <= -1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_K <= -2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_K <= -3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + pdf(paste(outputpath,"RankPlots_lm_naRM.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD_lm,Rank_L_2SD_lm,Rank_L_3SD_lm,Rank_K_1SD_lm,Rank_K_2SD_lm,Rank_K_3SD_lm,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext_lm,Rank_L_2SD_notext_lm,Rank_L_3SD_notext_lm,Rank_K_1SD_notext_lm,Rank_K_2SD_notext_lm,Rank_K_3SD_notext_lm,ncol=3,nrow=2) + + dev.off() + +} + + + +#get the linear model info and the r-squared value for all CPPs in results 1 vs results 2 +get_lm_1 <- lm(X_NArm$Z_lm_K~X_NArm$Z_lm_L) +L_lm_1 <- summary(get_lm_1) + +get_lm_2 <- lm(X_NArm$Z_lm_r~X_NArm$Z_lm_L) +L_lm_2 <- summary(get_lm_2) + +get_lm_3 <- lm(X_NArm$Z_lm_AUC~X_NArm$Z_lm_L) +L_lm_3 <- summary(get_lm_3) + +get_lm_4 <- lm(X_NArm$Z_lm_r~X_NArm$Z_lm_K) +L_lm_4 <- summary(get_lm_4) + +get_lm_5 <- lm(X_NArm$Z_lm_AUC~X_NArm$Z_lm_K) +L_lm_5 <- summary(get_lm_5) + +get_lm_6 <- lm(X_NArm$Z_lm_AUC~X_NArm$Z_lm_r) +L_lm_6 <- summary(get_lm_6) + + +pdf(file=paste(outputpath,"Correlation_CPPs.pdf",sep=""),width = 10, height = 7, onefile = TRUE) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_K)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction L vs. Interaction K") + + xlab("z-score L") + ylab("z-score K") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_1$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction L vs. Interaction r") + + xlab("z-score L") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_2$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction L vs. Interaction AUC") + + xlab("z-score L") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_3$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction K vs. Interaction r") + + xlab("z-score K") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_4$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction K vs. Interaction AUC") + + xlab("z-score K") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_5$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_r,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction r vs. Interaction AUC") + + xlab("z-score r") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_6$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +InteractionScores_RF2 <- InteractionScores_RF[!is.na(InteractionScores_RF$Z_lm_L),] +ggplot(X_NArm,aes(Z_lm_L,Z_lm_K)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_L,Z_lm_K),color="cyan") + + ggtitle("Interaction L vs. Interaction K") + + xlab("z-score L") + ylab("z-score K") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_1$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_L,Z_lm_r),color="cyan") + + ggtitle("Interaction L vs. Interaction r") + + xlab("z-score L") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_2$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_L,Z_lm_AUC),color="cyan") + + ggtitle("Interaction L vs. Interaction AUC") + + xlab("z-score L") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_3$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_K,Z_lm_r),color="cyan") + + ggtitle("Interaction K vs. Interaction r") + + xlab("z-score K") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_4$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_K,Z_lm_AUC),color="cyan") + + ggtitle("Interaction K vs. Interaction AUC") + + xlab("z-score K") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_5$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_r,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_r,Z_lm_AUC),color="cyan") + + ggtitle("Interaction r vs. Interaction AUC") + + xlab("z-score r") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_6$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + + + + + +dev.off() + + +#write.csv(Labels,file=paste("../Code/Parameters.csv"),row.names = FALSE) +timestamp() + +#BoneYard*********************************************** +#I'm thinking this parameter needs to be save somewhere "permanent' for the record so outputs can be reproduced. +#take this out of the Arguments. In Matlab I could for future in .mat file. Maybe I could save the SD Args[2] as part of the StudyInfo.txt. +#Corruptable but better than nothing. +#if(is.na(Args[2])){ +# std=3 +#}else { +# std= Arg[2] +#Delta_Background_sdFactor <- 2 #Args[3] +#DelBGFactr <- as.numeric(Delta_Background_sdFactor) +#} + diff --git a/workflow/.old/templates/qhtcp/Exp4/.DS_Store b/workflow/.old/templates/qhtcp/Exp4/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..407f212ccf0cc8464b8326f3016471b842063e12 GIT binary patch literal 6148 zcmeI0F;2rk5Jmr(NJ*ec2PGFsk&Yq-MCJtUsK7P~61LVNN)H7mprJxsf+KJR&V&BW z8riWUQ6US>lcI6F^LKw_YiB0_WVOu~zzo0y8lx$C;W$4XqHyOBfcQDKsIbX5S&_O< zwlPHb?8ZoOgADi0=jRIA-5Dy@izIVp<$p=^^4!fRT^y%{OZm=x&7YPZ$DbE{S@|!r zs=MZD@9O6Y2{Jf5;I@9%YOAfGmQ`ik&S+YFoxh#^SZ&QyHmvT?YFRZ5!x%cE1}8^D zH)-#P@^0thgw&1oOt`vFS%ol-_hA-wWYy9WtU2`z^BmV|j; z4pBKo<&dyxNoYPKtSq5J5q31xs~qB2Hw*;kEW({s01W0`di1g3GlX@mmDWe?(3}YaC1L)FO;s5{u literal 0 HcmV?d00001 diff --git a/workflow/.old/templates/qhtcp/Exp4/ExpFrontend.m b/workflow/.old/templates/qhtcp/Exp4/ExpFrontend.m new file mode 100644 index 00000000..2bdc98c3 --- /dev/null +++ b/workflow/.old/templates/qhtcp/Exp4/ExpFrontend.m @@ -0,0 +1,53 @@ +%FrontEnd utility to copy source result sheet into Exp_ folders of +%StudiesQHTCP/StudyName/Exp1(2,3,4). This allow the automation of path +%capture to the StudiesDataArchieve.txt study log. +%Select, copy and Capture Study Exp_ details to study log + +%Exp meta data collection +W=pwd; +%Load matlab stored data file into workspace +try +ExpLabel= strcat('Exp',W(end)) +questdlg('\fontsize{20} Select the !!Results File','File Selection','OK', struct('Default','OK','Interpreter','tex')); +[resFile,resPath]= uigetfile('*.txt') +copyfile((fullfile(resPath,resFile)),fullfile(W)) +resDate= char(regexp(resFile, '(\d\d\_\d\d\d\d)|( \d\d\_\d\d\d\d|\d\d\d\d\d\d)','match')) +cd .. +Wstudy= pwd +studyDate= datetime("today"); +S.sDate(1) = {studyDate}; +if ispc + lastSep=max(strfind(Wstudy,'\')) + studyName= Wstudy((lastSep+1):end) +else + lastSep=max(strfind(Wstudy,'/')) + studyName= Wstudy((lastSep+1):end) +end + +S.sDate(1)= {studyDate}; +S.sName(1)= {studyName} +S.sPath(1)= {Wstudy} +S.ELabel(1)= {ExpLabel} +S.EresDate(1)= {resDate} +S.EresFile(1)= {resFile} +S.EresPath(1)= {resPath} + +cd .. + +fid = fopen('StudiesDataArchive.txt','a'); +fprintf(fid,'StudyDate\tStudyName\tStudyPath\tExpNum\tExpDate\tExpPath\tResultFile\n'); +fprintf(fid, '%s\t %s\t %s\t %s\t %s\t %s\t %s \n',S.sDate{1},S.sName{1},S.sPath{1},S.ELabel{1},S.EresDate{1},S.EresPath{1},S.EresFile{1}); +fclose(fid); +%save((fullfile(pwd,'studyLog.mat')), 'S') +fclose('all'); + +catch + cd(W) + disp('Error: Unable to Execute ExpFrontend.m') +end + + + + + + diff --git a/workflow/.old/templates/qhtcp/Exp4/NotesExp4 b/workflow/.old/templates/qhtcp/Exp4/NotesExp4 new file mode 100644 index 00000000..e69de29b diff --git a/workflow/.old/templates/qhtcp/Exp4/Z_InteractionTemplate.R b/workflow/.old/templates/qhtcp/Exp4/Z_InteractionTemplate.R new file mode 100644 index 00000000..fe31ca14 --- /dev/null +++ b/workflow/.old/templates/qhtcp/Exp4/Z_InteractionTemplate.R @@ -0,0 +1,2730 @@ +#Based on InteractionTemplate.R which is based on Sean Santose's Interaction_V5 script. +#Adapt SS For Structured Data storage but using command line scripts +###Set up the required libraries, call required plot theme elements and set up the command line arguments +library("ggplot2") +library("plyr") +library("extrafont") +library("gridExtra") +library("gplots") +library("RColorBrewer") +library("stringr") +#library("gdata") +library(plotly) +library(htmlwidgets) + +Args <- commandArgs(TRUE) +input_file <- Args[1] #"!!Results_17_0827_yor1null-rpl12anull misLabeledAsFrom MI 17_0919_yor1-curated.txt" #Args[1] #Arg 1 #"!!ResultsStd_JS 19_1224_HLEG_P53.txt" is the !!results ... .txt +#Tool to find a file and copy it to desired location +destDir= getwd() +#srcFile= file.choose() +#file.copy(srcFile, destDir) +#input_file= tail(strsplit(srcFile,"[/]")[[1]],1) + + + +#Path to Output Directory +#W=getwd() #R is F'd up, Can't use, Any legitamate platform could build out dirs from this +outDir <- "ZScores/" #"Args[2] #paste0(W,"/ZScores/") +subDir <- outDir #Args[2] + +if (file.exists(subDir)){ + outputpath <- subDir +} else { + dir.create(file.path(subDir)) +} + +if (file.exists(paste(subDir,"QC/",sep=""))){ + outputpath_QC <- paste(subDir,"QC/",sep="") +} else { + dir.create(file.path(paste(subDir,"QC/",sep=""))) + outputpath_QC <- paste(subDir,"QC/",sep="") +} +#define the output path (formerly the second argument from Rscript) +outputpath <- outDir + +#Set Args[2] the Background contamination noise filter as a function of standard deviation +#std= as.numeric(Args[2]) +#Sean recommends 3 or 5 SD factor. +#Capture Exp_ number,use it to Save Args[2]{std}to Labels field and then Write to Labels to studyInfo.txt for future reference +Labels <- read.csv(file= "../Code/StudyInfo.csv",stringsAsFactors = FALSE) #,sep= ",") +print("Be sure to enter Background noise filter standard deviation i.e., 3 or 5 per Sean") + +#User prompt for std multiplier Value +cat("Enter a Standard Deviation value to noise filter \n") +inpChar<- readLines(file("stdin"), n = 1L) +cat(paste("Standard Deviation Value is", inpChar, "\n")) +inpNum= as.numeric(inpChar) +#set std deviation multiplier default if no user entry +if(!is.na(inpNum)){ + std= inpNum +}else{std= 3} + + +expNumber<- as.numeric(sub("^.*?(\\d+)$", "\\1", getwd())) +Labels[expNumber,3]= as.numeric(std) +Delta_Background_sdFactor <- std +DelBGFactr <- as.numeric(Delta_Background_sdFactor) +#Write Background SD value to studyInfo.txt file +#write.csv(Labels,file=paste("../Code/StudyInfo.csv"),row.names = FALSE) +write.csv(Labels,file=paste("../Code/StudyInfo.csv"),row.names = FALSE) +print('ln 50 write StudyInfo.csv ') +#write.table(Labels,file=paste(outputpath,"StudyInfo.txt"),sep = "\t",row.names = FALSE) + +#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +#++++++BEGIN USER DATA SELECTION SECTION+++++++++++++++++++++++++++++++++++++++++++++++++ + +#read in the data +X <- read.delim(input_file,skip=2,as.is=T,row.names=1,strip.white=TRUE) +X <- X[!(X[[1]]%in%c("","Scan")),] +#X <- X[!(X[[1]]%in%c(61:76)),] #Remove dAmp plates which are Scans 61 thru 76 + +#X <- X[which(X$Specifics == "WT"),] + +#X_length <- length(X[1,]) +#X_end <- length(X[1,]) - 2 +#X <- X[,c(1:42,X_end:X_length)] + + +#use numeric data to perform operations +X$Col <- as.numeric(X$Col) +X$Row <- as.numeric(X$Row) +X$l <- as.numeric(X$l) +X$K <- as.numeric(X$K) +X$r <- as.numeric(X$r) +X$Scan <- as.numeric(X$Scan) +X$AUC <- as.numeric(X$AUC) +X$LstBackgrd <- as.numeric(X$LstBackgrd) +X$X1stBackgrd <- as.numeric(X$X1stBackgrd) + +#Sometimes the an experimenter may have placed the non-varying drug in the 'Drug' col instead of the 'Modifier1' col +#as was the case in Gemcitabin and Cytarabin experiments. +#The following allows user to rename columns so as to get the appropriate +#data where it needs to be for the script to run properly. +#colnames(X)[7] <- "Modifier1" +#colnames(X)[8] <- "Conc1" +#colnames(X)[10] <- "Drug" +#colnames(X)[11] <- "Conc" + +#set the OrfRep to YDL227C for the ref data +X[X$ORF == "YDL227C",]$OrfRep <- "YDL227C" +#Sean removes the Doxycyclin at 0.0ug.mL so that only the Oligomycin series with Doxycyclin of 0.12ug/mL are used. +#That is the first DM plates are removed from the data set with the following. +#X <- X[X$Conc1 != "0ug/ml",] #This removes data with dox ==0 leaving gene expression on with four different concentrations of Gemcytabin +X <- X[X$Drug != "BMH21",] #This removes data concerning BMH21 for this experiment + +#Mert placed the"bad_spot" text in the ORF col. for particular spots in the RF1 and RF2 plates. +#This code removes those spots from the data set used for the interaction analysis. Dr.Hartman feels that these donot effect Zscores significantly and so "non-currated" files were used. +#try(X <- X[X$ORF != "bad_spot",]) +#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= + +#get total number of drug concentrations +Total_Conc_Nums <- length(unique(X$Conc)) + +#function to ID numbers in string with characters+numbers (ie to get numeric drug conc) +numextract <- function(string){ + str_extract(string, "\\-*\\d+\\.*\\d*") +} + +#generate a new column with the numeric drug concs +X$Conc_Num <- as.numeric(numextract(X$Conc)) +#Generate new column with the numeric drug concs as factors starting at 0 for the graphing later +X$Conc_Num_Factor <- as.numeric(as.factor(X$Conc_Num)) - 1 + +#Get the max factor for concentration +MAX_CONC <- max(X$Conc_Num_Factor) +#if treating numbers not as factors uncomment next line and comment out previous line +#MAX_CONC <- max(X$Conc_Num) + +#remove wells with problems for making graphs and to not include in summary statistics +X <- X[X$Gene != "BLANK",] +X <- X[X$Gene != "Blank",] +X <- X[X$ORF != "Blank",] +X <- X[X$Gene != "blank",] +#X <- X[X$Gene != "HO",] +Xbu= X +#Inserted to use SGDgenelist to update orfs and replace empty geneName cells with ORF name (adapted from Sean's Merge script). This is to 'fix' the naming for everything that follows (REMc, Heatmaps ... et.al) rather than do it piece meal later +#Sean's Match Script( which was adapted here) was fixed 2022_0608 so as not to write over the RF1&RF2 geneNames which caused a variance with his code results +#in the Z_lm_L,K,r&AUC output values. Values correlated well but were off by a multiplier factor. +SGDgeneList= "../Code/SGD_features.tab" +genes = data.frame(read.delim(file=SGDgeneList,quote="",header=FALSE,colClasses = c(rep("NULL",3), rep("character", 2), rep("NULL", 11)))) +for(i in 1:length(X[,14])){ + ii= as.numeric(i) + line_num = match(X[ii,14],genes[,1],nomatch=1) + OrfRepColNum= as.numeric(match('OrfRep',names(X))) + if(X[ii,OrfRepColNum]!= "YDL227C"){ + X[ii,15] = genes[line_num,2] + } + if((X[ii,15] == "")||(X[ii,15] == "OCT1")){ + X[ii,15] = X[ii,OrfRepColNum] + } +} +Xblankreplace= X +#X= Xbu #for restore testing restore X if geneName 'Match' routine needs changing + +#Remove dAmPs ******************************* +#jlh confirmed to leave dAmps in so comment out this section +#DAmPs_List <- "../Code/22_0602_Remy_DAmPsList.txt" +#Damps <- read.delim(DAmPs_List,header=F) + +#X <- X[!(X$ORF %in% Damps$V1),] #fix this to Damps[,1] +#XafterDampsRM=X #Backup for debugging especially when Rstudio goes crazy out of control +# *********** + + +#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +#++++++END USER DATA SELECTION+++++++++++++++++++++++++++++++++++++++++++++++++ +#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +print("ln137 End of User Section including blank gene writeOver") +#++++Begin Graphics Boiler Plate Section+++++++++++++++++++++++++++++++++++++++ +#theme elements for plots +theme_Publication <- function(base_size=14, base_family="sans") { + library(grid) + library(ggthemes) + (theme_foundation(base_size=base_size, base_family=base_family) + + theme(plot.title = element_text(face = "bold", + size = rel(1.2), hjust = 0.5), + text = element_text(), + panel.background = element_rect(colour = NA), + plot.background = element_rect(colour = NA), + panel.border = element_rect(colour = NA), + axis.title = element_text(face = "bold",size = rel(1)), + axis.title.y = element_text(angle=90,vjust =2), + axis.title.x = element_text(vjust = -0.2), + axis.text = element_text(), + axis.line = element_line(colour="black"), + axis.ticks = element_line(), + panel.grid.major = element_line(colour="#f0f0f0"), + panel.grid.minor = element_blank(), + legend.key = element_rect(colour = NA), + legend.position = "bottom", + legend.direction = "horizontal", + legend.key.size= unit(0.2, "cm"), + legend.spacing = unit(0, "cm"), + legend.title = element_text(face="italic"), + plot.margin=unit(c(10,5,5,5),"mm"), + strip.background=element_rect(colour="#f0f0f0",fill="#f0f0f0"), + strip.text = element_text(face="bold") + )) + +} + +scale_fill_Publication <- function(...){ + library(scales) + discrete_scale("fill","Publication",manual_pal(values = c("#386cb0","#fdb462","#7fc97f","#ef3b2c","#662506","#a6cee3","#fb9a99","#984ea3","#ffff33")), ...) + +} + +scale_colour_Publication <- function(...){ + discrete_scale("colour","Publication",manual_pal(values = c("#386cb0","#fdb462","#7fc97f","#ef3b2c","#662506","#a6cee3","#fb9a99","#984ea3","#ffff33")), ...) + +} + + +theme_Publication_legend_right <- function(base_size=14, base_family="sans") { + (theme_foundation(base_size=base_size, base_family=base_family) + + theme(plot.title = element_text(face = "bold", + size = rel(1.2), hjust = 0.5), + text = element_text(), + panel.background = element_rect(colour = NA), + plot.background = element_rect(colour = NA), + panel.border = element_rect(colour = NA), + axis.title = element_text(face = "bold",size = rel(1)), + axis.title.y = element_text(angle=90,vjust =2), + axis.title.x = element_text(vjust = -0.2), + axis.text = element_text(), + axis.line = element_line(colour="black"), + axis.ticks = element_line(), + panel.grid.major = element_line(colour="#f0f0f0"), + panel.grid.minor = element_blank(), + legend.key = element_rect(colour = NA), + legend.position = "right", + legend.direction = "vertical", + legend.key.size= unit(0.5, "cm"), + legend.spacing = unit(0, "cm"), + legend.title = element_text(face="italic"), + plot.margin=unit(c(10,5,5,5),"mm"), + strip.background=element_rect(colour="#f0f0f0",fill="#f0f0f0"), + strip.text = element_text(face="bold") + )) + +} + +scale_fill_Publication <- function(...){ + discrete_scale("fill","Publication",manual_pal(values = c("#386cb0","#fdb462","#7fc97f","#ef3b2c","#662506","#a6cee3","#fb9a99","#984ea3","#ffff33")), ...) + +} + +scale_colour_Publication <- function(...){ + discrete_scale("colour","Publication",manual_pal(values = c("#386cb0","#fdb462","#7fc97f","#ef3b2c","#662506","#a6cee3","#fb9a99","#984ea3","#ffff33")), ...) + +} + + +#print timestamp for initial time the code starts +timestamp() +#+++++BEGIN QC SECTION+++++++++++++++++++++++++++++++++++++++++++++++++++++++ +###Part 2 - Quality control +#print quality control graphs for each dataset before removing data due to contamination +#and before adjusting missing data to max theoretical values + +#plate analysis plot +#plate analysis is a quality check to identify plate effects containing anomalies + +Plate_Analysis_L <- ggplot(X,aes(Scan,l,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for L before quality control") + theme_Publication() + +Plate_Analysis_K <- ggplot(X,aes(Scan,K,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for K before quality control") + theme_Publication() + +Plate_Analysis_r <- ggplot(X,aes(Scan,r,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for r before quality control") + theme_Publication() + +Plate_Analysis_AUC <- ggplot(X,aes(Scan,AUC,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for AUC before quality control") + theme_Publication() + + + +Plate_Analysis_L_Box <- ggplot(X,aes(as.factor(Scan),l,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for L before quality control") + theme_Publication() + +Plate_Analysis_K_Box <- ggplot(X,aes(as.factor(Scan),K,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for K before quality control") + theme_Publication() + +Plate_Analysis_r_Box <- ggplot(X,aes(as.factor(Scan),r,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for r before quality control") + theme_Publication() + +Plate_Analysis_AUC_Box <- ggplot(X,aes(as.factor(Scan),AUC,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for AUC before quality control") + theme_Publication() + +#quality control - values with a high delta background likely have heavy contamination +#check the frequency of these values +#report the L and K values of these spots +#report the number to be removed based on the Delta_Background_Tolerance +X$Delta_Backgrd <- X$LstBackgrd - X$X1stBackgrd + + +#raw l vs K before QC +Raw_l_vs_K_beforeQC <- ggplot(X,aes(l,K,color=as.factor(Conc_Num))) + geom_point(aes(ORF=ORF,Gene=Gene,Delta_Backgrd=Delta_Backgrd),shape=3) + + ggtitle("Raw L vs K before QC") + + theme_Publication_legend_right() +pdf(paste(outputpath_QC,"Raw_L_vs_K_beforeQC.pdf",sep=""),width = 12,height = 8) +Raw_l_vs_K_beforeQC +dev.off() +pgg <- ggplotly(Raw_l_vs_K_beforeQC) +#pgg +plotly_path <- paste(getwd(),"/",outputpath_QC,"Raw_L_vs_K_beforeQC.html",sep="") +saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + +#set delta background tolerance based on 3 sds from the mean delta background +Delta_Background_Tolerance <- mean(X$Delta_Backgrd)+(DelBGFactr*sd(X$Delta_Backgrd)) +#Delta_Background_Tolerance <- mean(X$Delta_Backgrd)+(3*sd(X$Delta_Backgrd)) +print(paste("Delta_Background_Tolerance is",Delta_Background_Tolerance,sep=" ")) + +Plate_Analysis_Delta_Backgrd <- ggplot(X,aes(Scan,Delta_Backgrd,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2,position="jitter") + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd before quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_Box <- ggplot(X,aes(as.factor(Scan),Delta_Backgrd,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd before quality control") + theme_Publication() + + + +X_Delta_Backgrd_above_Tolerance <- X[X$Delta_Backgrd >= Delta_Background_Tolerance,] + +X_Delta_Backgrd_above_Tolerance_K_halfmedian <- (median(X_Delta_Backgrd_above_Tolerance$K,na.rm = TRUE))/2 +X_Delta_Backgrd_above_Tolerance_L_halfmedian <- (median(X_Delta_Backgrd_above_Tolerance$l,na.rm = TRUE))/2 +X_Delta_Backgrd_above_Tolerance_toRemove <- dim(X_Delta_Backgrd_above_Tolerance)[1] + +X_Delta_Backgrd_above_Tolerance_L_vs_K <- ggplot(X_Delta_Backgrd_above_Tolerance,aes(l,K,color=as.factor(Conc_Num))) + geom_point(aes(ORF=ORF,Gene=Gene,Delta_Backgrd=Delta_Backgrd),shape=3) + + ggtitle(paste("Raw L vs K for strains above delta background threshold of",Delta_Background_Tolerance,"or above")) + + annotate("text",x=X_Delta_Backgrd_above_Tolerance_L_halfmedian,y=X_Delta_Backgrd_above_Tolerance_K_halfmedian, + label = paste("Strains above delta background tolerance = ",X_Delta_Backgrd_above_Tolerance_toRemove)) + + theme_Publication_legend_right() +pdf(paste(outputpath_QC,"Raw_L_vs_K_for_strains_above_deltabackgrd_threshold.pdf",sep=""),width = 12,height = 8) +X_Delta_Backgrd_above_Tolerance_L_vs_K +dev.off() +pgg <- ggplotly(X_Delta_Backgrd_above_Tolerance_L_vs_K) +#pgg +plotly_path <- paste(getwd(),"/",outputpath_QC,"Raw_L_vs_K_for_strains_above_deltabackgrd_threshold.html",sep="") +saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + +#frequency plot for all data vs. the delta_background +DeltaBackground_Frequency_Plot <- ggplot(X,aes(Delta_Backgrd,color=as.factor(Conc_Num))) + geom_density() + + ggtitle("Density plot for Delta Background by Conc All Data") + theme_Publication_legend_right() + +#bar plot for all data vs. the delta_background +DeltaBackground_Bar_Plot <- ggplot(X,aes(Delta_Backgrd,color=as.factor(Conc_Num))) + geom_bar() + + ggtitle("Bar plot for Delta Background by Conc All Data") + theme_Publication_legend_right() + +pdf(file = paste(outputpath_QC,"Frequency_Delta_Background.pdf",sep=""),width = 12,height = 8) +print(DeltaBackground_Frequency_Plot) +print(DeltaBackground_Bar_Plot) +dev.off() + + +#Need to identify missing data, and differentiate between this data and removed data so the removed data can get set to NA and the missing data can get set to max theoretical values +#1 for missing data, 0 for non missing data +#Use "NG" for NoGrowth rather than "missing" +X$NG <- 0 +try(X[X$l == 0 & !is.na(X$l),]$NG <- 1) + +#1 for removed data, 0 non removed data +#Use DB to identify number of genes removed due to the DeltaBackground Threshold rather than "Removed" +X$DB <- 0 +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$DB <- 1) + +#replace the CPPs for l, r, AUC and K (must be last!) for removed data +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$l <- NA) +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$r <- NA) +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$AUC <- NA) +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$K <- NA) + + +Plate_Analysis_L_afterQC <- ggplot(X,aes(Scan,l,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_afterQC <- ggplot(X,aes(Scan,K,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_afterQC <- ggplot(X,aes(Scan,r,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_afterQC <- ggplot(X,aes(Scan,AUC,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_afterQC <- ggplot(X,aes(Scan,Delta_Backgrd,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + + +Plate_Analysis_L_Box_afterQC <- ggplot(X,aes(as.factor(Scan),l,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_Box_afterQC <- ggplot(X,aes(as.factor(Scan),K,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_Box_afterQC <- ggplot(X,aes(as.factor(Scan),r,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_Box_afterQC <- ggplot(X,aes(as.factor(Scan),AUC,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_Box_afterQC <- ggplot(X,aes(as.factor(Scan),Delta_Backgrd,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis.pdf",sep=""),width = 14,height=9) +Plate_Analysis_L +Plate_Analysis_L_afterQC +Plate_Analysis_K +Plate_Analysis_K_afterQC +Plate_Analysis_r +Plate_Analysis_r_afterQC +Plate_Analysis_AUC +Plate_Analysis_AUC_afterQC +Plate_Analysis_Delta_Backgrd +Plate_Analysis_Delta_Backgrd_afterQC +dev.off() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis_Boxplots.pdf",sep=""),width = 18,height=9) +Plate_Analysis_L_Box +Plate_Analysis_L_Box_afterQC +Plate_Analysis_K_Box +Plate_Analysis_K_Box_afterQC +Plate_Analysis_r_Box +Plate_Analysis_r_Box_afterQC +Plate_Analysis_AUC_Box +Plate_Analysis_AUC_Box_afterQC +Plate_Analysis_Delta_Backgrd_Box +Plate_Analysis_Delta_Backgrd_Box_afterQC +dev.off() + +#remove the zero values and print plate analysis +X_noZero <- X[which(X$l > 0),] +Plate_Analysis_L_afterQC_Z <- ggplot(X_noZero,aes(Scan,l,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_afterQC_Z <- ggplot(X_noZero,aes(Scan,K,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_afterQC_Z <- ggplot(X_noZero,aes(Scan,r,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_afterQC_Z <- ggplot(X_noZero,aes(Scan,AUC,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_afterQC_Z <- ggplot(X_noZero,aes(Scan,Delta_Backgrd,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + + +Plate_Analysis_L_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),l,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),K,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),r,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),AUC,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),Delta_Backgrd,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis_noZeros.pdf",sep=""),width = 14,height=9) +Plate_Analysis_L_afterQC_Z +Plate_Analysis_K_afterQC_Z +Plate_Analysis_r_afterQC_Z +Plate_Analysis_AUC_afterQC_Z +Plate_Analysis_Delta_Backgrd_afterQC_Z +dev.off() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis_noZeros_Boxplots.pdf",sep=""),width = 18,height=9) +Plate_Analysis_L_Box_afterQC_Z +Plate_Analysis_K_Box_afterQC_Z +Plate_Analysis_r_Box_afterQC_Z +Plate_Analysis_AUC_Box_afterQC_Z +Plate_Analysis_Delta_Backgrd_Box_afterQC_Z +dev.off() + +#remove dataset with zeros removed +rm(X_noZero) + + +#X_test_missing_and_removed <- X[X$Removed == 1,] + +#calculate summary statistics for all strains, including both background and the deletions +X_stats_ALL <- ddply(X, c("Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_AUC = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + se_AUC = sd_AUC / sqrt(N-1) +) +#print(X_stats_ALL_L) + +write.csv(X_stats_ALL,file=paste(outputpath,"SummaryStats_ALLSTRAINS.csv"),row.names = FALSE) +#+++++END QC SECTION+++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +##### Part 3 - Generate summary statistics and calculate the max theoretical L value +##### Calculate the Z score at each drug conc for each deletion strain + + +#get the background strains - can be modified to take another argument but for most screens will just be YDL227C +Background_Strains <- c("YDL227C") + +#first part of loop will go through for each background strain +#most cases there will only be one YDL227C +for(s in Background_Strains){ + X_Background <- X[X$OrfRep == s,] + + #if there's missing data for the background strains set these values to NA so the 0 values aren't included in summary statistics + #we may want to consider in some cases giving the max high value to L depending on the data type + if(table(X_Background$l)[1] == 0){ + X_Background[X_Background$l == 0,]$l <- NA + X_Background[X_Background$K == 0,]$K <- NA + X_Background[X_Background$r == 0,]$r <- NA + X_Background[X_Background$AUC == 0,]$AUC <- NA + } + + X_Background <- X_Background[!is.na(X_Background$l),] + + #get summary stats for L, K, R, AUC + X_stats_BY_L <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean = mean(l,na.rm=TRUE), + median = median(l,na.rm=TRUE), + max = max(l,na.rm=TRUE), + min = min(l,na.rm=TRUE), + sd = sd(l,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + print(X_stats_BY_L) + X1_SD <- max(X_stats_BY_L$sd) + + X_stats_BY_K <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(K)), + mean = mean(K,na.rm=TRUE), + median = median(K,na.rm=TRUE), + max = max(K,na.rm=TRUE), + min = min(K,na.rm=TRUE), + sd = sd(K,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + + X1_SD_K <- max(X_stats_BY_K$sd) + + + X_stats_BY_r <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = length(r), + mean = mean(r,na.rm=TRUE), + median = median(r,na.rm=TRUE), + max = max(r,na.rm=TRUE), + min = min(r,na.rm=TRUE), + sd = sd(r,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + + X1_SD_r <- max(X_stats_BY_r$sd) + + X_stats_BY_AUC <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = length(AUC), + mean = mean(AUC,na.rm=TRUE), + median = median(AUC,na.rm=TRUE), + max = max(AUC,na.rm=TRUE), + min = min(AUC,na.rm=TRUE), + sd = sd(AUC,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + + X1_SD_AUC <- max(X_stats_BY_AUC$sd) + + X_stats_BY <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_L = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + se_AUC = sd_AUC / sqrt(N-1) + ) + + write.csv(X_stats_BY,file=paste(outputpath,"SummaryStats_BackgroundStrains.csv"),row.names=FALSE) + + #calculate the max theoretical L values + #only look for max values when K is within 2SD of the ref strain + for(q in unique(X$Conc_Num_Factor)){ + if(q == 0){ + X_within_2SD_K <- X[X$Conc_Num_Factor == q,] + X_within_2SD_K <- X_within_2SD_K[!is.na(X_within_2SD_K$l),] + X_stats_TEMP_K <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_within_2SD_K <- X_within_2SD_K[X_within_2SD_K$K >= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])) ,] + X_within_2SD_K <- X_within_2SD_K[X_within_2SD_K$K <= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + + X_outside_2SD_K <- X[X$Conc_Num_Factor == q,] + X_outside_2SD_K <- X_outside_2SD_K[!is.na(X_outside_2SD_K$l),] + #X_outside_2SD_K_Temp <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_outside_2SD_K <- X_outside_2SD_K[X_outside_2SD_K$K <= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])) | X_outside_2SD_K$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + #X_outside_2SD_K <- X_outside_2SD_K[X_outside_2SD_K$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + + } + if(q > 0){ + X_within_2SD_K_temp <- X[X$Conc_Num_Factor == q,] + X_within_2SD_K_temp <- X_within_2SD_K_temp[!is.na(X_within_2SD_K_temp$l),] + X_stats_TEMP_K <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_within_2SD_K_temp <- X_within_2SD_K_temp[X_within_2SD_K_temp$K >= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])),] + X_within_2SD_K_temp <- X_within_2SD_K_temp[X_within_2SD_K_temp$K <= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])),] + X_within_2SD_K <- rbind(X_within_2SD_K,X_within_2SD_K_temp) + + X_outside_2SD_K_temp <- X[X$Conc_Num_Factor == q,] + X_outside_2SD_K_temp <- X_outside_2SD_K_temp[!is.na(X_outside_2SD_K_temp$l),] + #X_outside_2SD_K_Temp <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_outside_2SD_K_temp <- X_outside_2SD_K_temp[X_outside_2SD_K_temp$K <= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])) | X_outside_2SD_K_temp$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + #X_outside_2SD_K_temp <- X_outside_2SD_K_temp[X_outside_2SD_K_temp$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + X_outside_2SD_K <- rbind(X_outside_2SD_K,X_outside_2SD_K_temp) + } + } + + X_stats_BY_L_within_2SD_K <- ddply(X_within_2SD_K, c("Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean = mean(l), + median = median(l), + max = max(l,na.rm=TRUE), + min = min(l,na.rm=TRUE), + sd = sd(l), + se = sd / sqrt(N-1), + z_max = (max-mean)/sd + ) + print(X_stats_BY_L_within_2SD_K) + X1_SD_within_2SD_K <- max(X_stats_BY_L_within_2SD_K$sd) + write.csv(X_stats_BY_L_within_2SD_K,file=paste(outputpath_QC,"Max_Observed_L_Vals_for_spots_within_2SD_K.csv",sep=""),row.names=FALSE) + + X_stats_BY_L_outside_2SD_K <- ddply(X_outside_2SD_K, c("Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean = mean(l), + median = median(l), + max = max(l,na.rm=TRUE), + min = min(l,na.rm=TRUE), + sd = sd(l), + se = sd / sqrt(N-1) + ) + print(X_stats_BY_L_outside_2SD_K) + X1_SD_outside_2SD_K <- max(X_stats_BY_L_outside_2SD_K$sd) + + #X1_SD_outside_2SD_K <- X[X$l %in% X1_SD_within_2SD_K$l,] + Outside_2SD_K_L_vs_K <- ggplot(X_outside_2SD_K,aes(l,K,color=as.factor(Conc_Num))) + geom_point(aes(ORF=ORF,Gene=Gene,Delta_Backgrd=Delta_Backgrd),shape=3) + + ggtitle("Raw L vs K for strains falling outside 2SD of the K mean at each conc") + theme_Publication_legend_right() + pdf(paste(outputpath_QC,"Raw_L_vs_K_for_strains_2SD_outside_mean_K.pdf",sep=""),width = 10,height = 8) + print(Outside_2SD_K_L_vs_K) + dev.off() + pgg <- ggplotly(Outside_2SD_K_L_vs_K) + plotly_path <- paste(getwd(),"/",outputpath_QC,"RawL_vs_K_for_strains_outside_2SD_K.html",sep="") + saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + + Outside_2SD_K_delta_background_vs_K <- ggplot(X_outside_2SD_K,aes(Delta_Backgrd,K,color=as.factor(Conc_Num))) + geom_point(aes(l=l,ORF=ORF,Gene=Gene),shape=3,position="jitter") + + ggtitle("DeltaBackground vs K for strains falling outside 2SD of the K mean at each conc") + theme_Publication_legend_right() + pdf(paste(outputpath_QC,"DeltaBackground_vs_K_for_strains_2SD_outside_mean_K.pdf",sep=""),width = 10,height = 8) + Outside_2SD_K_delta_background_vs_K + dev.off() + pgg <- ggplotly(Outside_2SD_K_delta_background_vs_K) + #pgg + plotly_path <- paste(getwd(),"/",outputpath_QC,"DeltaBackground_vs_K_for_strains_outside_2SD_K.html",sep="") + saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + + #get the background strain mean values at the no drug conc to calculate shift + Background_L <- X_stats_BY_L$mean[1] + Background_K <- X_stats_BY_K$mean[1] + Background_r <- X_stats_BY_r$mean[1] + Background_AUC <- X_stats_BY_AUC$mean[1] + + #create empty plots for plotting element + p_l <- ggplot() + p_K <- ggplot() + p_r <- ggplot() + p_AUC <- ggplot() + + p_rf_l <- ggplot() + p_rf_K <- ggplot() + p_rf_r <- ggplot() + p_rf_AUC <- ggplot() + + #get only the deletion strains + X2 <- X + X2 <- X2[X2$OrfRep != "YDL227C",] + + #if set to max theoretical value, add a 1 to SM, if not, leave as 0 + #SM = Set to Max + X2$SM <- 0 + #set the missing values to the highest theoretical value at each drug conc for L, leave other values as 0 for the max/min + for(i in 1:length(unique(X2$Conc_Num))){ + Concentration <- unique(X2$Conc_Num)[i] + X2_temp <- X2[X2$Conc_Num == Concentration,] + if(Concentration == 0){ + X2_new <- X2_temp + print(paste("Check loop order, conc =",Concentration,sep=" ")) + } + if(Concentration > 0){ + try(X2_temp[X2_temp$l == 0 & !is.na(X2_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + try(X2_temp[X2_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_temp$l),]$SM <- 1) + try(X2_temp[X2_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + + #X2_temp[X2_temp$K == 0,]$K <- X_stats_ALL_K$max[i] + #X2_temp[X2_temp$r == 0,]$r <- X_stats_ALL_r$max[i] + #X2_temp[X2_temp$AUC == 0,]$AUC <- X_stats_ALL_AUC$max[i] + print(paste("Check loop order, conc =",Concentration,sep=" ")) + + X2_new <- rbind(X2_new,X2_temp) + + } + } + X2 <- X2_new + + + #get only the RF strains + X2_RF <- X + X2_RF <- X2_RF[X2_RF$OrfRep == "YDL227C",] + #if set to max theoretical value, add a 1 to SM, if not, leave as 0 + #SM = Set to Max + X2_RF$SM <- 0 + #set the missing values to the highest theoretical value at each drug conc for L, leave other values as 0 for the max/min + for(i in 1:length(unique(X2_RF$Conc_Num))){ + Concentration <- unique(X2_RF$Conc_Num)[i] + X2_RF_temp <- X2_RF[X2_RF$Conc_Num == Concentration,] + if(Concentration == 0){ + X2_RF_new <- X2_RF_temp + print(paste("Check loop order, conc =",Concentration,sep=" ")) + } + if(Concentration > 0){ + try(X2_RF_temp[X2_RF_temp$l == 0 & !is.na(X2_RF_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + try(X2_temp[X2_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_temp$l),]$SM <- 1) + try(X2_RF_temp[X2_RF_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_RF_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + print(paste("Check loop order, if error, refs have no L values outside theoretical max L, for REFs, conc =",Concentration,sep=" ")) + + X2_RF_new <- rbind(X2_RF_new,X2_RF_temp) + + } + } + X2_RF <- X2_RF_new + + + #######Part 4 Get the RF Z score values + #Change the OrfRep Column to include the RF strain, the Gene name and the Num. so each RF gets its own score + X2_RF$OrfRep <- paste(X2_RF$OrfRep,X2_RF$Gene,X2_RF$Num.,sep="_") + + num_genes_RF <- length(unique(X2_RF$OrfRep)) + print(num_genes_RF) + + + #create the output data.frame containing columns for each RF strain + InteractionScores_RF <- unique(X2_RF["OrfRep"]) + #InteractionScores_RF$Gene <- unique(X2$Gene) + InteractionScores_RF$Gene <- NA + InteractionScores_RF$Raw_Shift_L <- NA + InteractionScores_RF$Z_Shift_L <- NA + InteractionScores_RF$lm_Score_L <- NA + InteractionScores_RF$Z_lm_L <- NA + InteractionScores_RF$R_Squared_L <- NA + InteractionScores_RF$Sum_Z_Score_L <- NA + InteractionScores_RF$Avg_Zscore_L <- NA + InteractionScores_RF$Raw_Shift_K <- NA + InteractionScores_RF$Z_Shift_K <- NA + InteractionScores_RF$lm_Score_K <- NA + InteractionScores_RF$Z_lm_K <- NA + InteractionScores_RF$R_Squared_K <- NA + InteractionScores_RF$Sum_Z_Score_K <- NA + InteractionScores_RF$Avg_Zscore_K <- NA + InteractionScores_RF$Raw_Shift_r <- NA + InteractionScores_RF$Z_Shift_r <- NA + InteractionScores_RF$lm_Score_r <- NA + InteractionScores_RF$Z_lm_r <- NA + InteractionScores_RF$R_Squared_r <- NA + InteractionScores_RF$Sum_Z_Score_r <- NA + InteractionScores_RF$Avg_Zscore_r <- NA + InteractionScores_RF$Raw_Shift_AUC <- NA + InteractionScores_RF$Z_Shift_AUC <- NA + InteractionScores_RF$lm_Score_AUC <- NA + InteractionScores_RF$Z_lm_AUC <- NA + InteractionScores_RF$R_Squared_AUC <- NA + InteractionScores_RF$Sum_Z_Score_AUC <- NA + InteractionScores_RF$Avg_Zscore_AUC <- NA + InteractionScores_RF$NG <- NA + InteractionScores_RF$SM <- NA + + + for(i in 1:num_genes_RF){ + #get each deletion strain ORF + Gene_Sel <- unique(X2_RF$OrfRep)[i] + #extract only the current deletion strain and its data + X_Gene_Sel <- X2_RF[X2_RF$OrfRep == Gene_Sel,] + + X_stats_interaction <- ddply(X_Gene_Sel, c("OrfRep","Gene","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm = TRUE), + median_L = median(l,na.rm = TRUE), + sd_L = sd(l,na.rm = TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm = TRUE), + median_K = median(K,na.rm = TRUE), + sd_K = sd(K,na.rm = TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm = TRUE), + median_r = median(r,na.rm = TRUE), + sd_r = sd(r,na.rm = TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm = TRUE), + median_AUC = median(AUC,na.rm = TRUE), + sd_AUC = sd(AUC,na.rm = TRUE), + se_AUC = sd_AUC / sqrt(N-1), + NG = sum(NG,na.rm=TRUE), + DB= sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + #Get shift vals + #if L is 0, that means the no growth on no drug + #if L is NA at 0, that means the spot was removed due to contamination + #if L is 0, keep the shift at 0 and for other drug concs calculate delta Ls with no shift + #otherwise calculate shift at no drug conc + if(is.na(X_stats_interaction$mean_L[1]) | X_stats_interaction$mean_L[1] == 0 ){ + X_stats_interaction$Raw_Shift_L <- 0 + X_stats_interaction$Raw_Shift_K <- 0 + X_stats_interaction$Raw_Shift_r <- 0 + X_stats_interaction$Raw_Shift_AUC <- 0 + X_stats_interaction$Z_Shift_L <- 0 + X_stats_interaction$Z_Shift_K <- 0 + X_stats_interaction$Z_Shift_r <- 0 + X_stats_interaction$Z_Shift_AUC <- 0 + }else{ + X_stats_interaction$Raw_Shift_L <- X_stats_interaction$mean_L[1] - Background_L + X_stats_interaction$Raw_Shift_K <- X_stats_interaction$mean_K[1] - Background_K + X_stats_interaction$Raw_Shift_r <- X_stats_interaction$mean_r[1] - Background_r + X_stats_interaction$Raw_Shift_AUC <- X_stats_interaction$mean_AUC[1] - Background_AUC + X_stats_interaction$Z_Shift_L <- X_stats_interaction$Raw_Shift_L[1]/X_stats_BY_L$sd[1] + X_stats_interaction$Z_Shift_K <- X_stats_interaction$Raw_Shift_K[1]/X_stats_BY_K$sd[1] + X_stats_interaction$Z_Shift_r <- X_stats_interaction$Raw_Shift_r[1]/X_stats_BY_r$sd[1] + X_stats_interaction$Z_Shift_AUC <- X_stats_interaction$Raw_Shift_AUC[1]/X_stats_BY_AUC$sd[1] + } + + + #get WT vals + X_stats_interaction$WT_l <- X_stats_BY_L$mean + X_stats_interaction$WT_K <- X_stats_BY_K$mean + X_stats_interaction$WT_r <- X_stats_BY_r$mean + X_stats_interaction$WT_AUC <- X_stats_BY_AUC$mean + + #Get WT SD + X_stats_interaction$WT_sd_l <- X_stats_BY_L$sd + X_stats_interaction$WT_sd_K <- X_stats_BY_K$sd + X_stats_interaction$WT_sd_r <- X_stats_BY_r$sd + X_stats_interaction$WT_sd_AUC <- X_stats_BY_AUC$sd + + + #only get scores if there's growth at no drug + if(X_stats_interaction$mean_L[1] != 0 & !is.na(X_stats_interaction$mean_L[1])){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for no growth values in Z score calculation + if(sum(X_stats_interaction$NG,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #get linear model + gene_lm_L <- lm(formula = Delta_L ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_K <- lm(formula = Delta_K ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_r <- lm(formula = Delta_r ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_AUC <- lm(formula = Delta_AUC ~ Conc_Num_Factor,data = X_stats_interaction) + + #get interaction score calculated by linear model and R-squared value for the fit + gene_interaction_L <- MAX_CONC*(gene_lm_L$coefficients[2]) + gene_lm_L$coefficients[1] + r_squared_l <- summary(gene_lm_L)$r.squared + gene_interaction_K <- MAX_CONC*(gene_lm_K$coefficients[2]) + gene_lm_K$coefficients[1] + r_squared_K <- summary(gene_lm_K)$r.squared + gene_interaction_r <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_r$coefficients[1] + r_squared_r <- summary(gene_lm_r)$r.squared + gene_interaction_AUC <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_AUC$coefficients[1] + r_squared_AUC <- summary(gene_lm_AUC)$r.squared + + #Get total of non removed values + Num_non_Removed_Conc <- Total_Conc_Nums - sum(X_stats_interaction$DB,na.rm = TRUE) - 1 + + #report the scores + InteractionScores_RF$OrfRep[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$OrfRep[1] + InteractionScores_RF$Gene[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$Gene[1] + + InteractionScores_RF$Raw_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores_RF$Z_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores_RF$lm_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_L + InteractionScores_RF$R_Squared_L[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores_RF$Sum_Z_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_L[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE)/(Num_non_Removed_Conc) + + + InteractionScores_RF$Raw_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores_RF$Z_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores_RF$lm_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_K + InteractionScores_RF$R_Squared_K[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores_RF$Sum_Z_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_K[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE)/(Num_non_Removed_Conc) + + InteractionScores_RF$Raw_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores_RF$Z_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores_RF$lm_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_r + InteractionScores_RF$R_Squared_r[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores_RF$Sum_Z_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_r[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE)/(Total_Conc_Nums-1) + + InteractionScores_RF$Raw_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores_RF$Z_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores_RF$lm_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_AUC + InteractionScores_RF$R_Squared_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores_RF$Sum_Z_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE)/(Total_Conc_Nums-1) + } + + if(X_stats_interaction$mean_L[1] == 0 | is.na(X_stats_interaction$mean_L[1]) ){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for missing values in Z score calculatiom + if(sum(X_stats_interaction$NG,na.rm = TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #NA values for the next part since there's an NA or 0 at the no drug. + gene_lm_L <- NA + gene_lm_K <- NA + gene_lm_r <- NA + gene_lm_AUC <- NA + + gene_interaction_L <- NA + r_squared_l <- NA + gene_interaction_K <- NA + r_squared_K <- NA + gene_interaction_r <- NA + r_squared_r <- NA + gene_interaction_AUC <- NA + r_squared_AUC <- NA + + X_stats_interaction$Raw_Shift_L <- NA + X_stats_interaction$Raw_Shift_K <- NA + X_stats_interaction$Raw_Shift_r <- NA + X_stats_interaction$Raw_Shift_AUC <- NA + + X_stats_interaction$Z_Shift_L <- NA + X_stats_interaction$Z_Shift_K <- NA + X_stats_interaction$Z_Shift_r <- NA + X_stats_interaction$Z_Shift_AUC <- NA + + InteractionScores_RF$OrfRep[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$OrfRep[1] + InteractionScores_RF$Gene[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$Gene[1] + + InteractionScores_RF$Raw_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores_RF$Z_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores_RF$lm_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_L + InteractionScores_RF$R_Squared_L[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores_RF$Sum_Z_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_L[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + + InteractionScores_RF$Raw_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores_RF$Z_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores_RF$lm_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_K + InteractionScores_RF$R_Squared_K[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores_RF$Sum_Z_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_K[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + + InteractionScores_RF$Raw_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores_RF$Z_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores_RF$lm_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_r + InteractionScores_RF$R_Squared_r[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores_RF$Sum_Z_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_r[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + + InteractionScores_RF$Raw_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores_RF$Z_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores_RF$lm_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_AUC + InteractionScores_RF$R_Squared_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores_RF$Sum_Z_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + } + + if(i == 1){ + X_stats_interaction_ALL_RF <- X_stats_interaction + } + if(i > 1){ + X_stats_interaction_ALL_RF <- rbind(X_stats_interaction_ALL_RF,X_stats_interaction) + } + + InteractionScores_RF$NG[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$NG,na.rm = TRUE) + InteractionScores_RF$DB[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$DB,na.rm = TRUE) + InteractionScores_RF$SM[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$SM,na.rm = TRUE) + + #X_stats_L_int_temp <- rbind(X_stats_L_int_temp,X_stats_L_int) + + + } + print("Pass RF Calculation loop") + + lm_sd_L <- sd(InteractionScores_RF$lm_Score_L,na.rm=TRUE) + lm_sd_K <- sd(InteractionScores_RF$lm_Score_K,na.rm=TRUE) + lm_sd_r <- sd(InteractionScores_RF$lm_Score_r,na.rm=TRUE) + lm_sd_AUC <- sd(InteractionScores_RF$lm_Score_AUC,na.rm=TRUE) + + lm_mean_L <- mean(InteractionScores_RF$lm_Score_L,na.rm=TRUE) + lm_mean_K <- mean(InteractionScores_RF$lm_Score_K,na.rm=TRUE) + lm_mean_r <- mean(InteractionScores_RF$lm_Score_r,na.rm=TRUE) + lm_mean_AUC <- mean(InteractionScores_RF$lm_Score_AUC,na.rm=TRUE) + + print(paste("Mean RF linear regression score L",lm_mean_L)) + + + InteractionScores_RF$Z_lm_L <- (InteractionScores_RF$lm_Score_L - lm_mean_L)/(lm_sd_L) + InteractionScores_RF$Z_lm_K <- (InteractionScores_RF$lm_Score_K - lm_mean_K)/(lm_sd_K) + InteractionScores_RF$Z_lm_r <- (InteractionScores_RF$lm_Score_r - lm_mean_r)/(lm_sd_r) + InteractionScores_RF$Z_lm_AUC <- (InteractionScores_RF$lm_Score_AUC - lm_mean_AUC)/(lm_sd_AUC) + + + InteractionScores_RF <- InteractionScores_RF[order(InteractionScores_RF$Z_lm_L,decreasing=TRUE),] + InteractionScores_RF <- InteractionScores_RF[order(InteractionScores_RF$NG,decreasing=TRUE),] + write.csv(InteractionScores_RF,paste(outputpath,"RF_ZScores_Interaction.csv",sep=""),row.names=FALSE) + + + for(i in 1:num_genes_RF){ + Gene_Sel <- unique(InteractionScores_RF$OrfRep)[i] + X_ZCalculations <- X_stats_interaction_ALL_RF[X_stats_interaction_ALL_RF$OrfRep == Gene_Sel,] + X_Int_Scores <- InteractionScores_RF[InteractionScores_RF$OrfRep == Gene_Sel,] + + p_rf_l[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_L)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_l), ymax=0+(2*WT_sd_l)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_L,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg Zscore =",round(X_Int_Scores$Avg_Zscore_L,2))) + + annotate("text",x=1,y=25,label = paste("lm Zscore =",round(X_Int_Scores$Z_lm_L,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_rf_K[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_K)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_K), ymax=0+(2*WT_sd_K)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_K,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_K,2))) + + annotate("text",x=1,y=25,label = paste("lm ZScore =",round(X_Int_Scores$Z_lm_L,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_rf_r[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_r)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-0.65,0.65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_r), ymax=0+(2*WT_sd_r)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=0.45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_r,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=0.35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_r,2))) + + annotate("text",x=1,y=0.25,label = paste("lm ZScore =",round(X_Int_Scores$Z_lm_r,2))) + + annotate("text",x=1,y=-0.25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-0.35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-0.45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-0.6,-0.4,-0.2,0,0.2,0.4,0.6)) + + theme_Publication() + + p_rf_AUC[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_AUC)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-6500,6500)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_AUC), ymax=0+(2*WT_sd_AUC)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=4500,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_AUC,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=3500,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_AUC,2))) + + annotate("text",x=1,y=2500,label = paste("lm ZScore =",round(X_Int_Scores$Z_lm_AUC,2))) + + annotate("text",x=1,y=-2500,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-3500,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-4500,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-6000,-5000,-4000,-3000,-2000,-1000,0,1000,2000,3000,4000,5000,6000)) + + theme_Publication() + + + + if(i == 1){ + X_stats_interaction_ALL_RF_final <- X_ZCalculations + } + if(i > 1){ + X_stats_interaction_ALL_RF_final <- rbind(X_stats_interaction_ALL_RF_final,X_ZCalculations) + } + } + print("Pass RF ggplot loop") + write.csv(X_stats_interaction_ALL_RF_final,paste(outputpath,"RF_ZScore_Calculations.csv",sep=""),row.names = FALSE) + + + ####### Part 5 - Get Zscores for Gene deletion strains + + + + #get total number of genes for the next loop + num_genes <- length(unique(X2$OrfRep)) + print(num_genes) + + #create the output data.frame containing columns for each deletion strain + InteractionScores <- unique(X2["OrfRep"]) + #InteractionScores$Gene <- unique(X2$Gene) + InteractionScores$Gene <- NA + InteractionScores$Raw_Shift_L <- NA + InteractionScores$Z_Shift_L <- NA + InteractionScores$lm_Score_L <- NA + InteractionScores$Z_lm_L <- NA + InteractionScores$R_Squared_L <- NA + InteractionScores$Sum_Z_Score_L <- NA + InteractionScores$Avg_Zscore_L <- NA + InteractionScores$Raw_Shift_K <- NA + InteractionScores$Z_Shift_K <- NA + InteractionScores$lm_Score_K <- NA + InteractionScores$Z_lm_K <- NA + InteractionScores$R_Squared_K <- NA + InteractionScores$Sum_Z_Score_K <- NA + InteractionScores$Avg_Zscore_K <- NA + InteractionScores$Raw_Shift_r <- NA + InteractionScores$Z_Shift_r <- NA + InteractionScores$lm_Score_r <- NA + InteractionScores$Z_lm_r <- NA + InteractionScores$R_Squared_r <- NA + InteractionScores$Sum_Z_Score_r <- NA + InteractionScores$Avg_Zscore_r <- NA + InteractionScores$Raw_Shift_AUC <- NA + InteractionScores$Z_Shift_AUC <- NA + InteractionScores$lm_Score_AUC <- NA + InteractionScores$Z_lm_AUC <- NA + InteractionScores$R_Squared_AUC <- NA + InteractionScores$Sum_Z_Score_AUC <- NA + InteractionScores$Avg_Zscore_AUC <- NA + InteractionScores$NG <- NA + InteractionScores$DB <- NA + InteractionScores$SM <- NA + + for(i in 1:num_genes){ + #get each deletion strain ORF + Gene_Sel <- unique(X2$OrfRep)[i] + #extract only the current deletion strain and its data + X_Gene_Sel <- X2[X2$OrfRep == Gene_Sel,] + + X_stats_interaction <- ddply(X_Gene_Sel, c("OrfRep","Gene","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm = TRUE), + median_L = median(l,na.rm = TRUE), + sd_L = sd(l,na.rm = TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm = TRUE), + median_K = median(K,na.rm = TRUE), + sd_K = sd(K,na.rm = TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm = TRUE), + median_r = median(r,na.rm = TRUE), + sd_r = sd(r,na.rm = TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm = TRUE), + median_AUC = median(AUC,na.rm = TRUE), + sd_AUC = sd(AUC,na.rm = TRUE), + se_AUC = sd_AUC / sqrt(N-1), + NG = sum(NG,na.rm=TRUE), + DB= sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + #Get shift vals + #if L is 0, that means the no growth on no drug + #if L is NA at 0, that means the spot was removed due to contamination + #if L is 0, keep the shift at 0 and for other drug concs calculate delta Ls with no shift + #otherwise calculate shift at no drug conc + if(is.na(X_stats_interaction$mean_L[1]) | X_stats_interaction$mean_L[1] == 0 ){ + X_stats_interaction$Raw_Shift_L <- 0 + X_stats_interaction$Raw_Shift_K <- 0 + X_stats_interaction$Raw_Shift_r <- 0 + X_stats_interaction$Raw_Shift_AUC <- 0 + X_stats_interaction$Z_Shift_L <- 0 + X_stats_interaction$Z_Shift_K <- 0 + X_stats_interaction$Z_Shift_r <- 0 + X_stats_interaction$Z_Shift_AUC <- 0 + }else{ + X_stats_interaction$Raw_Shift_L <- X_stats_interaction$mean_L[1] - Background_L + X_stats_interaction$Raw_Shift_K <- X_stats_interaction$mean_K[1] - Background_K + X_stats_interaction$Raw_Shift_r <- X_stats_interaction$mean_r[1] - Background_r + X_stats_interaction$Raw_Shift_AUC <- X_stats_interaction$mean_AUC[1] - Background_AUC + X_stats_interaction$Z_Shift_L <- X_stats_interaction$Raw_Shift_L[1]/X_stats_BY_L$sd[1] + X_stats_interaction$Z_Shift_K <- X_stats_interaction$Raw_Shift_K[1]/X_stats_BY_K$sd[1] + X_stats_interaction$Z_Shift_r <- X_stats_interaction$Raw_Shift_r[1]/X_stats_BY_r$sd[1] + X_stats_interaction$Z_Shift_AUC <- X_stats_interaction$Raw_Shift_AUC[1]/X_stats_BY_AUC$sd[1] + } + + + #get WT vals + X_stats_interaction$WT_l <- X_stats_BY_L$mean + X_stats_interaction$WT_K <- X_stats_BY_K$mean + X_stats_interaction$WT_r <- X_stats_BY_r$mean + X_stats_interaction$WT_AUC <- X_stats_BY_AUC$mean + + #Get WT SD + X_stats_interaction$WT_sd_l <- X_stats_BY_L$sd + X_stats_interaction$WT_sd_K <- X_stats_BY_K$sd + X_stats_interaction$WT_sd_r <- X_stats_BY_r$sd + X_stats_interaction$WT_sd_AUC <- X_stats_BY_AUC$sd + + + #only get scores if there's growth at no drug + if(X_stats_interaction$mean_L[1] != 0 & !is.na(X_stats_interaction$mean_L[1])){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for no growth values in Z score calculation + if(sum(X_stats_interaction$NG,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #get linear model + gene_lm_L <- lm(formula = Delta_L ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_K <- lm(formula = Delta_K ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_r <- lm(formula = Delta_r ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_AUC <- lm(formula = Delta_AUC ~ Conc_Num_Factor,data = X_stats_interaction) + + #get interaction score calculated by linear model and R-squared value for the fit + gene_interaction_L <- MAX_CONC*(gene_lm_L$coefficients[2]) + gene_lm_L$coefficients[1] + r_squared_l <- summary(gene_lm_L)$r.squared + gene_interaction_K <- MAX_CONC*(gene_lm_K$coefficients[2]) + gene_lm_K$coefficients[1] + r_squared_K <- summary(gene_lm_K)$r.squared + gene_interaction_r <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_r$coefficients[1] + r_squared_r <- summary(gene_lm_r)$r.squared + gene_interaction_AUC <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_AUC$coefficients[1] + r_squared_AUC <- summary(gene_lm_AUC)$r.squared + + #Get total of non removed values + Num_non_Removed_Conc <- Total_Conc_Nums - sum(X_stats_interaction$DB,na.rm = TRUE) - 1 + + #report the scores + InteractionScores$OrfRep[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$OrfRep[1]) + InteractionScores$Gene[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$Gene[1]) + + InteractionScores$Raw_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores$Z_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores$lm_Score_L[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_L + InteractionScores$Z_lm_L[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_L-lm_mean_L)/lm_sd_L + InteractionScores$R_Squared_L[InteractionScores$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores$Sum_Z_Score_L[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE) + InteractionScores$Avg_Zscore_L[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE)/(Num_non_Removed_Conc) + + + InteractionScores$Raw_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores$Z_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores$lm_Score_K[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_K + InteractionScores$Z_lm_K[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_K-lm_mean_K)/lm_sd_K + InteractionScores$R_Squared_K[InteractionScores$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores$Sum_Z_Score_K[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE) + InteractionScores$Avg_Zscore_K[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE)/(Num_non_Removed_Conc) + + InteractionScores$Raw_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores$Z_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores$lm_Score_r[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_r + InteractionScores$Z_lm_r[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_r-lm_mean_r)/lm_sd_r + InteractionScores$R_Squared_r[InteractionScores$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores$Sum_Z_Score_r[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE) + InteractionScores$Avg_Zscore_r[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE)/(Total_Conc_Nums-1) + + InteractionScores$Raw_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores$Z_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores$lm_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_AUC + InteractionScores$Z_lm_AUC[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_AUC-lm_mean_AUC)/lm_sd_AUC + InteractionScores$R_Squared_AUC[InteractionScores$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores$Sum_Z_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE) + InteractionScores$Avg_Zscore_AUC[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE)/(Total_Conc_Nums-1) + } + + if(X_stats_interaction$mean_L[1] == 0 | is.na(X_stats_interaction$mean_L[1]) ){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for missing values in Z score calculatiom + if(sum(X_stats_interaction$NG,na.rm = TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #NA values for the next part since there's an NA or 0 at the no drug. + gene_lm_L <- NA + gene_lm_K <- NA + gene_lm_r <- NA + + gene_interaction_L <- NA + r_squared_l <- NA + gene_interaction_K <- NA + r_squared_K <- NA + gene_interaction_r <- NA + r_squared_r <- NA + + X_stats_interaction$Raw_Shift_L <- NA + X_stats_interaction$Raw_Shift_K <- NA + X_stats_interaction$Raw_Shift_r <- NA + X_stats_interaction$Raw_Shift_AUC <- NA + + X_stats_interaction$Z_Shift_L <- NA + X_stats_interaction$Z_Shift_K <- NA + X_stats_interaction$Z_Shift_r <- NA + X_stats_interaction$Z_Shift_AUC <- NA + + InteractionScores$OrfRep[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$OrfRep[1]) + InteractionScores$Gene[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$Gene[1]) + + InteractionScores$Raw_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores$Z_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores$lm_Score_L[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_L[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$R_Squared_L[InteractionScores$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores$Sum_Z_Score_L[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_L[InteractionScores$OrfRep == Gene_Sel] <- NA + + InteractionScores$Raw_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores$Z_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores$lm_Score_K[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_K[InteractionScores$OrfRep == Gene_Sel] <-NA + InteractionScores$R_Squared_K[InteractionScores$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores$Sum_Z_Score_K[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_K[InteractionScores$OrfRep == Gene_Sel] <- NA + + InteractionScores$Raw_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores$Z_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores$lm_Score_r[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_r[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$R_Squared_r[InteractionScores$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores$Sum_Z_Score_r[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_r[InteractionScores$OrfRep == Gene_Sel] <- NA + + InteractionScores$Raw_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores$Z_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores$lm_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$R_Squared_AUC[InteractionScores$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores$Sum_Z_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + } + + if(i == 1){ + X_stats_interaction_ALL <- X_stats_interaction + } + if(i > 1){ + X_stats_interaction_ALL <- rbind(X_stats_interaction_ALL,X_stats_interaction) + } + + InteractionScores$NG[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$NG,na.rm = TRUE) + InteractionScores$DB[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$DB,na.rm = TRUE) + InteractionScores$SM[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$SM,na.rm = TRUE) + + #X_stats_L_int_temp <- rbind(X_stats_L_int_temp,X_stats_L_int) + + + } + print("Pass Int Calculation loop") + InteractionScores <- InteractionScores[order(InteractionScores$Z_lm_L,decreasing=TRUE),] + InteractionScores <- InteractionScores[order(InteractionScores$NG,decreasing=TRUE),] + df_order_by_OrfRep <- unique(InteractionScores$OrfRep) + #X_stats_interaction_ALL <- X_stats_interaction_ALL[order(X_stats_interaction_ALL$NG,decreasing=TRUE),] + write.csv(InteractionScores,paste(outputpath,"ZScores_Interaction.csv",sep=""),row.names=FALSE) + + InteractionScores_deletion_enhancers_L <- InteractionScores[InteractionScores$Avg_Zscore_L >= 2,] + InteractionScores_deletion_enhancers_K <- InteractionScores[InteractionScores$Avg_Zscore_K <= -2,] + InteractionScores_deletion_suppressors_L <- InteractionScores[InteractionScores$Avg_Zscore_L <= -2,] + InteractionScores_deletion_suppressors_K <- InteractionScores[InteractionScores$Avg_Zscore_K >= 2,] + InteractionScores_deletion_enhancers_and_Suppressors_L <- InteractionScores[InteractionScores$Avg_Zscore_L >= 2 | InteractionScores$Avg_Zscore_L <= -2,] + InteractionScores_deletion_enhancers_and_Suppressors_K <- InteractionScores[InteractionScores$Avg_Zscore_K >= 2 | InteractionScores$Avg_Zscore_K <= -2,] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L <- InteractionScores[InteractionScores$Z_lm_L >= 2 & InteractionScores$Avg_Zscore_L <= -2,] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L <- InteractionScores[InteractionScores$Z_lm_L <= -2 & InteractionScores$Avg_Zscore_L >= 2,] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K <- InteractionScores[InteractionScores$Z_lm_K <= -2 & InteractionScores$Avg_Zscore_K >= 2,] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K <- InteractionScores[InteractionScores$Z_lm_K >= 2 & InteractionScores$Avg_Zscore_K <= -2,] + + InteractionScores_deletion_enhancers_L <- InteractionScores_deletion_enhancers_L[!is.na(InteractionScores_deletion_enhancers_L$OrfRep),] + InteractionScores_deletion_enhancers_K <- InteractionScores_deletion_enhancers_K[!is.na(InteractionScores_deletion_enhancers_K$OrfRep),] + InteractionScores_deletion_suppressors_L <- InteractionScores_deletion_suppressors_L[!is.na(InteractionScores_deletion_suppressors_L$OrfRep),] + InteractionScores_deletion_suppressors_K <- InteractionScores_deletion_suppressors_K[!is.na(InteractionScores_deletion_suppressors_K$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_L <- InteractionScores_deletion_enhancers_and_Suppressors_L[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_L$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_K <- InteractionScores_deletion_enhancers_and_Suppressors_K[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_K$OrfRep),] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L <- InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L[!is.na(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L$OrfRep),] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L <- InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L[!is.na(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L$OrfRep),] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K <- InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K[!is.na(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K$OrfRep),] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K <- InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K[!is.na(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K$OrfRep),] + + write.csv(InteractionScores_deletion_enhancers_L,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_K,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_L,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_K,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_L,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_K,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L,paste(outputpath,"ZScores_Interaction_Suppressors_and_lm_Enhancers_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L,paste(outputpath,"ZScores_Interaction_Enhancers_and_lm_Suppressors_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K,paste(outputpath,"ZScores_Interaction_Suppressors_and_lm_Enhancers_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K,paste(outputpath,"ZScores_Interaction_Enhancers_and_lm_Suppressors_K.csv",sep=""),row.names=FALSE) + + #get enhancers and suppressors for linear regression + InteractionScores_deletion_enhancers_L_lm <- InteractionScores[InteractionScores$Z_lm_L >= 2,] + InteractionScores_deletion_enhancers_K_lm <- InteractionScores[InteractionScores$Z_lm_K <= -2,] + InteractionScores_deletion_suppressors_L_lm <- InteractionScores[InteractionScores$Z_lm_L <= -2,] + InteractionScores_deletion_suppressors_K_lm <- InteractionScores[InteractionScores$Z_lm_K >= 2,] + InteractionScores_deletion_enhancers_and_Suppressors_L_lm <- InteractionScores[InteractionScores$Z_lm_L >= 2 | InteractionScores$Z_lm_L <= -2,] + InteractionScores_deletion_enhancers_and_Suppressors_K_lm <- InteractionScores[InteractionScores$Z_lm_K >= 2 | InteractionScores$Z_lm_K <= -2,] + + InteractionScores_deletion_enhancers_L_lm <- InteractionScores_deletion_enhancers_L_lm[!is.na(InteractionScores_deletion_enhancers_L_lm$OrfRep),] + InteractionScores_deletion_enhancers_K_lm <- InteractionScores_deletion_enhancers_K_lm[!is.na(InteractionScores_deletion_enhancers_K_lm$OrfRep),] + InteractionScores_deletion_suppressors_L_lm <- InteractionScores_deletion_suppressors_L_lm[!is.na(InteractionScores_deletion_suppressors_L_lm$OrfRep),] + InteractionScores_deletion_suppressors_K_lm <- InteractionScores_deletion_suppressors_K_lm[!is.na(InteractionScores_deletion_suppressors_K_lm$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_L_lm <- InteractionScores_deletion_enhancers_and_Suppressors_L_lm[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_L_lm$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_K_lm <- InteractionScores_deletion_enhancers_and_Suppressors_K_lm[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_K_lm$OrfRep),] + + write.csv(InteractionScores_deletion_enhancers_L_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_L_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_K_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_K_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_L_lm,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_L_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_K_lm,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_K_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_L_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_L_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_K_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_K_lm.csv",sep=""),row.names=FALSE) + + + write.csv(Labels,file=paste("../Code/StudyInfo.csv"),row.names = FALSE) + print('ln 1570 write StudyInfo.csv after ') + #write.table(Labels,file=paste("../Code/StudyInfo.txt"),sep="\t",row.names = FALSE) + + for(i in 1:num_genes){ + Gene_Sel <- unique(InteractionScores$OrfRep)[i] + X_ZCalculations <- X_stats_interaction_ALL[X_stats_interaction_ALL$OrfRep == Gene_Sel,] + X_Int_Scores <- InteractionScores[InteractionScores$OrfRep == Gene_Sel,] + + p_l[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_L)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_l), ymax=0+(2*WT_sd_l)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_L,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_L,2))) + + annotate("text",x=1,y=25,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_L,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_K[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_K)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_K), ymax=0+(2*WT_sd_K)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_K,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_K,2))) + + annotate("text",x=1,y=25,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_K,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_r[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_r)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-0.65,0.65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_r), ymax=0+(2*WT_sd_r)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=0.45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_r,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=0.35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_r,2))) + + annotate("text",x=1,y=0.25,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_r,2))) + + annotate("text",x=1,y=-0.25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-0.35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-0.45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-0.6,-0.4,-0.2,0,0.2,0.4,0.6)) + + theme_Publication() + + p_AUC[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_AUC)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-6500,6500)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_AUC), ymax=0+(2*WT_sd_AUC)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=4500,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_AUC,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=3500,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_AUC,2))) + + annotate("text",x=1,y=2500,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_AUC,2))) + + annotate("text",x=1,y=-2500,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-3500,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-4500,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-6000,-5000,-4000,-3000,-2000,-1000,0,1000,2000,3000,4000,5000,6000)) + + theme_Publication() + + + + if(i == 1){ + X_stats_interaction_ALL_final <- X_ZCalculations + } + if(i > 1){ + X_stats_interaction_ALL_final <- rbind(X_stats_interaction_ALL_final,X_ZCalculations) + } + } + print("Pass Int ggplot loop") + write.csv(X_stats_interaction_ALL_final,paste(outputpath,"ZScore_Calculations.csv",sep=""),row.names = FALSE) + + + + + + + Blank <- ggplot(X2_RF) + geom_blank() + + pdf(paste(outputpath,"InteractionPlots.pdf",sep=""),width = 16, height = 16, onefile = TRUE) + + X_stats_X2_RF <- ddply(X2_RF, c("Conc_Num","Conc_Num_Factor"), summarise, + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_AUC = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + NG = sum(NG,na.rm=TRUE), + DB = sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + L_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,l)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,160)) + + annotate("text",x=-0.25,y=10,label="NG") + + annotate("text",x=-0.25,y=5,label="DB") + + annotate("text",x=-0.25,y=0,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=0,label=X_stats_X2_RF$SM) + + theme_Publication() + + K_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,K)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(-20,160)) + + annotate("text",x=-0.25,y=-5,label="NG") + + annotate("text",x=-0.25,y=-12.5,label="DB") + + annotate("text",x=-0.25,y=-20,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-5,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-12.5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-20,label=X_stats_X2_RF$SM) + + theme_Publication() + + R_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,r)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + annotate("text",x=-0.25,y=.9,label="NG") + + annotate("text",x=-0.25,y=.8,label="DB") + + annotate("text",x=-0.25,y=.7,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.9,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.8,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.7,label=X_stats_X2_RF$SM) + + theme_Publication() + + AUC_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,AUC)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(0,12500)) + + annotate("text",x=-0.25,y=11000,label="NG") + + annotate("text",x=-0.25,y=10000,label="DB") + + annotate("text",x=-0.25,y=9000,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=11000,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10000,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=9000,label=X_stats_X2_RF$SM) + + theme_Publication() + + + L_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),l)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,160)) + + theme_Publication() + + K_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),K)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(0,130)) + + theme_Publication() + + r_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),r)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + theme_Publication() + + AUC_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),AUC)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(0,12500)) + + theme_Publication() + + + grid.arrange(L_Stats,K_Stats,R_Stats,AUC_Stats,ncol=2,nrow=2) + grid.arrange(L_Stats_Box,K_Stats_Box,r_Stats_Box,AUC_Stats_Box,ncol=2,nrow=2) + + + + #plot the references + #grid.arrange(p3,p3_K,p3_r,p4,p4_K,p4_r,p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=4) + #grid.arrange(p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=2) + + #loop for grid arrange 4x3 + j <- rep(1,((num_genes)/3)-1) + for(n in 1:length(j)){ + j[n+1] <- n*3 + 1 + } + #loop for printing each plot + num <- 0 + for(m in 1:(round((num_genes)/3)-1)){ + num <- j[m] + grid.arrange(p_l[[num]],p_K[[num]],p_r[[num]],p_AUC[[num]],p_l[[num+1]],p_K[[num+1]],p_r[[num+1]],p_AUC[[num+1]],p_l[[num+2]],p_K[[num+2]],p_r[[num+2]],p_AUC[[num+2]],ncol=4,nrow=3) + #grid.arrange(p_l[[364]],p_K[[364]],p_r[[364]],p_l[[365]],p_K[[365]],p_r[[365]],p_l[[366]],p_K[[366]],p_r[[366]],ncol=3,nrow=3) + + + #p1[[num+3]],p_K[[num+3]],p_r[[num+3]],p1[[num+4]],p_K[[num+4]],p_r[[num+4]] + } + if(num_genes != (num+2)){ + total_num = num_genes - (num+2) + if(total_num == 5){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],p_l[[num+5]],p_K[[num+5]],p_r[[num+5]],p_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_AUC[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],p_AUC[[num+7]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + if(total_num == 4){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],p_l[[num+5]],p_K[[num+5]],p_r[[num+5]],p_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_AUC[[num+6]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + + if(total_num == 3){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],p_l[[num+5]],p_K[[num+5]],p_r[[num+5]],p_AUC[[num+5]],ncol=4,nrow=3) + #grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 2){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 1){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + } + dev.off() + + + + pdf(paste(outputpath,"RF_InteractionPlots.pdf",sep=""),width = 16, height = 16, onefile = TRUE) + + X_stats_X2_RF <- ddply(X2_RF, c("Conc_Num","Conc_Num_Factor"), summarise, + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_AUC = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + NG = sum(NG,na.rm=TRUE), + DB = sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + L_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,l)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,130)) + + annotate("text",x=-0.25,y=10,label="NG") + + annotate("text",x=-0.25,y=5,label="DB") + + annotate("text",x=-0.25,y=0,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=0,label=X_stats_X2_RF$SM) + + theme_Publication() + + K_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,K)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(-20,160)) + + annotate("text",x=-0.25,y=-5,label="NG") + + annotate("text",x=-0.25,y=-12.5,label="DB") + + annotate("text",x=-0.25,y=-20,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-5,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-12.5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-20,label=X_stats_X2_RF$SM) + + theme_Publication() + + R_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,r)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + annotate("text",x=-0.25,y=.9,label="NG") + + annotate("text",x=-0.25,y=.8,label="DB") + + annotate("text",x=-0.25,y=.7,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.9,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.8,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.7,label=X_stats_X2_RF$SM) + + theme_Publication() + + AUC_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,AUC)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(0,12500)) + + annotate("text",x=-0.25,y=11000,label="NG") + + annotate("text",x=-0.25,y=10000,label="DB") + + annotate("text",x=-0.25,y=9000,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=11000,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10000,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=9000,label=X_stats_X2_RF$SM) + + theme_Publication() + + + L_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),l)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,130)) + + theme_Publication() + + K_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),K)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(0,160)) + + theme_Publication() + + r_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),r)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + theme_Publication() + + AUC_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),AUC)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(12000,0)) + + theme_Publication() + + + grid.arrange(L_Stats,K_Stats,R_Stats,AUC_Stats,ncol=2,nrow=2) + grid.arrange(L_Stats_Box,K_Stats_Box,r_Stats_Box,AUC_Stats_Box,ncol=2,nrow=2) + + + + #plot the references + #grid.arrange(p3,p3_K,p3_r,p4,p4_K,p4_r,p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=4) + #grid.arrange(p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=2) + + #loop for grid arrange 4x3 + j <- rep(1,((num_genes_RF)/3)-1) + for(n in 1:length(j)){ + j[n+1] <- n*3 + 1 + } + #loop for printing each plot + num <- 0 + for(m in 1:(round((num_genes_RF)/3)-1)){ + num <- j[m] + grid.arrange(p_rf_l[[num]],p_rf_K[[num]],p_rf_r[[num]],p_rf_AUC[[num]],p_rf_l[[num+1]],p_rf_K[[num+1]],p_rf_r[[num+1]],p_rf_AUC[[num+1]],p_rf_l[[num+2]],p_rf_K[[num+2]],p_rf_r[[num+2]],p_rf_AUC[[num+2]],ncol=4,nrow=3) + #grid.arrange(p_rf_l[[364]],p_rf_K[[364]],p_rf_r[[364]],p_rf_l[[365]],p_rf_K[[365]],p_rf_r[[365]],p_rf_l[[366]],p_rf_K[[366]],p_rf_r[[366]],ncol=3,nrow=3) + + + #p1[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p1[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]] + } + if(num_genes_RF != (num+2)){ + total_num = num_genes_RF - (num+2) + if(total_num == 5){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],p_rf_l[[num+5]],p_rf_K[[num+5]],p_rf_r[[num+5]],p_rf_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_AUC[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],p_rf_AUC[[num+7]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + if(total_num == 4){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],p_rf_l[[num+5]],p_rf_K[[num+5]],p_rf_r[[num+5]],p_rf_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_AUC[[num+6]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + + if(total_num == 3){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],p_rf_l[[num+5]],p_rf_K[[num+5]],p_rf_r[[num+5]],p_rf_AUC[[num+5]],ncol=4,nrow=3) + #grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 2){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 1){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + } + dev.off() + + #print rank plots for L and K gene interactions + + + InteractionScores_AdjustMissing <- InteractionScores + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_L),]$Avg_Zscore_L <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_K),]$Avg_Zscore_K <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_r),]$Avg_Zscore_r <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_AUC),]$Avg_Zscore_AUC <- 0.001 + + InteractionScores_AdjustMissing$L_Rank <- NA + InteractionScores_AdjustMissing$K_Rank <- NA + InteractionScores_AdjustMissing$r_Rank <- NA + InteractionScores_AdjustMissing$AUC_Rank <- NA + + InteractionScores_AdjustMissing$L_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_L) + InteractionScores_AdjustMissing$K_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_K) + InteractionScores_AdjustMissing$r_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_r) + InteractionScores_AdjustMissing$AUC_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_AUC) + + # + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_L),]$Z_lm_L <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_K),]$Z_lm_K <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_r),]$Z_lm_r <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_AUC),]$Z_lm_AUC <- 0.001 + + InteractionScores_AdjustMissing$L_Rank_lm <- NA + InteractionScores_AdjustMissing$K_Rank_lm <- NA + InteractionScores_AdjustMissing$r_Rank_lm <- NA + InteractionScores_AdjustMissing$AUC_Rank_lm <- NA + + InteractionScores_AdjustMissing$L_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_L) + InteractionScores_AdjustMissing$K_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_K) + InteractionScores_AdjustMissing$r_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_r) + InteractionScores_AdjustMissing$AUC_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_AUC) + + + + Rank_L_1SD <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L >= 1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L >= 2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L >= 3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K <= -1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K <= -2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K <= -3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + pdf(paste(outputpath,"RankPlots.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD,Rank_L_2SD,Rank_L_3SD,Rank_K_1SD,Rank_K_2SD,Rank_K_3SD,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext,Rank_L_2SD_notext,Rank_L_3SD_notext,Rank_K_1SD_notext,Rank_K_2SD_notext,Rank_K_3SD_notext,ncol=3,nrow=2) + + dev.off() + + + Rank_L_1SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L >= 1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L >= 2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L >= 3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K <= -1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K <= -2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K <= -3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + pdf(paste(outputpath,"RankPlots_lm.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD_lm,Rank_L_2SD_lm,Rank_L_3SD_lm,Rank_K_1SD_lm,Rank_K_2SD_lm,Rank_K_3SD_lm,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext_lm,Rank_L_2SD_notext_lm,Rank_L_3SD_notext_lm,Rank_K_1SD_notext_lm,Rank_K_2SD_notext_lm,Rank_K_3SD_notext_lm,ncol=3,nrow=2) + + dev.off() + + + + X_NArm <- InteractionScores[!is.na(InteractionScores$Z_lm_L) | !is.na(InteractionScores$Avg_Zscore_L) ,] + + #find overlaps + X_NArm$Overlap <- "No Effect" + try(X_NArm[X_NArm$Z_lm_L >= 2 & X_NArm$Avg_Zscore_L >= 2,]$Overlap <- "Deletion Enhancer Both") + try(X_NArm[X_NArm$Z_lm_L <= -2 & X_NArm$Avg_Zscore_L <= -2,]$Overlap <- "Deletion Suppressor Both") + try(X_NArm[X_NArm$Z_lm_L >= 2 & X_NArm$Avg_Zscore_L <= 2,]$Overlap <- "Deletion Enhancer lm only") + try(X_NArm[X_NArm$Z_lm_L <= 2 & X_NArm$Avg_Zscore_L >= 2,]$Overlap <- "Deletion Enhancer Avg Zscore only") + try(X_NArm[X_NArm$Z_lm_L <= -2 & X_NArm$Avg_Zscore_L >= -2,]$Overlap <- "Deletion Suppressor lm only") + try(X_NArm[X_NArm$Z_lm_L >= -2 & X_NArm$Avg_Zscore_L <= -2,]$Overlap <- "Deletion Suppressor Avg Zscore only") + try(X_NArm[X_NArm$Z_lm_L >= 2 & X_NArm$Avg_Zscore_L <= -2,]$Overlap <- "Deletion Enhancer lm, Deletion Suppressor Avg Z score") + try(X_NArm[X_NArm$Z_lm_L <= -2 & X_NArm$Avg_Zscore_L >= 2,]$Overlap <- "Deletion Suppressor lm, Deletion Enhancer Avg Z score") + + #get the linear model info and the r-squared value for all CPPs in results 1 vs results 2 + get_lm_L <- lm(X_NArm$Z_lm_L~X_NArm$Avg_Zscore_L) + L_lm <- summary(get_lm_L) + + get_lm_K <- lm(X_NArm$Z_lm_K~X_NArm$Avg_Zscore_K) + K_lm <- summary(get_lm_K) + + get_lm_r <- lm(X_NArm$Z_lm_r~X_NArm$Avg_Zscore_r) + r_lm <- summary(get_lm_r) + + get_lm_AUC <- lm(X_NArm$Z_lm_AUC~X_NArm$Avg_Zscore_AUC) + AUC_lm <- summary(get_lm_AUC) + + pdf(paste(outputpath,"Avg_Zscore_vs_lm_NA_rm.pdf",sep=""),width = 16, height = 12, onefile = TRUE) + + print(ggplot(X_NArm,aes(Avg_Zscore_L,Z_lm_L)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm L") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(Avg_Zscore_K,Z_lm_K)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm K") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(K_lm$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(Avg_Zscore_r,Z_lm_r)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm r") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(r_lm$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(Avg_Zscore_AUC,Z_lm_AUC)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm AUC") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(AUC_lm$r.squared,2))) + theme_Publication_legend_right()) + + dev.off() + + + lm_v_Zscore_L <- ggplot(X_NArm,aes(Avg_Zscore_L,Z_lm_L,ORF=OrfRep,Gene=Gene,NG=NG,SM=SM,DB=DB)) + geom_point(aes(color=Overlap),shape=3) + + geom_smooth(method = "lm",color=1) + ggtitle("Avg Zscore vs lm L") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm$r.squared,2))) + theme_Publication_legend_right() + + pgg <- ggplotly(lm_v_Zscore_L) + #pgg + plotly_path <- paste(getwd(),"/",outputpath,"Avg_Zscore_vs_lm_NA_rm.html",sep="") + saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + X_NArm$L_Rank <- rank(X_NArm$Avg_Zscore_L) + X_NArm$K_Rank <- rank(X_NArm$Avg_Zscore_K) + X_NArm$r_Rank <- rank(X_NArm$Avg_Zscore_r) + X_NArm$AUC_Rank <- rank(X_NArm$Avg_Zscore_AUC) + + X_NArm$L_Rank_lm <- rank(X_NArm$Z_lm_L) + X_NArm$K_Rank_lm <- rank(X_NArm$Z_lm_K) + X_NArm$r_Rank_lm <- rank(X_NArm$Z_lm_r) + X_NArm$AUC_Rank_lm <- rank(X_NArm$Z_lm_AUC) + + #get the linear model info and the r-squared value for all CPPs in results 1 vs results 2 + get_lm_L2 <- lm(X_NArm$L_Rank_lm~X_NArm$L_Rank) + L_lm2 <- summary(get_lm_L2) + + get_lm_K2 <- lm(X_NArm$K_Rank_lm~X_NArm$K_Rank) + K_lm2 <- summary(get_lm_K2) + + get_lm_r2 <- lm(X_NArm$r_Rank_lm~X_NArm$r_Rank) + r_lm2 <- summary(get_lm_r2) + + get_lm_AUC2 <- lm(X_NArm$AUC_Rank_lm~X_NArm$AUC_Rank) + AUC_lm2 <- summary(get_lm_AUC2) + + num_genes_NArm2 <- (dim(X_NArm)[1])/2 + + pdf(paste(outputpath,"Avg_Zscore_vs_lm_ranked_NA_rm.pdf",sep=""),width = 16, height = 12, onefile = TRUE) + + print(ggplot(X_NArm,aes(L_Rank,L_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank Avg Zscore vs lm L") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(L_lm2$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(K_Rank,K_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank Avg Zscore vs lm K") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(K_lm2$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(r_Rank,r_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank Avg Zscore vs lm r") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(r_lm2$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(AUC_Rank,AUC_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank of Avg Zscore vs lm AUC") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(AUC_lm2$r.squared,2))) + theme_Publication_legend_right()) + + + + dev.off() + + + + Rank_L_1SD <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_L >= 1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_L >= 2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_L >= 3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_K <= -1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_K <= -2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_K <= -3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + pdf(paste(outputpath,"RankPlots_naRM.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD,Rank_L_2SD,Rank_L_3SD,Rank_K_1SD,Rank_K_2SD,Rank_K_3SD,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext,Rank_L_2SD_notext,Rank_L_3SD_notext,Rank_K_1SD_notext,Rank_K_2SD_notext,Rank_K_3SD_notext,ncol=3,nrow=2) + + dev.off() + + + Rank_L_1SD_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_L >= 1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_L >= 2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_L >= 3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_K <= -1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_K <= -2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_K <= -3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + pdf(paste(outputpath,"RankPlots_lm_naRM.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD_lm,Rank_L_2SD_lm,Rank_L_3SD_lm,Rank_K_1SD_lm,Rank_K_2SD_lm,Rank_K_3SD_lm,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext_lm,Rank_L_2SD_notext_lm,Rank_L_3SD_notext_lm,Rank_K_1SD_notext_lm,Rank_K_2SD_notext_lm,Rank_K_3SD_notext_lm,ncol=3,nrow=2) + + dev.off() + +} + + + +#get the linear model info and the r-squared value for all CPPs in results 1 vs results 2 +get_lm_1 <- lm(X_NArm$Z_lm_K~X_NArm$Z_lm_L) +L_lm_1 <- summary(get_lm_1) + +get_lm_2 <- lm(X_NArm$Z_lm_r~X_NArm$Z_lm_L) +L_lm_2 <- summary(get_lm_2) + +get_lm_3 <- lm(X_NArm$Z_lm_AUC~X_NArm$Z_lm_L) +L_lm_3 <- summary(get_lm_3) + +get_lm_4 <- lm(X_NArm$Z_lm_r~X_NArm$Z_lm_K) +L_lm_4 <- summary(get_lm_4) + +get_lm_5 <- lm(X_NArm$Z_lm_AUC~X_NArm$Z_lm_K) +L_lm_5 <- summary(get_lm_5) + +get_lm_6 <- lm(X_NArm$Z_lm_AUC~X_NArm$Z_lm_r) +L_lm_6 <- summary(get_lm_6) + + +pdf(file=paste(outputpath,"Correlation_CPPs.pdf",sep=""),width = 10, height = 7, onefile = TRUE) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_K)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction L vs. Interaction K") + + xlab("z-score L") + ylab("z-score K") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_1$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction L vs. Interaction r") + + xlab("z-score L") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_2$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction L vs. Interaction AUC") + + xlab("z-score L") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_3$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction K vs. Interaction r") + + xlab("z-score K") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_4$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction K vs. Interaction AUC") + + xlab("z-score K") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_5$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_r,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction r vs. Interaction AUC") + + xlab("z-score r") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_6$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +InteractionScores_RF2 <- InteractionScores_RF[!is.na(InteractionScores_RF$Z_lm_L),] +ggplot(X_NArm,aes(Z_lm_L,Z_lm_K)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_L,Z_lm_K),color="cyan") + + ggtitle("Interaction L vs. Interaction K") + + xlab("z-score L") + ylab("z-score K") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_1$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_L,Z_lm_r),color="cyan") + + ggtitle("Interaction L vs. Interaction r") + + xlab("z-score L") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_2$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_L,Z_lm_AUC),color="cyan") + + ggtitle("Interaction L vs. Interaction AUC") + + xlab("z-score L") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_3$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_K,Z_lm_r),color="cyan") + + ggtitle("Interaction K vs. Interaction r") + + xlab("z-score K") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_4$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_K,Z_lm_AUC),color="cyan") + + ggtitle("Interaction K vs. Interaction AUC") + + xlab("z-score K") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_5$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_r,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_r,Z_lm_AUC),color="cyan") + + ggtitle("Interaction r vs. Interaction AUC") + + xlab("z-score r") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_6$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + + + + + +dev.off() + + +#write.csv(Labels,file=paste("../Code/Parameters.csv"),row.names = FALSE) +timestamp() + +#BoneYard*********************************************** +#I'm thinking this parameter needs to be save somewhere "permanent' for the record so outputs can be reproduced. +#take this out of the Arguments. In Matlab I could for future in .mat file. Maybe I could save the SD Args[2] as part of the StudyInfo.txt. +#Corruptable but better than nothing. +#if(is.na(Args[2])){ +# std=3 +#}else { +# std= Arg[2] +#Delta_Background_sdFactor <- 2 #Args[3] +#DelBGFactr <- as.numeric(Delta_Background_sdFactor) +#} + diff --git a/workflow/.old/templates/qhtcp/Exp4/backups/InteractTemplateB4Prompt4SDinput.R b/workflow/.old/templates/qhtcp/Exp4/backups/InteractTemplateB4Prompt4SDinput.R new file mode 100644 index 00000000..3b11777c --- /dev/null +++ b/workflow/.old/templates/qhtcp/Exp4/backups/InteractTemplateB4Prompt4SDinput.R @@ -0,0 +1,2702 @@ +#Based on InteractionTemplate.R which is based on Sean Santose's Interaction_V5 script. +#Adapt SS For Structured Data storage but using command line scripts +###Set up the required libraries, call required plot theme elements and set up the command line arguments +library("ggplot2") +library("plyr") +library("extrafont") +library("gridExtra") +library("gplots") +library("RColorBrewer") +library("stringr") +#library("gdata") +library(plotly) +library(htmlwidgets) + +Args <- commandArgs(TRUE) +input_file <- Args[1] #"!!Results_17_0827_yor1null-rpl12anull misLabeledAsFrom MI 17_0919_yor1-curated.txt" #Args[1] #Arg 1 #"!!ResultsStd_JS 19_1224_HLEG_P53.txt" is the !!results ... .txt + +#Path to Output Directory +W=getwd() #R is F'd up, Can't use, Any legitamate platfold could build out dirs from this +outDir <- "ZScores/" #"Args[2] #paste0(W,"/ZScores/") +subDir <- outDir #Args[2] + +if (file.exists(subDir)){ + outputpath <- subDir +} else { + dir.create(file.path(subDir)) +} + +if (file.exists(paste(subDir,"QC/",sep=""))){ + outputpath_QC <- paste(subDir,"QC/",sep="") +} else { + dir.create(file.path(paste(subDir,"QC/",sep=""))) + outputpath_QC <- paste(subDir,"QC/",sep="") +} +#define the output path (formerly the second argument from Rscript) +outputpath <- outDir + +#Set Args[2] the Background contamination noise filter as a function of standard deviation +#Sean recommends 3 or 5 SD factor. +#Capture Exp_ number,use it to Save Args[2]{std}to Labels field and then Write to Labels to studyInfo.txt for future reference +Labels <- read.csv(file= "../Code/StudyInfo.csv",stringsAsFactors = FALSE) #,sep= ",") +print("Be sure to include Argument 2 the Bacground noise filter standard deviation i.e., 3 or 5 per Sean") +std= as.numeric(Args[2]) +expNumber<- as.numeric(sub("^.*?(\\d+)$", "\\1", getwd())) +Labels[expNumber,3]= as.numeric(std) +Delta_Background_sdFactor <- std +DelBGFactr <- as.numeric(Delta_Background_sdFactor) +#Write Background SD value to studyInfo.txt file +#write.csv(Labels,file=paste("../Code/StudyInfo.csv"),row.names = FALSE) +write.csv(Labels,file=paste("../Code/StudyInfo.csv"),row.names = FALSE) +print('ln 50 write StudyInfo.csv ') +#write.table(Labels,file=paste(outputpath,"StudyInfo.txt"),sep = "\t",row.names = FALSE) + +#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +#++++++BEGIN USER DATA SELECTION SECTION+++++++++++++++++++++++++++++++++++++++++++++++++ + + +#read in the data +X <- read.delim(input_file,skip=2,as.is=T,row.names=1,strip.white=TRUE) +X <- X[!(X[[1]]%in%c("","Scan")),] +#X <- X[!(X[[1]]%in%c(61:76)),] #Remove dAmp plates which are Scans 61 thru 76 + +#X <- X[which(X$Specifics == "WT"),] + +X_length <- length(X[1,]) +X_end <- length(X[1,]) - 2 +X <- X[,c(1:46,X_end:X_length)] + + +#use numeric data to perform operations +X$Col <- as.numeric(X$Col) +X$Row <- as.numeric(X$Row) +X$l <- as.numeric(X$l) +X$K <- as.numeric(X$K) +X$r <- as.numeric(X$r) +X$Scan <- as.numeric(X$Scan) +X$AUC <- as.numeric(X$AUC) +X$LstBackgrd <- as.numeric(X$LstBackgrd) +X$X1stBackgrd <- as.numeric(X$X1stBackgrd) + +#set the OrfRep to YDL227C for the ref data +X[X$ORF == "YDL227C",]$OrfRep <- "YDL227C" +#Sean removes the Doxycyclin at 0.0ug.mL so that only the Oligomycin series with Doxycyclin of 0.12ug/mL are used. +#That is the first DM plates are removed from the data set with the following. +X <- X[X$Conc1 != "0ug/mL",] #This occurs only for Exp1 and Exp2 and so doesn't have any effect on Exp3&4 + + +#Mert placed the"bad_spot" text in the ORF col. for particular spots in the RF1 and RF2 plates. +#This code removes those spots from the data set used for the interaction analysis. Dr.Hartman feels that these donot effect Zscores significantly and so "non-currated" files were used. +#try(X <- X[X$ORF != "bad_spot",]) +#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= + +#get total number of drug concentrations +Total_Conc_Nums <- length(unique(X$Conc)) + +#function to ID numbers in string with characters+numbers (ie to get numeric drug conc) +numextract <- function(string){ + str_extract(string, "\\-*\\d+\\.*\\d*") +} + +#generate a new column with the numeric drug concs +X$Conc_Num <- as.numeric(numextract(X$Conc)) +#Generate new column with the numeric drug concs as factors starting at 0 for the graphing later +X$Conc_Num_Factor <- as.numeric(as.factor(X$Conc_Num)) - 1 + +#Get the max factor for concentration +MAX_CONC <- max(X$Conc_Num_Factor) +#if treating numbers not as factors uncomment next line and comment out previous line +#MAX_CONC <- max(X$Conc_Num) + +#remove wells with problems for making graphs and to not include in summary statistics +X <- X[X$Gene != "BLANK",] +X <- X[X$Gene != "Blank",] +X <- X[X$ORF != "Blank",] +X <- X[X$Gene != "blank",] +#X <- X[X$Gene != "HO",] +Xbu= X +#Inserted to use SGDgenelist to update orfs and replace empty geneName cells with ORF name (adapted from Sean's Merge script). This is to 'fix' the naming for everything that follows (REMc, Heatmaps ... et.al) rather than do it piece meal later +#Sean's Match Script( which was adapted here) was fixed 2022_0608 so as not to write over the RF1&RF2 geneNames which caused a variance with his code results +#in the Z_lm_L,K,r&AUC output values. Values correlated well but were off by a multiplier factor. +SGDgeneList= "../Code/SGD_features.tab" +genes = data.frame(read.delim(file=SGDgeneList,quote="",header=FALSE,colClasses = c(rep("NULL",3), rep("character", 2), rep("NULL", 11)))) +for(i in 1:length(X[,14])){ + ii= as.numeric(i) + line_num = match(X[ii,14],genes[,1],nomatch=1) + OrfRepColNum= as.numeric(match('OrfRep',names(X))) + if(X[ii,OrfRepColNum]!= "YDL227C"){ + X[ii,15] = genes[line_num,2] + } + if((X[ii,15] == "")||(X[ii,15] == "OCT1")){ + X[ii,15] = X[ii,OrfRepColNum] + } +} +Xblankreplace= X +#X= Xbu #for restore testing restore X if geneName 'Match' routine needs changing + +#Remove dAmPs ******************************* +DAmPs_List <- "../Code/22_0602_Remy_DAmPsList.txt" +Damps <- read.delim(DAmPs_List,header=F) + +X <- X[!(X$ORF %in% Damps$V1),] #fix this to Damps[,1] +XafterDampsRM=X #Backup for debugging especially when Rstudio goes crazy out of control +# *********** + + +#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +#++++++END USER DATA SELECTION+++++++++++++++++++++++++++++++++++++++++++++++++ +#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +print("ln137 End of User Section including blank gene writeOver") +#++++Begin Graphics Boiler Plate Section+++++++++++++++++++++++++++++++++++++++ +#theme elements for plots +theme_Publication <- function(base_size=14, base_family="sans") { + library(grid) + library(ggthemes) + (theme_foundation(base_size=base_size, base_family=base_family) + + theme(plot.title = element_text(face = "bold", + size = rel(1.2), hjust = 0.5), + text = element_text(), + panel.background = element_rect(colour = NA), + plot.background = element_rect(colour = NA), + panel.border = element_rect(colour = NA), + axis.title = element_text(face = "bold",size = rel(1)), + axis.title.y = element_text(angle=90,vjust =2), + axis.title.x = element_text(vjust = -0.2), + axis.text = element_text(), + axis.line = element_line(colour="black"), + axis.ticks = element_line(), + panel.grid.major = element_line(colour="#f0f0f0"), + panel.grid.minor = element_blank(), + legend.key = element_rect(colour = NA), + legend.position = "bottom", + legend.direction = "horizontal", + legend.key.size= unit(0.2, "cm"), + legend.spacing = unit(0, "cm"), + legend.title = element_text(face="italic"), + plot.margin=unit(c(10,5,5,5),"mm"), + strip.background=element_rect(colour="#f0f0f0",fill="#f0f0f0"), + strip.text = element_text(face="bold") + )) + +} + +scale_fill_Publication <- function(...){ + library(scales) + discrete_scale("fill","Publication",manual_pal(values = c("#386cb0","#fdb462","#7fc97f","#ef3b2c","#662506","#a6cee3","#fb9a99","#984ea3","#ffff33")), ...) + +} + +scale_colour_Publication <- function(...){ + discrete_scale("colour","Publication",manual_pal(values = c("#386cb0","#fdb462","#7fc97f","#ef3b2c","#662506","#a6cee3","#fb9a99","#984ea3","#ffff33")), ...) + +} + + +theme_Publication_legend_right <- function(base_size=14, base_family="sans") { + (theme_foundation(base_size=base_size, base_family=base_family) + + theme(plot.title = element_text(face = "bold", + size = rel(1.2), hjust = 0.5), + text = element_text(), + panel.background = element_rect(colour = NA), + plot.background = element_rect(colour = NA), + panel.border = element_rect(colour = NA), + axis.title = element_text(face = "bold",size = rel(1)), + axis.title.y = element_text(angle=90,vjust =2), + axis.title.x = element_text(vjust = -0.2), + axis.text = element_text(), + axis.line = element_line(colour="black"), + axis.ticks = element_line(), + panel.grid.major = element_line(colour="#f0f0f0"), + panel.grid.minor = element_blank(), + legend.key = element_rect(colour = NA), + legend.position = "right", + legend.direction = "vertical", + legend.key.size= unit(0.5, "cm"), + legend.spacing = unit(0, "cm"), + legend.title = element_text(face="italic"), + plot.margin=unit(c(10,5,5,5),"mm"), + strip.background=element_rect(colour="#f0f0f0",fill="#f0f0f0"), + strip.text = element_text(face="bold") + )) + +} + +scale_fill_Publication <- function(...){ + discrete_scale("fill","Publication",manual_pal(values = c("#386cb0","#fdb462","#7fc97f","#ef3b2c","#662506","#a6cee3","#fb9a99","#984ea3","#ffff33")), ...) + +} + +scale_colour_Publication <- function(...){ + discrete_scale("colour","Publication",manual_pal(values = c("#386cb0","#fdb462","#7fc97f","#ef3b2c","#662506","#a6cee3","#fb9a99","#984ea3","#ffff33")), ...) + +} + + +#print timestamp for initial time the code starts +timestamp() +#+++++BEGIN QC SECTION+++++++++++++++++++++++++++++++++++++++++++++++++++++++ +###Part 2 - Quality control +#print quality control graphs for each dataset before removing data due to contamination +#and before adjusting missing data to max theoretical values + +#plate analysis plot +#plate analysis is a quality check to identify plate effects containing anomalies + +Plate_Analysis_L <- ggplot(X,aes(Scan,l,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for L before quality control") + theme_Publication() + +Plate_Analysis_K <- ggplot(X,aes(Scan,K,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for K before quality control") + theme_Publication() + +Plate_Analysis_r <- ggplot(X,aes(Scan,r,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for r before quality control") + theme_Publication() + +Plate_Analysis_AUC <- ggplot(X,aes(Scan,AUC,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for AUC before quality control") + theme_Publication() + + + +Plate_Analysis_L_Box <- ggplot(X,aes(as.factor(Scan),l,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for L before quality control") + theme_Publication() + +Plate_Analysis_K_Box <- ggplot(X,aes(as.factor(Scan),K,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for K before quality control") + theme_Publication() + +Plate_Analysis_r_Box <- ggplot(X,aes(as.factor(Scan),r,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for r before quality control") + theme_Publication() + +Plate_Analysis_AUC_Box <- ggplot(X,aes(as.factor(Scan),AUC,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for AUC before quality control") + theme_Publication() + +#quality control - values with a high delta background likely have heavy contamination +#check the frequency of these values +#report the L and K values of these spots +#report the number to be removed based on the Delta_Background_Tolerance +X$Delta_Backgrd <- X$LstBackgrd - X$X1stBackgrd + + +#raw l vs K before QC +Raw_l_vs_K_beforeQC <- ggplot(X,aes(l,K,color=as.factor(Conc_Num))) + geom_point(aes(ORF=ORF,Gene=Gene,Delta_Backgrd=Delta_Backgrd),shape=3) + + ggtitle("Raw L vs K before QC") + + theme_Publication_legend_right() +pdf(paste(outputpath_QC,"Raw_L_vs_K_beforeQC.pdf",sep=""),width = 12,height = 8) +Raw_l_vs_K_beforeQC +dev.off() +pgg <- ggplotly(Raw_l_vs_K_beforeQC) +#pgg +plotly_path <- paste(getwd(),"/",outputpath_QC,"Raw_L_vs_K_beforeQC.html",sep="") +saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + +#set delta background tolerance based on 3 sds from the mean delta background +Delta_Background_Tolerance <- mean(X$Delta_Backgrd)+(DelBGFactr*sd(X$Delta_Backgrd)) +#Delta_Background_Tolerance <- mean(X$Delta_Backgrd)+(3*sd(X$Delta_Backgrd)) +print(paste("Delta_Background_Tolerance is",Delta_Background_Tolerance,sep=" ")) + +Plate_Analysis_Delta_Backgrd <- ggplot(X,aes(Scan,Delta_Backgrd,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2,position="jitter") + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd before quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_Box <- ggplot(X,aes(as.factor(Scan),Delta_Backgrd,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd before quality control") + theme_Publication() + + + +X_Delta_Backgrd_above_Tolerance <- X[X$Delta_Backgrd >= Delta_Background_Tolerance,] + +X_Delta_Backgrd_above_Tolerance_K_halfmedian <- (median(X_Delta_Backgrd_above_Tolerance$K,na.rm = TRUE))/2 +X_Delta_Backgrd_above_Tolerance_L_halfmedian <- (median(X_Delta_Backgrd_above_Tolerance$l,na.rm = TRUE))/2 +X_Delta_Backgrd_above_Tolerance_toRemove <- dim(X_Delta_Backgrd_above_Tolerance)[1] + +X_Delta_Backgrd_above_Tolerance_L_vs_K <- ggplot(X_Delta_Backgrd_above_Tolerance,aes(l,K,color=as.factor(Conc_Num))) + geom_point(aes(ORF=ORF,Gene=Gene,Delta_Backgrd=Delta_Backgrd),shape=3) + + ggtitle(paste("Raw L vs K for strains above delta background threshold of",Delta_Background_Tolerance,"or above")) + + annotate("text",x=X_Delta_Backgrd_above_Tolerance_L_halfmedian,y=X_Delta_Backgrd_above_Tolerance_K_halfmedian, + label = paste("Strains above delta background tolerance = ",X_Delta_Backgrd_above_Tolerance_toRemove)) + + theme_Publication_legend_right() +pdf(paste(outputpath_QC,"Raw_L_vs_K_for_strains_above_deltabackgrd_threshold.pdf",sep=""),width = 12,height = 8) +X_Delta_Backgrd_above_Tolerance_L_vs_K +dev.off() +pgg <- ggplotly(X_Delta_Backgrd_above_Tolerance_L_vs_K) +#pgg +plotly_path <- paste(getwd(),"/",outputpath_QC,"Raw_L_vs_K_for_strains_above_deltabackgrd_threshold.html",sep="") +saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + +#frequency plot for all data vs. the delta_background +DeltaBackground_Frequency_Plot <- ggplot(X,aes(Delta_Backgrd,color=as.factor(Conc_Num))) + geom_density() + + ggtitle("Density plot for Delta Background by Conc All Data") + theme_Publication_legend_right() + +#bar plot for all data vs. the delta_background +DeltaBackground_Bar_Plot <- ggplot(X,aes(Delta_Backgrd,color=as.factor(Conc_Num))) + geom_bar() + + ggtitle("Bar plot for Delta Background by Conc All Data") + theme_Publication_legend_right() + +pdf(file = paste(outputpath_QC,"Frequency_Delta_Background.pdf",sep=""),width = 12,height = 8) +print(DeltaBackground_Frequency_Plot) +print(DeltaBackground_Bar_Plot) +dev.off() + + +#Need to identify missing data, and differentiate between this data and removed data so the removed data can get set to NA and the missing data can get set to max theoretical values +#1 for missing data, 0 for non missing data +#Use "NG" for NoGrowth rather than "missing" +X$NG <- 0 +try(X[X$l == 0 & !is.na(X$l),]$NG <- 1) + +#1 for removed data, 0 non removed data +#Use DB to identify number of genes removed due to the DeltaBackground Threshold rather than "Removed" +X$DB <- 0 +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$DB <- 1) + +#replace the CPPs for l, r, AUC and K (must be last!) for removed data +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$l <- NA) +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$r <- NA) +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$AUC <- NA) +try(X[X$Delta_Backgrd >= Delta_Background_Tolerance,]$K <- NA) + + +Plate_Analysis_L_afterQC <- ggplot(X,aes(Scan,l,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_afterQC <- ggplot(X,aes(Scan,K,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_afterQC <- ggplot(X,aes(Scan,r,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_afterQC <- ggplot(X,aes(Scan,AUC,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_afterQC <- ggplot(X,aes(Scan,Delta_Backgrd,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + + +Plate_Analysis_L_Box_afterQC <- ggplot(X,aes(as.factor(Scan),l,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_Box_afterQC <- ggplot(X,aes(as.factor(Scan),K,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_Box_afterQC <- ggplot(X,aes(as.factor(Scan),r,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_Box_afterQC <- ggplot(X,aes(as.factor(Scan),AUC,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_Box_afterQC <- ggplot(X,aes(as.factor(Scan),Delta_Backgrd,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis.pdf",sep=""),width = 14,height=9) +Plate_Analysis_L +Plate_Analysis_L_afterQC +Plate_Analysis_K +Plate_Analysis_K_afterQC +Plate_Analysis_r +Plate_Analysis_r_afterQC +Plate_Analysis_AUC +Plate_Analysis_AUC_afterQC +Plate_Analysis_Delta_Backgrd +Plate_Analysis_Delta_Backgrd_afterQC +dev.off() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis_Boxplots.pdf",sep=""),width = 18,height=9) +Plate_Analysis_L_Box +Plate_Analysis_L_Box_afterQC +Plate_Analysis_K_Box +Plate_Analysis_K_Box_afterQC +Plate_Analysis_r_Box +Plate_Analysis_r_Box_afterQC +Plate_Analysis_AUC_Box +Plate_Analysis_AUC_Box_afterQC +Plate_Analysis_Delta_Backgrd_Box +Plate_Analysis_Delta_Backgrd_Box_afterQC +dev.off() + +#remove the zero values and print plate analysis +X_noZero <- X[which(X$l > 0),] +Plate_Analysis_L_afterQC_Z <- ggplot(X_noZero,aes(Scan,l,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_afterQC_Z <- ggplot(X_noZero,aes(Scan,K,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_afterQC_Z <- ggplot(X_noZero,aes(Scan,r,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_afterQC_Z <- ggplot(X_noZero,aes(Scan,AUC,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_afterQC_Z <- ggplot(X_noZero,aes(Scan,Delta_Backgrd,color=as.factor(Conc_Num))) + geom_point(shape=3,size=0.2) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar") + stat_summary(fun.y = mean, geom = "point",size=0.6) + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + + +Plate_Analysis_L_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),l,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for L after quality control") + theme_Publication() + +Plate_Analysis_K_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),K,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for K after quality control") + theme_Publication() + +Plate_Analysis_r_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),r,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for r after quality control") + theme_Publication() + +Plate_Analysis_AUC_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),AUC,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for AUC after quality control") + theme_Publication() + +Plate_Analysis_Delta_Backgrd_Box_afterQC_Z <- ggplot(X_noZero,aes(as.factor(Scan),Delta_Backgrd,color=as.factor(Conc_Num))) + geom_boxplot() + + ggtitle("Plate analysis by Drug Conc for Delta_Backgrd after quality control") + theme_Publication() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis_noZeros.pdf",sep=""),width = 14,height=9) +Plate_Analysis_L_afterQC_Z +Plate_Analysis_K_afterQC_Z +Plate_Analysis_r_afterQC_Z +Plate_Analysis_AUC_afterQC_Z +Plate_Analysis_Delta_Backgrd_afterQC_Z +dev.off() + +#print the plate analysis data before and after QC +pdf(file=paste(outputpath_QC,"Plate_Analysis_noZeros_Boxplots.pdf",sep=""),width = 18,height=9) +Plate_Analysis_L_Box_afterQC_Z +Plate_Analysis_K_Box_afterQC_Z +Plate_Analysis_r_Box_afterQC_Z +Plate_Analysis_AUC_Box_afterQC_Z +Plate_Analysis_Delta_Backgrd_Box_afterQC_Z +dev.off() + +#remove dataset with zeros removed +rm(X_noZero) + + +#X_test_missing_and_removed <- X[X$Removed == 1,] + +#calculate summary statistics for all strains, including both background and the deletions +X_stats_ALL <- ddply(X, c("Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_AUC = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + se_AUC = sd_AUC / sqrt(N-1) +) +#print(X_stats_ALL_L) + +write.csv(X_stats_ALL,file=paste(outputpath,"SummaryStats_ALLSTRAINS.csv"),row.names = FALSE) +#+++++END QC SECTION+++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +##### Part 3 - Generate summary statistics and calculate the max theoretical L value +##### Calculate the Z score at each drug conc for each deletion strain + + +#get the background strains - can be modified to take another argument but for most screens will just be YDL227C +Background_Strains <- c("YDL227C") + +#first part of loop will go through for each background strain +#most cases there will only be one YDL227C +for(s in Background_Strains){ + X_Background <- X[X$OrfRep == s,] + + #if there's missing data for the background strains set these values to NA so the 0 values aren't included in summary statistics + #we may want to consider in some cases giving the max high value to L depending on the data type + if(table(X_Background$l)[1] == 0){ + X_Background[X_Background$l == 0,]$l <- NA + X_Background[X_Background$K == 0,]$K <- NA + X_Background[X_Background$r == 0,]$r <- NA + X_Background[X_Background$AUC == 0,]$AUC <- NA + } + + X_Background <- X_Background[!is.na(X_Background$l),] + + #get summary stats for L, K, R, AUC + X_stats_BY_L <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean = mean(l,na.rm=TRUE), + median = median(l,na.rm=TRUE), + max = max(l,na.rm=TRUE), + min = min(l,na.rm=TRUE), + sd = sd(l,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + print(X_stats_BY_L) + X1_SD <- max(X_stats_BY_L$sd) + + X_stats_BY_K <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(K)), + mean = mean(K,na.rm=TRUE), + median = median(K,na.rm=TRUE), + max = max(K,na.rm=TRUE), + min = min(K,na.rm=TRUE), + sd = sd(K,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + + X1_SD_K <- max(X_stats_BY_K$sd) + + + X_stats_BY_r <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = length(r), + mean = mean(r,na.rm=TRUE), + median = median(r,na.rm=TRUE), + max = max(r,na.rm=TRUE), + min = min(r,na.rm=TRUE), + sd = sd(r,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + + X1_SD_r <- max(X_stats_BY_r$sd) + + X_stats_BY_AUC <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = length(AUC), + mean = mean(AUC,na.rm=TRUE), + median = median(AUC,na.rm=TRUE), + max = max(AUC,na.rm=TRUE), + min = min(AUC,na.rm=TRUE), + sd = sd(AUC,na.rm=TRUE), + se = sd / sqrt(N-1) + ) + + X1_SD_AUC <- max(X_stats_BY_AUC$sd) + + X_stats_BY <- ddply(X_Background, c("OrfRep","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_L = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + se_AUC = sd_AUC / sqrt(N-1) + ) + + write.csv(X_stats_BY,file=paste(outputpath,"SummaryStats_BackgroundStrains.csv"),row.names=FALSE) + + #calculate the max theoretical L values + #only look for max values when K is within 2SD of the ref strain + for(q in unique(X$Conc_Num_Factor)){ + if(q == 0){ + X_within_2SD_K <- X[X$Conc_Num_Factor == q,] + X_within_2SD_K <- X_within_2SD_K[!is.na(X_within_2SD_K$l),] + X_stats_TEMP_K <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_within_2SD_K <- X_within_2SD_K[X_within_2SD_K$K >= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])) ,] + X_within_2SD_K <- X_within_2SD_K[X_within_2SD_K$K <= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + + X_outside_2SD_K <- X[X$Conc_Num_Factor == q,] + X_outside_2SD_K <- X_outside_2SD_K[!is.na(X_outside_2SD_K$l),] + #X_outside_2SD_K_Temp <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_outside_2SD_K <- X_outside_2SD_K[X_outside_2SD_K$K <= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])) | X_outside_2SD_K$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + #X_outside_2SD_K <- X_outside_2SD_K[X_outside_2SD_K$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + + } + if(q > 0){ + X_within_2SD_K_temp <- X[X$Conc_Num_Factor == q,] + X_within_2SD_K_temp <- X_within_2SD_K_temp[!is.na(X_within_2SD_K_temp$l),] + X_stats_TEMP_K <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_within_2SD_K_temp <- X_within_2SD_K_temp[X_within_2SD_K_temp$K >= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])),] + X_within_2SD_K_temp <- X_within_2SD_K_temp[X_within_2SD_K_temp$K <= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])),] + X_within_2SD_K <- rbind(X_within_2SD_K,X_within_2SD_K_temp) + + X_outside_2SD_K_temp <- X[X$Conc_Num_Factor == q,] + X_outside_2SD_K_temp <- X_outside_2SD_K_temp[!is.na(X_outside_2SD_K_temp$l),] + #X_outside_2SD_K_Temp <- X_stats_BY_K[X_stats_BY_K$Conc_Num_Factor == q,] + X_outside_2SD_K_temp <- X_outside_2SD_K_temp[X_outside_2SD_K_temp$K <= (X_stats_TEMP_K$mean[1] - (2*X_stats_TEMP_K$sd[1])) | X_outside_2SD_K_temp$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + #X_outside_2SD_K_temp <- X_outside_2SD_K_temp[X_outside_2SD_K_temp$K >= (X_stats_TEMP_K$mean[1] + (2*X_stats_TEMP_K$sd[1])) ,] + X_outside_2SD_K <- rbind(X_outside_2SD_K,X_outside_2SD_K_temp) + } + } + + X_stats_BY_L_within_2SD_K <- ddply(X_within_2SD_K, c("Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean = mean(l), + median = median(l), + max = max(l,na.rm=TRUE), + min = min(l,na.rm=TRUE), + sd = sd(l), + se = sd / sqrt(N-1), + z_max = (max-mean)/sd + ) + print(X_stats_BY_L_within_2SD_K) + X1_SD_within_2SD_K <- max(X_stats_BY_L_within_2SD_K$sd) + write.csv(X_stats_BY_L_within_2SD_K,file=paste(outputpath_QC,"Max_Observed_L_Vals_for_spots_within_2SD_K.csv",sep=""),row.names=FALSE) + + X_stats_BY_L_outside_2SD_K <- ddply(X_outside_2SD_K, c("Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean = mean(l), + median = median(l), + max = max(l,na.rm=TRUE), + min = min(l,na.rm=TRUE), + sd = sd(l), + se = sd / sqrt(N-1) + ) + print(X_stats_BY_L_outside_2SD_K) + X1_SD_outside_2SD_K <- max(X_stats_BY_L_outside_2SD_K$sd) + + #X1_SD_outside_2SD_K <- X[X$l %in% X1_SD_within_2SD_K$l,] + Outside_2SD_K_L_vs_K <- ggplot(X_outside_2SD_K,aes(l,K,color=as.factor(Conc_Num))) + geom_point(aes(ORF=ORF,Gene=Gene,Delta_Backgrd=Delta_Backgrd),shape=3) + + ggtitle("Raw L vs K for strains falling outside 2SD of the K mean at each conc") + theme_Publication_legend_right() + pdf(paste(outputpath_QC,"Raw_L_vs_K_for_strains_2SD_outside_mean_K.pdf",sep=""),width = 10,height = 8) + print(Outside_2SD_K_L_vs_K) + dev.off() + pgg <- ggplotly(Outside_2SD_K_L_vs_K) + plotly_path <- paste(getwd(),"/",outputpath_QC,"RawL_vs_K_for_strains_outside_2SD_K.html",sep="") + saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + + Outside_2SD_K_delta_background_vs_K <- ggplot(X_outside_2SD_K,aes(Delta_Backgrd,K,color=as.factor(Conc_Num))) + geom_point(aes(l=l,ORF=ORF,Gene=Gene),shape=3,position="jitter") + + ggtitle("DeltaBackground vs K for strains falling outside 2SD of the K mean at each conc") + theme_Publication_legend_right() + pdf(paste(outputpath_QC,"DeltaBackground_vs_K_for_strains_2SD_outside_mean_K.pdf",sep=""),width = 10,height = 8) + Outside_2SD_K_delta_background_vs_K + dev.off() + pgg <- ggplotly(Outside_2SD_K_delta_background_vs_K) + #pgg + plotly_path <- paste(getwd(),"/",outputpath_QC,"DeltaBackground_vs_K_for_strains_outside_2SD_K.html",sep="") + saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + + #get the background strain mean values at the no drug conc to calculate shift + Background_L <- X_stats_BY_L$mean[1] + Background_K <- X_stats_BY_K$mean[1] + Background_r <- X_stats_BY_r$mean[1] + Background_AUC <- X_stats_BY_AUC$mean[1] + + #create empty plots for plotting element + p_l <- ggplot() + p_K <- ggplot() + p_r <- ggplot() + p_AUC <- ggplot() + + p_rf_l <- ggplot() + p_rf_K <- ggplot() + p_rf_r <- ggplot() + p_rf_AUC <- ggplot() + + #get only the deletion strains + X2 <- X + X2 <- X2[X2$OrfRep != "YDL227C",] + + #if set to max theoretical value, add a 1 to SM, if not, leave as 0 + #SM = Set to Max + X2$SM <- 0 + #set the missing values to the highest theoretical value at each drug conc for L, leave other values as 0 for the max/min + for(i in 1:length(unique(X2$Conc_Num))){ + Concentration <- unique(X2$Conc_Num)[i] + X2_temp <- X2[X2$Conc_Num == Concentration,] + if(Concentration == 0){ + X2_new <- X2_temp + print(paste("Check loop order, conc =",Concentration,sep=" ")) + } + if(Concentration > 0){ + try(X2_temp[X2_temp$l == 0 & !is.na(X2_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + try(X2_temp[X2_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_temp$l),]$SM <- 1) + try(X2_temp[X2_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + + #X2_temp[X2_temp$K == 0,]$K <- X_stats_ALL_K$max[i] + #X2_temp[X2_temp$r == 0,]$r <- X_stats_ALL_r$max[i] + #X2_temp[X2_temp$AUC == 0,]$AUC <- X_stats_ALL_AUC$max[i] + print(paste("Check loop order, conc =",Concentration,sep=" ")) + + X2_new <- rbind(X2_new,X2_temp) + + } + } + X2 <- X2_new + + + #get only the RF strains + X2_RF <- X + X2_RF <- X2_RF[X2_RF$OrfRep == "YDL227C",] + #if set to max theoretical value, add a 1 to SM, if not, leave as 0 + #SM = Set to Max + X2_RF$SM <- 0 + #set the missing values to the highest theoretical value at each drug conc for L, leave other values as 0 for the max/min + for(i in 1:length(unique(X2_RF$Conc_Num))){ + Concentration <- unique(X2_RF$Conc_Num)[i] + X2_RF_temp <- X2_RF[X2_RF$Conc_Num == Concentration,] + if(Concentration == 0){ + X2_RF_new <- X2_RF_temp + print(paste("Check loop order, conc =",Concentration,sep=" ")) + } + if(Concentration > 0){ + try(X2_RF_temp[X2_RF_temp$l == 0 & !is.na(X2_RF_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + try(X2_temp[X2_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_temp$l),]$SM <- 1) + try(X2_RF_temp[X2_RF_temp$l >= X_stats_BY_L_within_2SD_K$max[i] & !is.na(X2_RF_temp$l),]$l <- X_stats_BY_L_within_2SD_K$max[i]) + print(paste("Check loop order, if error, refs have no L values outside theoretical max L, for REFs, conc =",Concentration,sep=" ")) + + X2_RF_new <- rbind(X2_RF_new,X2_RF_temp) + + } + } + X2_RF <- X2_RF_new + + + #######Part 4 Get the RF Z score values + #Change the OrfRep Column to include the RF strain, the Gene name and the Num. so each RF gets its own score + X2_RF$OrfRep <- paste(X2_RF$OrfRep,X2_RF$Gene,X2_RF$Num.,sep="_") + + num_genes_RF <- length(unique(X2_RF$OrfRep)) + print(num_genes_RF) + + + #create the output data.frame containing columns for each RF strain + InteractionScores_RF <- unique(X2_RF["OrfRep"]) + #InteractionScores_RF$Gene <- unique(X2$Gene) + InteractionScores_RF$Gene <- NA + InteractionScores_RF$Raw_Shift_L <- NA + InteractionScores_RF$Z_Shift_L <- NA + InteractionScores_RF$lm_Score_L <- NA + InteractionScores_RF$Z_lm_L <- NA + InteractionScores_RF$R_Squared_L <- NA + InteractionScores_RF$Sum_Z_Score_L <- NA + InteractionScores_RF$Avg_Zscore_L <- NA + InteractionScores_RF$Raw_Shift_K <- NA + InteractionScores_RF$Z_Shift_K <- NA + InteractionScores_RF$lm_Score_K <- NA + InteractionScores_RF$Z_lm_K <- NA + InteractionScores_RF$R_Squared_K <- NA + InteractionScores_RF$Sum_Z_Score_K <- NA + InteractionScores_RF$Avg_Zscore_K <- NA + InteractionScores_RF$Raw_Shift_r <- NA + InteractionScores_RF$Z_Shift_r <- NA + InteractionScores_RF$lm_Score_r <- NA + InteractionScores_RF$Z_lm_r <- NA + InteractionScores_RF$R_Squared_r <- NA + InteractionScores_RF$Sum_Z_Score_r <- NA + InteractionScores_RF$Avg_Zscore_r <- NA + InteractionScores_RF$Raw_Shift_AUC <- NA + InteractionScores_RF$Z_Shift_AUC <- NA + InteractionScores_RF$lm_Score_AUC <- NA + InteractionScores_RF$Z_lm_AUC <- NA + InteractionScores_RF$R_Squared_AUC <- NA + InteractionScores_RF$Sum_Z_Score_AUC <- NA + InteractionScores_RF$Avg_Zscore_AUC <- NA + InteractionScores_RF$NG <- NA + InteractionScores_RF$SM <- NA + + + for(i in 1:num_genes_RF){ + #get each deletion strain ORF + Gene_Sel <- unique(X2_RF$OrfRep)[i] + #extract only the current deletion strain and its data + X_Gene_Sel <- X2_RF[X2_RF$OrfRep == Gene_Sel,] + + X_stats_interaction <- ddply(X_Gene_Sel, c("OrfRep","Gene","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm = TRUE), + median_L = median(l,na.rm = TRUE), + sd_L = sd(l,na.rm = TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm = TRUE), + median_K = median(K,na.rm = TRUE), + sd_K = sd(K,na.rm = TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm = TRUE), + median_r = median(r,na.rm = TRUE), + sd_r = sd(r,na.rm = TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm = TRUE), + median_AUC = median(AUC,na.rm = TRUE), + sd_AUC = sd(AUC,na.rm = TRUE), + se_AUC = sd_AUC / sqrt(N-1), + NG = sum(NG,na.rm=TRUE), + DB= sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + #Get shift vals + #if L is 0, that means the no growth on no drug + #if L is NA at 0, that means the spot was removed due to contamination + #if L is 0, keep the shift at 0 and for other drug concs calculate delta Ls with no shift + #otherwise calculate shift at no drug conc + if(is.na(X_stats_interaction$mean_L[1]) | X_stats_interaction$mean_L[1] == 0 ){ + X_stats_interaction$Raw_Shift_L <- 0 + X_stats_interaction$Raw_Shift_K <- 0 + X_stats_interaction$Raw_Shift_r <- 0 + X_stats_interaction$Raw_Shift_AUC <- 0 + X_stats_interaction$Z_Shift_L <- 0 + X_stats_interaction$Z_Shift_K <- 0 + X_stats_interaction$Z_Shift_r <- 0 + X_stats_interaction$Z_Shift_AUC <- 0 + }else{ + X_stats_interaction$Raw_Shift_L <- X_stats_interaction$mean_L[1] - Background_L + X_stats_interaction$Raw_Shift_K <- X_stats_interaction$mean_K[1] - Background_K + X_stats_interaction$Raw_Shift_r <- X_stats_interaction$mean_r[1] - Background_r + X_stats_interaction$Raw_Shift_AUC <- X_stats_interaction$mean_AUC[1] - Background_AUC + X_stats_interaction$Z_Shift_L <- X_stats_interaction$Raw_Shift_L[1]/X_stats_BY_L$sd[1] + X_stats_interaction$Z_Shift_K <- X_stats_interaction$Raw_Shift_K[1]/X_stats_BY_K$sd[1] + X_stats_interaction$Z_Shift_r <- X_stats_interaction$Raw_Shift_r[1]/X_stats_BY_r$sd[1] + X_stats_interaction$Z_Shift_AUC <- X_stats_interaction$Raw_Shift_AUC[1]/X_stats_BY_AUC$sd[1] + } + + + #get WT vals + X_stats_interaction$WT_l <- X_stats_BY_L$mean + X_stats_interaction$WT_K <- X_stats_BY_K$mean + X_stats_interaction$WT_r <- X_stats_BY_r$mean + X_stats_interaction$WT_AUC <- X_stats_BY_AUC$mean + + #Get WT SD + X_stats_interaction$WT_sd_l <- X_stats_BY_L$sd + X_stats_interaction$WT_sd_K <- X_stats_BY_K$sd + X_stats_interaction$WT_sd_r <- X_stats_BY_r$sd + X_stats_interaction$WT_sd_AUC <- X_stats_BY_AUC$sd + + + #only get scores if there's growth at no drug + if(X_stats_interaction$mean_L[1] != 0 & !is.na(X_stats_interaction$mean_L[1])){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for no growth values in Z score calculation + if(sum(X_stats_interaction$NG,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #get linear model + gene_lm_L <- lm(formula = Delta_L ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_K <- lm(formula = Delta_K ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_r <- lm(formula = Delta_r ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_AUC <- lm(formula = Delta_AUC ~ Conc_Num_Factor,data = X_stats_interaction) + + #get interaction score calculated by linear model and R-squared value for the fit + gene_interaction_L <- MAX_CONC*(gene_lm_L$coefficients[2]) + gene_lm_L$coefficients[1] + r_squared_l <- summary(gene_lm_L)$r.squared + gene_interaction_K <- MAX_CONC*(gene_lm_K$coefficients[2]) + gene_lm_K$coefficients[1] + r_squared_K <- summary(gene_lm_K)$r.squared + gene_interaction_r <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_r$coefficients[1] + r_squared_r <- summary(gene_lm_r)$r.squared + gene_interaction_AUC <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_AUC$coefficients[1] + r_squared_AUC <- summary(gene_lm_AUC)$r.squared + + #Get total of non removed values + Num_non_Removed_Conc <- Total_Conc_Nums - sum(X_stats_interaction$DB,na.rm = TRUE) - 1 + + #report the scores + InteractionScores_RF$OrfRep[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$OrfRep[1] + InteractionScores_RF$Gene[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$Gene[1] + + InteractionScores_RF$Raw_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores_RF$Z_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores_RF$lm_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_L + InteractionScores_RF$R_Squared_L[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores_RF$Sum_Z_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_L[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE)/(Num_non_Removed_Conc) + + + InteractionScores_RF$Raw_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores_RF$Z_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores_RF$lm_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_K + InteractionScores_RF$R_Squared_K[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores_RF$Sum_Z_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_K[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE)/(Num_non_Removed_Conc) + + InteractionScores_RF$Raw_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores_RF$Z_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores_RF$lm_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_r + InteractionScores_RF$R_Squared_r[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores_RF$Sum_Z_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_r[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE)/(Total_Conc_Nums-1) + + InteractionScores_RF$Raw_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores_RF$Z_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores_RF$lm_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_AUC + InteractionScores_RF$R_Squared_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores_RF$Sum_Z_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE) + InteractionScores_RF$Avg_Zscore_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE)/(Total_Conc_Nums-1) + } + + if(X_stats_interaction$mean_L[1] == 0 | is.na(X_stats_interaction$mean_L[1]) ){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for missing values in Z score calculatiom + if(sum(X_stats_interaction$NG,na.rm = TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #NA values for the next part since there's an NA or 0 at the no drug. + gene_lm_L <- NA + gene_lm_K <- NA + gene_lm_r <- NA + gene_lm_AUC <- NA + + gene_interaction_L <- NA + r_squared_l <- NA + gene_interaction_K <- NA + r_squared_K <- NA + gene_interaction_r <- NA + r_squared_r <- NA + gene_interaction_AUC <- NA + r_squared_AUC <- NA + + X_stats_interaction$Raw_Shift_L <- NA + X_stats_interaction$Raw_Shift_K <- NA + X_stats_interaction$Raw_Shift_r <- NA + X_stats_interaction$Raw_Shift_AUC <- NA + + X_stats_interaction$Z_Shift_L <- NA + X_stats_interaction$Z_Shift_K <- NA + X_stats_interaction$Z_Shift_r <- NA + X_stats_interaction$Z_Shift_AUC <- NA + + InteractionScores_RF$OrfRep[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$OrfRep[1] + InteractionScores_RF$Gene[InteractionScores_RF$OrfRep == Gene_Sel] <- X_Gene_Sel$Gene[1] + + InteractionScores_RF$Raw_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores_RF$Z_Shift_L[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores_RF$lm_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_L + InteractionScores_RF$R_Squared_L[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores_RF$Sum_Z_Score_L[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_L[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + + InteractionScores_RF$Raw_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores_RF$Z_Shift_K[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores_RF$lm_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_K + InteractionScores_RF$R_Squared_K[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores_RF$Sum_Z_Score_K[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_K[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + + InteractionScores_RF$Raw_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores_RF$Z_Shift_r[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores_RF$lm_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_r + InteractionScores_RF$R_Squared_r[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores_RF$Sum_Z_Score_r[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_r[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + + InteractionScores_RF$Raw_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores_RF$Z_Shift_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores_RF$lm_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- gene_interaction_AUC + InteractionScores_RF$R_Squared_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores_RF$Sum_Z_Score_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + InteractionScores_RF$Avg_Zscore_AUC[InteractionScores_RF$OrfRep == Gene_Sel] <- NA + } + + if(i == 1){ + X_stats_interaction_ALL_RF <- X_stats_interaction + } + if(i > 1){ + X_stats_interaction_ALL_RF <- rbind(X_stats_interaction_ALL_RF,X_stats_interaction) + } + + InteractionScores_RF$NG[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$NG,na.rm = TRUE) + InteractionScores_RF$DB[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$DB,na.rm = TRUE) + InteractionScores_RF$SM[InteractionScores_RF$OrfRep == Gene_Sel] <- sum(X_stats_interaction$SM,na.rm = TRUE) + + #X_stats_L_int_temp <- rbind(X_stats_L_int_temp,X_stats_L_int) + + + } + print("Pass RF Calculation loop") + + lm_sd_L <- sd(InteractionScores_RF$lm_Score_L,na.rm=TRUE) + lm_sd_K <- sd(InteractionScores_RF$lm_Score_K,na.rm=TRUE) + lm_sd_r <- sd(InteractionScores_RF$lm_Score_r,na.rm=TRUE) + lm_sd_AUC <- sd(InteractionScores_RF$lm_Score_AUC,na.rm=TRUE) + + lm_mean_L <- mean(InteractionScores_RF$lm_Score_L,na.rm=TRUE) + lm_mean_K <- mean(InteractionScores_RF$lm_Score_K,na.rm=TRUE) + lm_mean_r <- mean(InteractionScores_RF$lm_Score_r,na.rm=TRUE) + lm_mean_AUC <- mean(InteractionScores_RF$lm_Score_AUC,na.rm=TRUE) + + print(paste("Mean RF linear regression score L",lm_mean_L)) + + + InteractionScores_RF$Z_lm_L <- (InteractionScores_RF$lm_Score_L - lm_mean_L)/(lm_sd_L) + InteractionScores_RF$Z_lm_K <- (InteractionScores_RF$lm_Score_K - lm_mean_K)/(lm_sd_K) + InteractionScores_RF$Z_lm_r <- (InteractionScores_RF$lm_Score_r - lm_mean_r)/(lm_sd_r) + InteractionScores_RF$Z_lm_AUC <- (InteractionScores_RF$lm_Score_AUC - lm_mean_AUC)/(lm_sd_AUC) + + + InteractionScores_RF <- InteractionScores_RF[order(InteractionScores_RF$Z_lm_L,decreasing=TRUE),] + InteractionScores_RF <- InteractionScores_RF[order(InteractionScores_RF$NG,decreasing=TRUE),] + write.csv(InteractionScores_RF,paste(outputpath,"RF_ZScores_Interaction.csv",sep=""),row.names=FALSE) + + + for(i in 1:num_genes_RF){ + Gene_Sel <- unique(InteractionScores_RF$OrfRep)[i] + X_ZCalculations <- X_stats_interaction_ALL_RF[X_stats_interaction_ALL_RF$OrfRep == Gene_Sel,] + X_Int_Scores <- InteractionScores_RF[InteractionScores_RF$OrfRep == Gene_Sel,] + + p_rf_l[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_L)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_l), ymax=0+(2*WT_sd_l)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_L,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg Zscore =",round(X_Int_Scores$Avg_Zscore_L,2))) + + annotate("text",x=1,y=25,label = paste("lm Zscore =",round(X_Int_Scores$Z_lm_L,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_rf_K[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_K)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_K), ymax=0+(2*WT_sd_K)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_K,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_K,2))) + + annotate("text",x=1,y=25,label = paste("lm ZScore =",round(X_Int_Scores$Z_lm_L,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_rf_r[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_r)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-0.65,0.65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_r), ymax=0+(2*WT_sd_r)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=0.45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_r,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=0.35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_r,2))) + + annotate("text",x=1,y=0.25,label = paste("lm ZScore =",round(X_Int_Scores$Z_lm_r,2))) + + annotate("text",x=1,y=-0.25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-0.35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-0.45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-0.6,-0.4,-0.2,0,0.2,0.4,0.6)) + + theme_Publication() + + p_rf_AUC[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_AUC)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-6500,6500)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_AUC), ymax=0+(2*WT_sd_AUC)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=4500,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_AUC,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=3500,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_AUC,2))) + + annotate("text",x=1,y=2500,label = paste("lm ZScore =",round(X_Int_Scores$Z_lm_AUC,2))) + + annotate("text",x=1,y=-2500,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-3500,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-4500,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-6000,-5000,-4000,-3000,-2000,-1000,0,1000,2000,3000,4000,5000,6000)) + + theme_Publication() + + + + if(i == 1){ + X_stats_interaction_ALL_RF_final <- X_ZCalculations + } + if(i > 1){ + X_stats_interaction_ALL_RF_final <- rbind(X_stats_interaction_ALL_RF_final,X_ZCalculations) + } + } + print("Pass RF ggplot loop") + write.csv(X_stats_interaction_ALL_RF_final,paste(outputpath,"RF_ZScore_Calculations.csv",sep=""),row.names = FALSE) + + + ####### Part 5 - Get Zscores for Gene deletion strains + + + + #get total number of genes for the next loop + num_genes <- length(unique(X2$OrfRep)) + print(num_genes) + + #create the output data.frame containing columns for each deletion strain + InteractionScores <- unique(X2["OrfRep"]) + #InteractionScores$Gene <- unique(X2$Gene) + InteractionScores$Gene <- NA + InteractionScores$Raw_Shift_L <- NA + InteractionScores$Z_Shift_L <- NA + InteractionScores$lm_Score_L <- NA + InteractionScores$Z_lm_L <- NA + InteractionScores$R_Squared_L <- NA + InteractionScores$Sum_Z_Score_L <- NA + InteractionScores$Avg_Zscore_L <- NA + InteractionScores$Raw_Shift_K <- NA + InteractionScores$Z_Shift_K <- NA + InteractionScores$lm_Score_K <- NA + InteractionScores$Z_lm_K <- NA + InteractionScores$R_Squared_K <- NA + InteractionScores$Sum_Z_Score_K <- NA + InteractionScores$Avg_Zscore_K <- NA + InteractionScores$Raw_Shift_r <- NA + InteractionScores$Z_Shift_r <- NA + InteractionScores$lm_Score_r <- NA + InteractionScores$Z_lm_r <- NA + InteractionScores$R_Squared_r <- NA + InteractionScores$Sum_Z_Score_r <- NA + InteractionScores$Avg_Zscore_r <- NA + InteractionScores$Raw_Shift_AUC <- NA + InteractionScores$Z_Shift_AUC <- NA + InteractionScores$lm_Score_AUC <- NA + InteractionScores$Z_lm_AUC <- NA + InteractionScores$R_Squared_AUC <- NA + InteractionScores$Sum_Z_Score_AUC <- NA + InteractionScores$Avg_Zscore_AUC <- NA + InteractionScores$NG <- NA + InteractionScores$DB <- NA + InteractionScores$SM <- NA + + for(i in 1:num_genes){ + #get each deletion strain ORF + Gene_Sel <- unique(X2$OrfRep)[i] + #extract only the current deletion strain and its data + X_Gene_Sel <- X2[X2$OrfRep == Gene_Sel,] + + X_stats_interaction <- ddply(X_Gene_Sel, c("OrfRep","Gene","Conc_Num","Conc_Num_Factor"), summarise, + N = (length(l)), + mean_L = mean(l,na.rm = TRUE), + median_L = median(l,na.rm = TRUE), + sd_L = sd(l,na.rm = TRUE), + se_L = sd_L / sqrt(N-1), + mean_K = mean(K,na.rm = TRUE), + median_K = median(K,na.rm = TRUE), + sd_K = sd(K,na.rm = TRUE), + se_K = sd_K / sqrt(N-1), + mean_r = mean(r,na.rm = TRUE), + median_r = median(r,na.rm = TRUE), + sd_r = sd(r,na.rm = TRUE), + se_r = sd_r / sqrt(N-1), + mean_AUC = mean(AUC,na.rm = TRUE), + median_AUC = median(AUC,na.rm = TRUE), + sd_AUC = sd(AUC,na.rm = TRUE), + se_AUC = sd_AUC / sqrt(N-1), + NG = sum(NG,na.rm=TRUE), + DB= sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + #Get shift vals + #if L is 0, that means the no growth on no drug + #if L is NA at 0, that means the spot was removed due to contamination + #if L is 0, keep the shift at 0 and for other drug concs calculate delta Ls with no shift + #otherwise calculate shift at no drug conc + if(is.na(X_stats_interaction$mean_L[1]) | X_stats_interaction$mean_L[1] == 0 ){ + X_stats_interaction$Raw_Shift_L <- 0 + X_stats_interaction$Raw_Shift_K <- 0 + X_stats_interaction$Raw_Shift_r <- 0 + X_stats_interaction$Raw_Shift_AUC <- 0 + X_stats_interaction$Z_Shift_L <- 0 + X_stats_interaction$Z_Shift_K <- 0 + X_stats_interaction$Z_Shift_r <- 0 + X_stats_interaction$Z_Shift_AUC <- 0 + }else{ + X_stats_interaction$Raw_Shift_L <- X_stats_interaction$mean_L[1] - Background_L + X_stats_interaction$Raw_Shift_K <- X_stats_interaction$mean_K[1] - Background_K + X_stats_interaction$Raw_Shift_r <- X_stats_interaction$mean_r[1] - Background_r + X_stats_interaction$Raw_Shift_AUC <- X_stats_interaction$mean_AUC[1] - Background_AUC + X_stats_interaction$Z_Shift_L <- X_stats_interaction$Raw_Shift_L[1]/X_stats_BY_L$sd[1] + X_stats_interaction$Z_Shift_K <- X_stats_interaction$Raw_Shift_K[1]/X_stats_BY_K$sd[1] + X_stats_interaction$Z_Shift_r <- X_stats_interaction$Raw_Shift_r[1]/X_stats_BY_r$sd[1] + X_stats_interaction$Z_Shift_AUC <- X_stats_interaction$Raw_Shift_AUC[1]/X_stats_BY_AUC$sd[1] + } + + + #get WT vals + X_stats_interaction$WT_l <- X_stats_BY_L$mean + X_stats_interaction$WT_K <- X_stats_BY_K$mean + X_stats_interaction$WT_r <- X_stats_BY_r$mean + X_stats_interaction$WT_AUC <- X_stats_BY_AUC$mean + + #Get WT SD + X_stats_interaction$WT_sd_l <- X_stats_BY_L$sd + X_stats_interaction$WT_sd_K <- X_stats_BY_K$sd + X_stats_interaction$WT_sd_r <- X_stats_BY_r$sd + X_stats_interaction$WT_sd_AUC <- X_stats_BY_AUC$sd + + + #only get scores if there's growth at no drug + if(X_stats_interaction$mean_L[1] != 0 & !is.na(X_stats_interaction$mean_L[1])){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for no growth values in Z score calculation + if(sum(X_stats_interaction$NG,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #get linear model + gene_lm_L <- lm(formula = Delta_L ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_K <- lm(formula = Delta_K ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_r <- lm(formula = Delta_r ~ Conc_Num_Factor,data = X_stats_interaction) + gene_lm_AUC <- lm(formula = Delta_AUC ~ Conc_Num_Factor,data = X_stats_interaction) + + #get interaction score calculated by linear model and R-squared value for the fit + gene_interaction_L <- MAX_CONC*(gene_lm_L$coefficients[2]) + gene_lm_L$coefficients[1] + r_squared_l <- summary(gene_lm_L)$r.squared + gene_interaction_K <- MAX_CONC*(gene_lm_K$coefficients[2]) + gene_lm_K$coefficients[1] + r_squared_K <- summary(gene_lm_K)$r.squared + gene_interaction_r <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_r$coefficients[1] + r_squared_r <- summary(gene_lm_r)$r.squared + gene_interaction_AUC <- MAX_CONC*(gene_lm_r$coefficients[2]) + gene_lm_AUC$coefficients[1] + r_squared_AUC <- summary(gene_lm_AUC)$r.squared + + #Get total of non removed values + Num_non_Removed_Conc <- Total_Conc_Nums - sum(X_stats_interaction$DB,na.rm = TRUE) - 1 + + #report the scores + InteractionScores$OrfRep[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$OrfRep[1]) + InteractionScores$Gene[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$Gene[1]) + + InteractionScores$Raw_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores$Z_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores$lm_Score_L[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_L + InteractionScores$Z_lm_L[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_L-lm_mean_L)/lm_sd_L + InteractionScores$R_Squared_L[InteractionScores$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores$Sum_Z_Score_L[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE) + InteractionScores$Avg_Zscore_L[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_L,na.rm = TRUE)/(Num_non_Removed_Conc) + + + InteractionScores$Raw_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores$Z_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores$lm_Score_K[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_K + InteractionScores$Z_lm_K[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_K-lm_mean_K)/lm_sd_K + InteractionScores$R_Squared_K[InteractionScores$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores$Sum_Z_Score_K[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE) + InteractionScores$Avg_Zscore_K[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_K,na.rm = TRUE)/(Num_non_Removed_Conc) + + InteractionScores$Raw_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores$Z_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores$lm_Score_r[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_r + InteractionScores$Z_lm_r[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_r-lm_mean_r)/lm_sd_r + InteractionScores$R_Squared_r[InteractionScores$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores$Sum_Z_Score_r[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE) + InteractionScores$Avg_Zscore_r[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_r,na.rm = TRUE)/(Total_Conc_Nums-1) + + InteractionScores$Raw_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores$Z_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores$lm_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- gene_interaction_AUC + InteractionScores$Z_lm_AUC[InteractionScores$OrfRep == Gene_Sel] <- (gene_interaction_AUC-lm_mean_AUC)/lm_sd_AUC + InteractionScores$R_Squared_AUC[InteractionScores$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores$Sum_Z_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE) + InteractionScores$Avg_Zscore_AUC[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$Zscore_AUC,na.rm = TRUE)/(Total_Conc_Nums-1) + } + + if(X_stats_interaction$mean_L[1] == 0 | is.na(X_stats_interaction$mean_L[1]) ){ + + #calculate expected values + X_stats_interaction$Exp_L <- X_stats_interaction$WT_l + X_stats_interaction$Raw_Shift_L + X_stats_interaction$Exp_K <- X_stats_interaction$WT_K + X_stats_interaction$Raw_Shift_K + X_stats_interaction$Exp_r <- X_stats_interaction$WT_r + X_stats_interaction$Raw_Shift_r + X_stats_interaction$Exp_AUC <- X_stats_interaction$WT_AUC + X_stats_interaction$Raw_Shift_AUC + + #calculate normalized delta values + X_stats_interaction$Delta_L <- X_stats_interaction$mean_L - X_stats_interaction$Exp_L + X_stats_interaction$Delta_K <- X_stats_interaction$mean_K - X_stats_interaction$Exp_K + X_stats_interaction$Delta_r <-X_stats_interaction$mean_r - X_stats_interaction$Exp_r + X_stats_interaction$Delta_AUC <- X_stats_interaction$mean_AUC - X_stats_interaction$Exp_AUC + + #disregard shift for missing values in Z score calculatiom + if(sum(X_stats_interaction$NG,na.rm = TRUE) > 0){ + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_L - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_l + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_K - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_K + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_r - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_r + X_stats_interaction[X_stats_interaction$NG == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$NG == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$NG == 1,]$WT_AUC + } + #disregard shift for set to max values in Z score calculation + if(sum(X_stats_interaction$SM,na.rm=TRUE) > 0){ + X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_L <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_L - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_l + #only calculate the L value without shift since L is the only adjusted value + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_K <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_K - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_K + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_r <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_r - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_r + #X_stats_interaction[X_stats_interaction$SM == 1,]$Delta_AUC <- X_stats_interaction[X_stats_interaction$SM == 1,]$mean_AUC - X_stats_interaction[X_stats_interaction$SM == 1,]$WT_AUC + + } + + + #calculate Z score at each concentration + X_stats_interaction$Zscore_L <- (X_stats_interaction$Delta_L)/(X_stats_interaction$WT_sd_l) + X_stats_interaction$Zscore_K <- (X_stats_interaction$Delta_K)/(X_stats_interaction$WT_sd_K) + X_stats_interaction$Zscore_r <- (X_stats_interaction$Delta_r)/(X_stats_interaction$WT_sd_r) + X_stats_interaction$Zscore_AUC <- (X_stats_interaction$Delta_AUC)/(X_stats_interaction$WT_sd_AUC) + + #NA values for the next part since there's an NA or 0 at the no drug. + gene_lm_L <- NA + gene_lm_K <- NA + gene_lm_r <- NA + + gene_interaction_L <- NA + r_squared_l <- NA + gene_interaction_K <- NA + r_squared_K <- NA + gene_interaction_r <- NA + r_squared_r <- NA + + X_stats_interaction$Raw_Shift_L <- NA + X_stats_interaction$Raw_Shift_K <- NA + X_stats_interaction$Raw_Shift_r <- NA + X_stats_interaction$Raw_Shift_AUC <- NA + + X_stats_interaction$Z_Shift_L <- NA + X_stats_interaction$Z_Shift_K <- NA + X_stats_interaction$Z_Shift_r <- NA + X_stats_interaction$Z_Shift_AUC <- NA + + InteractionScores$OrfRep[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$OrfRep[1]) + InteractionScores$Gene[InteractionScores$OrfRep == Gene_Sel] <- as.character(X_Gene_Sel$Gene[1]) + + InteractionScores$Raw_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_L[1] + InteractionScores$Z_Shift_L[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_L[1] + InteractionScores$lm_Score_L[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_L[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$R_Squared_L[InteractionScores$OrfRep == Gene_Sel] <- r_squared_l + InteractionScores$Sum_Z_Score_L[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_L[InteractionScores$OrfRep == Gene_Sel] <- NA + + InteractionScores$Raw_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_K[1] + InteractionScores$Z_Shift_K[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_K[1] + InteractionScores$lm_Score_K[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_K[InteractionScores$OrfRep == Gene_Sel] <-NA + InteractionScores$R_Squared_K[InteractionScores$OrfRep == Gene_Sel] <- r_squared_K + InteractionScores$Sum_Z_Score_K[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_K[InteractionScores$OrfRep == Gene_Sel] <- NA + + InteractionScores$Raw_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_r[1] + InteractionScores$Z_Shift_r[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_r[1] + InteractionScores$lm_Score_r[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_r[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$R_Squared_r[InteractionScores$OrfRep == Gene_Sel] <- r_squared_r + InteractionScores$Sum_Z_Score_r[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_r[InteractionScores$OrfRep == Gene_Sel] <- NA + + InteractionScores$Raw_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Raw_Shift_AUC[1] + InteractionScores$Z_Shift_AUC[InteractionScores$OrfRep == Gene_Sel] <- X_stats_interaction$Z_Shift_AUC[1] + InteractionScores$lm_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Z_lm_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$R_Squared_AUC[InteractionScores$OrfRep == Gene_Sel] <- r_squared_AUC + InteractionScores$Sum_Z_Score_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + InteractionScores$Avg_Zscore_AUC[InteractionScores$OrfRep == Gene_Sel] <- NA + } + + if(i == 1){ + X_stats_interaction_ALL <- X_stats_interaction + } + if(i > 1){ + X_stats_interaction_ALL <- rbind(X_stats_interaction_ALL,X_stats_interaction) + } + + InteractionScores$NG[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$NG,na.rm = TRUE) + InteractionScores$DB[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$DB,na.rm = TRUE) + InteractionScores$SM[InteractionScores$OrfRep == Gene_Sel] <- sum(X_stats_interaction$SM,na.rm = TRUE) + + #X_stats_L_int_temp <- rbind(X_stats_L_int_temp,X_stats_L_int) + + + } + print("Pass Int Calculation loop") + InteractionScores <- InteractionScores[order(InteractionScores$Z_lm_L,decreasing=TRUE),] + InteractionScores <- InteractionScores[order(InteractionScores$NG,decreasing=TRUE),] + df_order_by_OrfRep <- unique(InteractionScores$OrfRep) + #X_stats_interaction_ALL <- X_stats_interaction_ALL[order(X_stats_interaction_ALL$NG,decreasing=TRUE),] + write.csv(InteractionScores,paste(outputpath,"ZScores_Interaction.csv",sep=""),row.names=FALSE) + + InteractionScores_deletion_enhancers_L <- InteractionScores[InteractionScores$Avg_Zscore_L >= 2,] + InteractionScores_deletion_enhancers_K <- InteractionScores[InteractionScores$Avg_Zscore_K <= -2,] + InteractionScores_deletion_suppressors_L <- InteractionScores[InteractionScores$Avg_Zscore_L <= -2,] + InteractionScores_deletion_suppressors_K <- InteractionScores[InteractionScores$Avg_Zscore_K >= 2,] + InteractionScores_deletion_enhancers_and_Suppressors_L <- InteractionScores[InteractionScores$Avg_Zscore_L >= 2 | InteractionScores$Avg_Zscore_L <= -2,] + InteractionScores_deletion_enhancers_and_Suppressors_K <- InteractionScores[InteractionScores$Avg_Zscore_K >= 2 | InteractionScores$Avg_Zscore_K <= -2,] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L <- InteractionScores[InteractionScores$Z_lm_L >= 2 & InteractionScores$Avg_Zscore_L <= -2,] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L <- InteractionScores[InteractionScores$Z_lm_L <= -2 & InteractionScores$Avg_Zscore_L >= 2,] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K <- InteractionScores[InteractionScores$Z_lm_K <= -2 & InteractionScores$Avg_Zscore_K >= 2,] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K <- InteractionScores[InteractionScores$Z_lm_K >= 2 & InteractionScores$Avg_Zscore_K <= -2,] + + InteractionScores_deletion_enhancers_L <- InteractionScores_deletion_enhancers_L[!is.na(InteractionScores_deletion_enhancers_L$OrfRep),] + InteractionScores_deletion_enhancers_K <- InteractionScores_deletion_enhancers_K[!is.na(InteractionScores_deletion_enhancers_K$OrfRep),] + InteractionScores_deletion_suppressors_L <- InteractionScores_deletion_suppressors_L[!is.na(InteractionScores_deletion_suppressors_L$OrfRep),] + InteractionScores_deletion_suppressors_K <- InteractionScores_deletion_suppressors_K[!is.na(InteractionScores_deletion_suppressors_K$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_L <- InteractionScores_deletion_enhancers_and_Suppressors_L[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_L$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_K <- InteractionScores_deletion_enhancers_and_Suppressors_K[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_K$OrfRep),] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L <- InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L[!is.na(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L$OrfRep),] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L <- InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L[!is.na(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L$OrfRep),] + InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K <- InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K[!is.na(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K$OrfRep),] + InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K <- InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K[!is.na(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K$OrfRep),] + + write.csv(InteractionScores_deletion_enhancers_L,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_K,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_L,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_K,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_L,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_K,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_L,paste(outputpath,"ZScores_Interaction_Suppressors_and_lm_Enhancers_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_L,paste(outputpath,"ZScores_Interaction_Enhancers_and_lm_Suppressors_L.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_lm_Suppressors_AvgZscore_K,paste(outputpath,"ZScores_Interaction_Suppressors_and_lm_Enhancers_K.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_Avg_Zscore_Suppressors_lm_K,paste(outputpath,"ZScores_Interaction_Enhancers_and_lm_Suppressors_K.csv",sep=""),row.names=FALSE) + + #get enhancers and suppressors for linear regression + InteractionScores_deletion_enhancers_L_lm <- InteractionScores[InteractionScores$Z_lm_L >= 2,] + InteractionScores_deletion_enhancers_K_lm <- InteractionScores[InteractionScores$Z_lm_K <= -2,] + InteractionScores_deletion_suppressors_L_lm <- InteractionScores[InteractionScores$Z_lm_L <= -2,] + InteractionScores_deletion_suppressors_K_lm <- InteractionScores[InteractionScores$Z_lm_K >= 2,] + InteractionScores_deletion_enhancers_and_Suppressors_L_lm <- InteractionScores[InteractionScores$Z_lm_L >= 2 | InteractionScores$Z_lm_L <= -2,] + InteractionScores_deletion_enhancers_and_Suppressors_K_lm <- InteractionScores[InteractionScores$Z_lm_K >= 2 | InteractionScores$Z_lm_K <= -2,] + + InteractionScores_deletion_enhancers_L_lm <- InteractionScores_deletion_enhancers_L_lm[!is.na(InteractionScores_deletion_enhancers_L_lm$OrfRep),] + InteractionScores_deletion_enhancers_K_lm <- InteractionScores_deletion_enhancers_K_lm[!is.na(InteractionScores_deletion_enhancers_K_lm$OrfRep),] + InteractionScores_deletion_suppressors_L_lm <- InteractionScores_deletion_suppressors_L_lm[!is.na(InteractionScores_deletion_suppressors_L_lm$OrfRep),] + InteractionScores_deletion_suppressors_K_lm <- InteractionScores_deletion_suppressors_K_lm[!is.na(InteractionScores_deletion_suppressors_K_lm$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_L_lm <- InteractionScores_deletion_enhancers_and_Suppressors_L_lm[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_L_lm$OrfRep),] + InteractionScores_deletion_enhancers_and_Suppressors_K_lm <- InteractionScores_deletion_enhancers_and_Suppressors_K_lm[!is.na(InteractionScores_deletion_enhancers_and_Suppressors_K_lm$OrfRep),] + + write.csv(InteractionScores_deletion_enhancers_L_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_L_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_K_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_K_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_L_lm,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_L_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_suppressors_K_lm,paste(outputpath,"ZScores_Interaction_DeletionSuppressors_K_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_L_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_L_lm.csv",sep=""),row.names=FALSE) + write.csv(InteractionScores_deletion_enhancers_and_Suppressors_K_lm,paste(outputpath,"ZScores_Interaction_DeletionEnhancers_and_Suppressors_K_lm.csv",sep=""),row.names=FALSE) + + + write.csv(Labels,file=paste("../Code/StudyInfo.csv"),row.names = FALSE) + print('ln 1570 write StudyInfo.csv after ') + #write.table(Labels,file=paste("../Code/StudyInfo.txt"),sep="\t",row.names = FALSE) + + for(i in 1:num_genes){ + Gene_Sel <- unique(InteractionScores$OrfRep)[i] + X_ZCalculations <- X_stats_interaction_ALL[X_stats_interaction_ALL$OrfRep == Gene_Sel,] + X_Int_Scores <- InteractionScores[InteractionScores$OrfRep == Gene_Sel,] + + p_l[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_L)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_l), ymax=0+(2*WT_sd_l)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_L,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_L,2))) + + annotate("text",x=1,y=25,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_L,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_K[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_K)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-65,65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_K), ymax=0+(2*WT_sd_K)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_K,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_K,2))) + + annotate("text",x=1,y=25,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_K,2))) + + annotate("text",x=1,y=-25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60)) + + theme_Publication() + + p_r[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_r)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-0.65,0.65)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_r), ymax=0+(2*WT_sd_r)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=0.45,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_r,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=0.35,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_r,2))) + + annotate("text",x=1,y=0.25,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_r,2))) + + annotate("text",x=1,y=-0.25,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-0.35,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-0.45,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-0.6,-0.4,-0.2,0,0.2,0.4,0.6)) + + theme_Publication() + + p_AUC[[i]] <- ggplot(X_ZCalculations,aes(Conc_Num_Factor,Delta_AUC)) + geom_point() + geom_smooth(method="lm",formula=y~x,se=FALSE) + + coord_cartesian(ylim = c(-6500,6500)) + + geom_errorbar(aes(ymin=0-(2*WT_sd_AUC), ymax=0+(2*WT_sd_AUC)),alpha=0.3) + + ggtitle(paste(X_ZCalculations$OrfRep[1],X_ZCalculations$Gene[1],sep=" ")) + + annotate("text",x=1,y=4500,label = paste("ZShift =",round(X_Int_Scores$Z_Shift_AUC,2))) + scale_color_discrete(guide = FALSE) + + #annotate("text",x=1,y=3500,label = paste("Avg ZScore =",round(X_Int_Scores$Avg_Zscore_AUC,2))) + + annotate("text",x=1,y=2500,label = paste("Z lm Score =",round(X_Int_Scores$Z_lm_AUC,2))) + + annotate("text",x=1,y=-2500,label = paste("NG =",X_Int_Scores$NG)) + + annotate("text",x=1,y=-3500,label = paste("DB =",X_Int_Scores$DB)) + + annotate("text",x=1,y=-4500,label = paste("SM =",X_Int_Scores$SM)) + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X_ZCalculations$Conc_Num_Factor),labels = unique(as.character(X_ZCalculations$Conc_Num))) + + scale_y_continuous(breaks = c(-6000,-5000,-4000,-3000,-2000,-1000,0,1000,2000,3000,4000,5000,6000)) + + theme_Publication() + + + + if(i == 1){ + X_stats_interaction_ALL_final <- X_ZCalculations + } + if(i > 1){ + X_stats_interaction_ALL_final <- rbind(X_stats_interaction_ALL_final,X_ZCalculations) + } + } + print("Pass Int ggplot loop") + write.csv(X_stats_interaction_ALL_final,paste(outputpath,"ZScore_Calculations.csv",sep=""),row.names = FALSE) + + + + + + + Blank <- ggplot(X2_RF) + geom_blank() + + pdf(paste(outputpath,"InteractionPlots.pdf",sep=""),width = 16, height = 16, onefile = TRUE) + + X_stats_X2_RF <- ddply(X2_RF, c("Conc_Num","Conc_Num_Factor"), summarise, + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_AUC = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + NG = sum(NG,na.rm=TRUE), + DB = sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + L_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,l)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,160)) + + annotate("text",x=-0.25,y=10,label="NG") + + annotate("text",x=-0.25,y=5,label="DB") + + annotate("text",x=-0.25,y=0,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=0,label=X_stats_X2_RF$SM) + + theme_Publication() + + K_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,K)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(-20,160)) + + annotate("text",x=-0.25,y=-5,label="NG") + + annotate("text",x=-0.25,y=-12.5,label="DB") + + annotate("text",x=-0.25,y=-20,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-5,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-12.5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-20,label=X_stats_X2_RF$SM) + + theme_Publication() + + R_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,r)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + annotate("text",x=-0.25,y=.9,label="NG") + + annotate("text",x=-0.25,y=.8,label="DB") + + annotate("text",x=-0.25,y=.7,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.9,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.8,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.7,label=X_stats_X2_RF$SM) + + theme_Publication() + + AUC_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,AUC)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(0,12500)) + + annotate("text",x=-0.25,y=11000,label="NG") + + annotate("text",x=-0.25,y=10000,label="DB") + + annotate("text",x=-0.25,y=9000,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=11000,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10000,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=9000,label=X_stats_X2_RF$SM) + + theme_Publication() + + + L_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),l)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,160)) + + theme_Publication() + + K_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),K)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(0,130)) + + theme_Publication() + + r_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),r)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + theme_Publication() + + AUC_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),AUC)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(0,12500)) + + theme_Publication() + + + grid.arrange(L_Stats,K_Stats,R_Stats,AUC_Stats,ncol=2,nrow=2) + grid.arrange(L_Stats_Box,K_Stats_Box,r_Stats_Box,AUC_Stats_Box,ncol=2,nrow=2) + + + + #plot the references + #grid.arrange(p3,p3_K,p3_r,p4,p4_K,p4_r,p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=4) + #grid.arrange(p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=2) + + #loop for grid arrange 4x3 + j <- rep(1,((num_genes)/3)-1) + for(n in 1:length(j)){ + j[n+1] <- n*3 + 1 + } + #loop for printing each plot + num <- 0 + for(m in 1:(round((num_genes)/3)-1)){ + num <- j[m] + grid.arrange(p_l[[num]],p_K[[num]],p_r[[num]],p_AUC[[num]],p_l[[num+1]],p_K[[num+1]],p_r[[num+1]],p_AUC[[num+1]],p_l[[num+2]],p_K[[num+2]],p_r[[num+2]],p_AUC[[num+2]],ncol=4,nrow=3) + #grid.arrange(p_l[[364]],p_K[[364]],p_r[[364]],p_l[[365]],p_K[[365]],p_r[[365]],p_l[[366]],p_K[[366]],p_r[[366]],ncol=3,nrow=3) + + + #p1[[num+3]],p_K[[num+3]],p_r[[num+3]],p1[[num+4]],p_K[[num+4]],p_r[[num+4]] + } + if(num_genes != (num+2)){ + total_num = num_genes - (num+2) + if(total_num == 5){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],p_l[[num+5]],p_K[[num+5]],p_r[[num+5]],p_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_AUC[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],p_AUC[[num+7]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + if(total_num == 4){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],p_l[[num+5]],p_K[[num+5]],p_r[[num+5]],p_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_AUC[[num+6]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + + if(total_num == 3){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],p_l[[num+5]],p_K[[num+5]],p_r[[num+5]],p_AUC[[num+5]],ncol=4,nrow=3) + #grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 2){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],p_l[[num+4]],p_K[[num+4]],p_r[[num+4]],p_AUC[[num+4]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 1){ + grid.arrange(p_l[[num+3]],p_K[[num+3]],p_r[[num+3]],p_AUC[[num+3]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_l[[num+6]],p_K[[num+6]],p_r[[num+6]],p_l[[num+7]],p_K[[num+7]],p_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + } + dev.off() + + + + pdf(paste(outputpath,"RF_InteractionPlots.pdf",sep=""),width = 16, height = 16, onefile = TRUE) + + X_stats_X2_RF <- ddply(X2_RF, c("Conc_Num","Conc_Num_Factor"), summarise, + mean_L = mean(l,na.rm=TRUE), + median_L = median(l,na.rm=TRUE), + max_L = max(l,na.rm=TRUE), + min_L = min(l,na.rm=TRUE), + sd_L = sd(l,na.rm=TRUE), + mean_K = mean(K,na.rm=TRUE), + median_K = median(K,na.rm=TRUE), + max_K = max(K,na.rm=TRUE), + min_K = min(K,na.rm=TRUE), + sd_K = sd(K,na.rm=TRUE), + mean_r = mean(r,na.rm=TRUE), + median_r = median(r,na.rm=TRUE), + max_r = max(r,na.rm=TRUE), + min_r = min(r,na.rm=TRUE), + sd_r = sd(r,na.rm=TRUE), + mean_AUC = mean(AUC,na.rm=TRUE), + median_AUC = median(AUC,na.rm=TRUE), + max_AUC = max(AUC,na.rm=TRUE), + min_AUC = min(AUC,na.rm=TRUE), + sd_AUC = sd(AUC,na.rm=TRUE), + NG = sum(NG,na.rm=TRUE), + DB = sum(DB,na.rm=TRUE), + SM = sum(SM,na.rm=TRUE) + ) + + + L_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,l)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,130)) + + annotate("text",x=-0.25,y=10,label="NG") + + annotate("text",x=-0.25,y=5,label="DB") + + annotate("text",x=-0.25,y=0,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=0,label=X_stats_X2_RF$SM) + + theme_Publication() + + K_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,K)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(-20,160)) + + annotate("text",x=-0.25,y=-5,label="NG") + + annotate("text",x=-0.25,y=-12.5,label="DB") + + annotate("text",x=-0.25,y=-20,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-5,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-12.5,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=-20,label=X_stats_X2_RF$SM) + + theme_Publication() + + R_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,r)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + annotate("text",x=-0.25,y=.9,label="NG") + + annotate("text",x=-0.25,y=.8,label="DB") + + annotate("text",x=-0.25,y=.7,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.9,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.8,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=.7,label=X_stats_X2_RF$SM) + + theme_Publication() + + AUC_Stats <- ggplot(X2_RF,aes(Conc_Num_Factor,AUC)) + geom_point(position="jitter",size=1) + + stat_summary(fun.y = mean, fun.ymin = function(x) mean(x) - sd(x), fun.ymax = function(x) mean(x) + sd(x), + geom = "errorbar",color="red") + stat_summary(fun.y = mean, geom = "point",color="red") + + scale_x_continuous(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(0,12500)) + + annotate("text",x=-0.25,y=11000,label="NG") + + annotate("text",x=-0.25,y=10000,label="DB") + + annotate("text",x=-0.25,y=9000,label="SM") + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=11000,label=X_stats_X2_RF$NG) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=10000,label=X_stats_X2_RF$DB) + + annotate("text",x=c(unique(X2_RF$Conc_Num_Factor)),y=9000,label=X_stats_X2_RF$SM) + + theme_Publication() + + + L_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),l)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for L with SD", sep = " ")) + coord_cartesian(ylim=c(0,130)) + + theme_Publication() + + K_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),K)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for K with SD", sep = " ")) + coord_cartesian(ylim=c(0,160)) + + theme_Publication() + + r_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),r)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for r with SD", sep = " ")) + coord_cartesian(ylim=c(0,1)) + + theme_Publication() + + AUC_Stats_Box <- ggplot(X2_RF,aes(as.factor(Conc_Num_Factor),AUC)) + geom_boxplot() + + scale_x_discrete(name = unique(X$Drug[1]),breaks = unique(X2_RF$Conc_Num_Factor),labels = as.character(unique(X2_RF$Conc_Num))) + + ggtitle(paste(s,"Scatter RF for AUC with SD", sep = " ")) + coord_cartesian(ylim=c(12000,0)) + + theme_Publication() + + + grid.arrange(L_Stats,K_Stats,R_Stats,AUC_Stats,ncol=2,nrow=2) + grid.arrange(L_Stats_Box,K_Stats_Box,r_Stats_Box,AUC_Stats_Box,ncol=2,nrow=2) + + + + #plot the references + #grid.arrange(p3,p3_K,p3_r,p4,p4_K,p4_r,p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=4) + #grid.arrange(p5,p5_K,p5_r,p6,p6_K,p6_r,ncol=3,nrow=2) + + #loop for grid arrange 4x3 + j <- rep(1,((num_genes_RF)/3)-1) + for(n in 1:length(j)){ + j[n+1] <- n*3 + 1 + } + #loop for printing each plot + num <- 0 + for(m in 1:(round((num_genes_RF)/3)-1)){ + num <- j[m] + grid.arrange(p_rf_l[[num]],p_rf_K[[num]],p_rf_r[[num]],p_rf_AUC[[num]],p_rf_l[[num+1]],p_rf_K[[num+1]],p_rf_r[[num+1]],p_rf_AUC[[num+1]],p_rf_l[[num+2]],p_rf_K[[num+2]],p_rf_r[[num+2]],p_rf_AUC[[num+2]],ncol=4,nrow=3) + #grid.arrange(p_rf_l[[364]],p_rf_K[[364]],p_rf_r[[364]],p_rf_l[[365]],p_rf_K[[365]],p_rf_r[[365]],p_rf_l[[366]],p_rf_K[[366]],p_rf_r[[366]],ncol=3,nrow=3) + + + #p1[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p1[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]] + } + if(num_genes_RF != (num+2)){ + total_num = num_genes_RF - (num+2) + if(total_num == 5){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],p_rf_l[[num+5]],p_rf_K[[num+5]],p_rf_r[[num+5]],p_rf_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_AUC[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],p_rf_AUC[[num+7]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + if(total_num == 4){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],p_rf_l[[num+5]],p_rf_K[[num+5]],p_rf_r[[num+5]],p_rf_AUC[[num+5]],ncol=4,nrow=3) + grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_AUC[[num+6]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + } + + if(total_num == 3){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],p_rf_l[[num+5]],p_rf_K[[num+5]],p_rf_r[[num+5]],p_rf_AUC[[num+5]],ncol=4,nrow=3) + #grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 2){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],p_rf_l[[num+4]],p_rf_K[[num+4]],p_rf_r[[num+4]],p_rf_AUC[[num+4]],Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + + if(total_num == 1){ + grid.arrange(p_rf_l[[num+3]],p_rf_K[[num+3]],p_rf_r[[num+3]],p_rf_AUC[[num+3]],Blank,Blank,Blank,Blank,Blank,Blank,Blank,Blank,ncol=4,nrow=3) + #grid.arrange(p_rf_l[[num+6]],p_rf_K[[num+6]],p_rf_r[[num+6]],p_rf_l[[num+7]],p_rf_K[[num+7]],p_rf_r[[num+7]],Blank,Blank,Blank,ncol=3,nrow=3) + } + } + dev.off() + + #print rank plots for L and K gene interactions + + + InteractionScores_AdjustMissing <- InteractionScores + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_L),]$Avg_Zscore_L <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_K),]$Avg_Zscore_K <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_r),]$Avg_Zscore_r <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Avg_Zscore_AUC),]$Avg_Zscore_AUC <- 0.001 + + InteractionScores_AdjustMissing$L_Rank <- NA + InteractionScores_AdjustMissing$K_Rank <- NA + InteractionScores_AdjustMissing$r_Rank <- NA + InteractionScores_AdjustMissing$AUC_Rank <- NA + + InteractionScores_AdjustMissing$L_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_L) + InteractionScores_AdjustMissing$K_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_K) + InteractionScores_AdjustMissing$r_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_r) + InteractionScores_AdjustMissing$AUC_Rank <- rank(InteractionScores_AdjustMissing$Avg_Zscore_AUC) + + # + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_L),]$Z_lm_L <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_K),]$Z_lm_K <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_r),]$Z_lm_r <- 0.001 + InteractionScores_AdjustMissing[is.na(InteractionScores_AdjustMissing$Z_lm_AUC),]$Z_lm_AUC <- 0.001 + + InteractionScores_AdjustMissing$L_Rank_lm <- NA + InteractionScores_AdjustMissing$K_Rank_lm <- NA + InteractionScores_AdjustMissing$r_Rank_lm <- NA + InteractionScores_AdjustMissing$AUC_Rank_lm <- NA + + InteractionScores_AdjustMissing$L_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_L) + InteractionScores_AdjustMissing$K_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_K) + InteractionScores_AdjustMissing$r_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_r) + InteractionScores_AdjustMissing$AUC_Rank_lm <- rank(InteractionScores_AdjustMissing$Z_lm_AUC) + + + + Rank_L_1SD <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L >= 1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L >= 2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L >= 3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K <= -1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K <= -2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K <= -3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Avg_Zscore_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + pdf(paste(outputpath,"RankPlots.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD,Rank_L_2SD,Rank_L_3SD,Rank_K_1SD,Rank_K_2SD,Rank_K_3SD,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext,Rank_L_2SD_notext,Rank_L_3SD_notext,Rank_K_1SD_notext,Rank_K_2SD_notext,Rank_K_3SD_notext,ncol=3,nrow=2) + + dev.off() + + + Rank_L_1SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L >= 1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L >= 2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L >= 3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K <= -1,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K <= -2,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K <= -3,])[1])) + + annotate("text",x=(dim(InteractionScores_AdjustMissing)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(InteractionScores_AdjustMissing[InteractionScores_AdjustMissing$Z_lm_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext_lm <- ggplot(InteractionScores_AdjustMissing,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + pdf(paste(outputpath,"RankPlots_lm.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD_lm,Rank_L_2SD_lm,Rank_L_3SD_lm,Rank_K_1SD_lm,Rank_K_2SD_lm,Rank_K_3SD_lm,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext_lm,Rank_L_2SD_notext_lm,Rank_L_3SD_notext_lm,Rank_K_1SD_notext_lm,Rank_K_2SD_notext_lm,Rank_K_3SD_notext_lm,ncol=3,nrow=2) + + dev.off() + + + + X_NArm <- InteractionScores[!is.na(InteractionScores$Z_lm_L) | !is.na(InteractionScores$Avg_Zscore_L) ,] + + #find overlaps + X_NArm$Overlap <- "No Effect" + try(X_NArm[X_NArm$Z_lm_L >= 2 & X_NArm$Avg_Zscore_L >= 2,]$Overlap <- "Deletion Enhancer Both") + try(X_NArm[X_NArm$Z_lm_L <= -2 & X_NArm$Avg_Zscore_L <= -2,]$Overlap <- "Deletion Suppressor Both") + try(X_NArm[X_NArm$Z_lm_L >= 2 & X_NArm$Avg_Zscore_L <= 2,]$Overlap <- "Deletion Enhancer lm only") + try(X_NArm[X_NArm$Z_lm_L <= 2 & X_NArm$Avg_Zscore_L >= 2,]$Overlap <- "Deletion Enhancer Avg Zscore only") + try(X_NArm[X_NArm$Z_lm_L <= -2 & X_NArm$Avg_Zscore_L >= -2,]$Overlap <- "Deletion Suppressor lm only") + try(X_NArm[X_NArm$Z_lm_L >= -2 & X_NArm$Avg_Zscore_L <= -2,]$Overlap <- "Deletion Suppressor Avg Zscore only") + try(X_NArm[X_NArm$Z_lm_L >= 2 & X_NArm$Avg_Zscore_L <= -2,]$Overlap <- "Deletion Enhancer lm, Deletion Suppressor Avg Z score") + try(X_NArm[X_NArm$Z_lm_L <= -2 & X_NArm$Avg_Zscore_L >= 2,]$Overlap <- "Deletion Suppressor lm, Deletion Enhancer Avg Z score") + + #get the linear model info and the r-squared value for all CPPs in results 1 vs results 2 + get_lm_L <- lm(X_NArm$Z_lm_L~X_NArm$Avg_Zscore_L) + L_lm <- summary(get_lm_L) + + get_lm_K <- lm(X_NArm$Z_lm_K~X_NArm$Avg_Zscore_K) + K_lm <- summary(get_lm_K) + + get_lm_r <- lm(X_NArm$Z_lm_r~X_NArm$Avg_Zscore_r) + r_lm <- summary(get_lm_r) + + get_lm_AUC <- lm(X_NArm$Z_lm_AUC~X_NArm$Avg_Zscore_AUC) + AUC_lm <- summary(get_lm_AUC) + + pdf(paste(outputpath,"Avg_Zscore_vs_lm_NA_rm.pdf",sep=""),width = 16, height = 12, onefile = TRUE) + + print(ggplot(X_NArm,aes(Avg_Zscore_L,Z_lm_L)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm L") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(Avg_Zscore_K,Z_lm_K)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm K") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(K_lm$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(Avg_Zscore_r,Z_lm_r)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm r") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(r_lm$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(Avg_Zscore_AUC,Z_lm_AUC)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Avg Zscore vs lm AUC") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(AUC_lm$r.squared,2))) + theme_Publication_legend_right()) + + dev.off() + + + lm_v_Zscore_L <- ggplot(X_NArm,aes(Avg_Zscore_L,Z_lm_L,ORF=OrfRep,Gene=Gene,NG=NG,SM=SM,DB=DB)) + geom_point(aes(color=Overlap),shape=3) + + geom_smooth(method = "lm",color=1) + ggtitle("Avg Zscore vs lm L") + + geom_rect(aes(xmin=-2,xmax=2,ymin=-2,ymax=2),color="grey20",size=0.25,alpha=0.1,inherit.aes = FALSE,fill=NA) + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm$r.squared,2))) + theme_Publication_legend_right() + + pgg <- ggplotly(lm_v_Zscore_L) + #pgg + plotly_path <- paste(getwd(),"/",outputpath,"Avg_Zscore_vs_lm_NA_rm.html",sep="") + saveWidget(pgg, file=plotly_path, selfcontained =TRUE) + + X_NArm$L_Rank <- rank(X_NArm$Avg_Zscore_L) + X_NArm$K_Rank <- rank(X_NArm$Avg_Zscore_K) + X_NArm$r_Rank <- rank(X_NArm$Avg_Zscore_r) + X_NArm$AUC_Rank <- rank(X_NArm$Avg_Zscore_AUC) + + X_NArm$L_Rank_lm <- rank(X_NArm$Z_lm_L) + X_NArm$K_Rank_lm <- rank(X_NArm$Z_lm_K) + X_NArm$r_Rank_lm <- rank(X_NArm$Z_lm_r) + X_NArm$AUC_Rank_lm <- rank(X_NArm$Z_lm_AUC) + + #get the linear model info and the r-squared value for all CPPs in results 1 vs results 2 + get_lm_L2 <- lm(X_NArm$L_Rank_lm~X_NArm$L_Rank) + L_lm2 <- summary(get_lm_L2) + + get_lm_K2 <- lm(X_NArm$K_Rank_lm~X_NArm$K_Rank) + K_lm2 <- summary(get_lm_K2) + + get_lm_r2 <- lm(X_NArm$r_Rank_lm~X_NArm$r_Rank) + r_lm2 <- summary(get_lm_r2) + + get_lm_AUC2 <- lm(X_NArm$AUC_Rank_lm~X_NArm$AUC_Rank) + AUC_lm2 <- summary(get_lm_AUC2) + + num_genes_NArm2 <- (dim(X_NArm)[1])/2 + + pdf(paste(outputpath,"Avg_Zscore_vs_lm_ranked_NA_rm.pdf",sep=""),width = 16, height = 12, onefile = TRUE) + + print(ggplot(X_NArm,aes(L_Rank,L_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank Avg Zscore vs lm L") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(L_lm2$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(K_Rank,K_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank Avg Zscore vs lm K") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(K_lm2$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(r_Rank,r_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank Avg Zscore vs lm r") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(r_lm2$r.squared,2))) + theme_Publication_legend_right()) + + print(ggplot(X_NArm,aes(AUC_Rank,AUC_Rank_lm)) + geom_point(aes(color=Overlap),shape=3) + geom_smooth(method = "lm",color=1) + + ggtitle("Rank of Avg Zscore vs lm AUC") + + annotate("text",x=num_genes_NArm2,y=num_genes_NArm2,label = paste("R-squared = ",round(AUC_lm2$r.squared,2))) + theme_Publication_legend_right()) + + + + dev.off() + + + + Rank_L_1SD <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_L >= 1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_L >= 2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_L >= 3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_K <= -1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_K <= -2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Avg_Zscore_K <= -3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Avg_Zscore_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext <- ggplot(X_NArm,aes(L_Rank,Avg_Zscore_L)) + + ggtitle("Average Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Avg Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext <- ggplot(X_NArm,aes(K_Rank,Avg_Zscore_K)) + + ggtitle("Average Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Avg Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + pdf(paste(outputpath,"RankPlots_naRM.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD,Rank_L_2SD,Rank_L_3SD,Rank_K_1SD,Rank_K_2SD,Rank_K_3SD,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext,Rank_L_2SD_notext,Rank_L_3SD_notext,Rank_K_1SD_notext,Rank_K_2SD_notext,Rank_K_3SD_notext,ncol=3,nrow=2) + + dev.off() + + + Rank_L_1SD_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_L >= 1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_L <= -1,])[1])) + + theme_Publication() + + Rank_L_2SD_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_L >= 2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_L <= -2,])[1])) + + theme_Publication() + + Rank_L_3SD_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_L >= 3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_L <= -3,])[1])) + + theme_Publication() + + + Rank_K_1SD_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_K <= -1,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_K >= 1,])[1])) + + theme_Publication() + + Rank_K_2SD_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_K <= -2,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_K >= 2,])[1])) + + theme_Publication() + + Rank_K_3SD_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + annotate("text",x=(dim(X_NArm)[1]/2),y=-10,label=paste("Deletion Enhancers =",dim(X_NArm[X_NArm$Z_lm_K <= -3,])[1])) + + annotate("text",x=(dim(X_NArm)[1]/2),y=10,label=paste("Deletion Suppressors =",dim(X_NArm[X_NArm$Z_lm_K >= 3,])[1])) + + theme_Publication() + + + Rank_L_1SD_notext_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 1SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_2SD_notext_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 2SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_L_3SD_notext_lm <- ggplot(X_NArm,aes(L_Rank_lm,Z_lm_L)) + + ggtitle("Interaction Z score vs. Rank for L above 3SD") + xlab("Rank") + ylab("Int Z score L") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + + Rank_K_1SD_notext_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 1SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (1),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-1),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-1,1)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_2SD_notext_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 2SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (2),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-2),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-2,2)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + Rank_K_3SD_notext_lm <- ggplot(X_NArm,aes(K_Rank_lm,Z_lm_K)) + + ggtitle("Interaction Z score vs. Rank for K above 3SD") + xlab("Rank") + ylab("Int Z score K") + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (3),ymax = Inf,fill="#542788", alpha=0.3) + + annotate("rect",xmin = -Inf, xmax = Inf, ymin = (-3),ymax = -Inf,fill="orange", alpha=0.3) + + geom_hline(yintercept=c(-3,3)) + geom_point(size=0.1,shape=3) + + theme_Publication() + + pdf(paste(outputpath,"RankPlots_lm_naRM.pdf",sep=""),width = 18, height = 12, onefile = TRUE) + + grid.arrange(Rank_L_1SD_lm,Rank_L_2SD_lm,Rank_L_3SD_lm,Rank_K_1SD_lm,Rank_K_2SD_lm,Rank_K_3SD_lm,ncol=3,nrow=2) + grid.arrange(Rank_L_1SD_notext_lm,Rank_L_2SD_notext_lm,Rank_L_3SD_notext_lm,Rank_K_1SD_notext_lm,Rank_K_2SD_notext_lm,Rank_K_3SD_notext_lm,ncol=3,nrow=2) + + dev.off() + +} + + + +#get the linear model info and the r-squared value for all CPPs in results 1 vs results 2 +get_lm_1 <- lm(X_NArm$Z_lm_K~X_NArm$Z_lm_L) +L_lm_1 <- summary(get_lm_1) + +get_lm_2 <- lm(X_NArm$Z_lm_r~X_NArm$Z_lm_L) +L_lm_2 <- summary(get_lm_2) + +get_lm_3 <- lm(X_NArm$Z_lm_AUC~X_NArm$Z_lm_L) +L_lm_3 <- summary(get_lm_3) + +get_lm_4 <- lm(X_NArm$Z_lm_r~X_NArm$Z_lm_K) +L_lm_4 <- summary(get_lm_4) + +get_lm_5 <- lm(X_NArm$Z_lm_AUC~X_NArm$Z_lm_K) +L_lm_5 <- summary(get_lm_5) + +get_lm_6 <- lm(X_NArm$Z_lm_AUC~X_NArm$Z_lm_r) +L_lm_6 <- summary(get_lm_6) + + +pdf(file=paste(outputpath,"Correlation_CPPs.pdf",sep=""),width = 10, height = 7, onefile = TRUE) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_K)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction L vs. Interaction K") + + xlab("z-score L") + ylab("z-score K") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_1$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction L vs. Interaction r") + + xlab("z-score L") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_2$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction L vs. Interaction AUC") + + xlab("z-score L") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_3$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction K vs. Interaction r") + + xlab("z-score K") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_4$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction K vs. Interaction AUC") + + xlab("z-score K") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_5$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_r,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_smooth(method="lm",color="tomato3") + + ggtitle("Interaction r vs. Interaction AUC") + + xlab("z-score r") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_6$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +InteractionScores_RF2 <- InteractionScores_RF[!is.na(InteractionScores_RF$Z_lm_L),] +ggplot(X_NArm,aes(Z_lm_L,Z_lm_K)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_L,Z_lm_K),color="cyan") + + ggtitle("Interaction L vs. Interaction K") + + xlab("z-score L") + ylab("z-score K") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_1$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_L,Z_lm_r),color="cyan") + + ggtitle("Interaction L vs. Interaction r") + + xlab("z-score L") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_2$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_L,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_L,Z_lm_AUC),color="cyan") + + ggtitle("Interaction L vs. Interaction AUC") + + xlab("z-score L") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_3$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_r)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_K,Z_lm_r),color="cyan") + + ggtitle("Interaction K vs. Interaction r") + + xlab("z-score K") + ylab("z-score r") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_4$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_K,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_K,Z_lm_AUC),color="cyan") + + ggtitle("Interaction K vs. Interaction AUC") + + xlab("z-score K") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_5$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + +ggplot(X_NArm,aes(Z_lm_r,Z_lm_AUC)) + geom_point(shape=3,color="gray70") + + geom_point(data=InteractionScores_RF2,aes(Z_lm_r,Z_lm_AUC),color="cyan") + + ggtitle("Interaction r vs. Interaction AUC") + + xlab("z-score r") + ylab("z-score AUC") + + annotate("text",x=0,y=0,label = paste("R-squared = ",round(L_lm_6$r.squared,3))) + + theme_Publication_legend_right() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(size=16),axis.title.x = element_text(size=18), axis.text.y = element_text(size=16),axis.title.y = element_text(size=18)) + + + + + +dev.off() + + +#write.csv(Labels,file=paste("../Code/Parameters.csv"),row.names = FALSE) +timestamp() + +#BoneYard*********************************************** +#I'm thinking this parameter needs to be save somewhere "permanent' for the record so outputs can be reproduced. +#take this out of the Arguments. In Matlab I could for future in .mat file. Maybe I could save the SD Args[2] as part of the StudyInfo.txt. +#Corruptable but better than nothing. +#if(is.na(Args[2])){ +# std=3 +#}else { +# std= Arg[2] +#Delta_Background_sdFactor <- 2 #Args[3] +#DelBGFactr <- as.numeric(Delta_Background_sdFactor) +#} + diff --git a/workflow/.old/templates/qhtcp/REMcJar2.sh b/workflow/.old/templates/qhtcp/REMcJar2.sh new file mode 100644 index 00000000..01c6d248 --- /dev/null +++ b/workflow/.old/templates/qhtcp/REMcJar2.sh @@ -0,0 +1,25 @@ + +#cp REMcRdy_lm_only.csv-finalTable.csv REMcRdy_lm_only.csv-finalTableBUP.csv +#rm REMcRdy_lm_only.csv-finalTable.csv +#userpath= sudo -u root -H -s eval 'echo $PWD' +#/mnt/data/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64/jre/bin/java -Xms512m -Xmx2048m -Dfile.encoding=UTF-8 -classpath ./jingyuJava_1_7_extractLib.jar ExecMain ./REMcRdy_lm_only.csv GeneByGOAttributeMatrix_nofiltering-2009Dec07.tab ORF_List_Without_DAmPs.txt 1 true true + +#/Users/anyamcdaniel/Downloads/HartmanLab/StudiesQHTCP/REMcJava/java-1.8.0-openjdk-1.8.0.342.b07-1.el7_9.x86_64/jre/bin/java -Xms512m -Xmx2048m -Dfile.encoding=UTF-8 -classpath ./jingyuJava_1_7_extractLib.jar ExecMain ./REMcRdy_lm_only.csv GeneByGOAttributeMatrix_nofiltering-2009Dec07.tab ORF_List_Without_DAmPs.txt 1 true true +# figure out how to do this on a mac based on where REMcJava is locatedcu +#/Users/anyamcdaniel/Downloads/HartmanLab/StudiesQHTCP/2PE_BMH21_RM_TrialOnMac/REMc/REMcJava/java-1.8.0-openjdk-1.8.0.342.b07-1.el7_9.x86_64/jre/bin/java -Xms512m -Xmx2048m -Dfile.encoding=UTF-8 -classpath ./jingyuJava_1_7_extractLib.jar ExecMain ./REMcRdy_lm_only.csv GeneByGOAttributeMatrix_nofiltering-2009Dec07.tab ORF_List_Without_DAmPs.txt 1 true true + +#/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/jre/bin/java -Xms512m -Xmx2048m -Dfile.encoding=UTF-8 -classpath ./jingyuJava_1_7_extractLib.jar ExecMain ./REMcRdy_lm_only.csv GeneByGOAttributeMatrix_nofiltering-2009Dec07.tab ORF_List_Without_DAmPs.txt 1 true true + +#wait +cp REMcRdy_lm_only.csv-finalTable.csv REMcRdy_lm_only.csv-finalTableBUP.csv +rm REMcRdy_lm_only.csv-finalTable.csv + +current_dir="$PWD" + +java_executable="java" # Assuming java is available in the system's PATH + +classpath="$current_dir/jingyuJava_1_7_extractLib.jar" + +"$java_executable" -Xms512m -Xmx2048m -Dfile.encoding=UTF-8 -classpath "$classpath" ExecMain "$current_dir/REMcRdy_lm_only.csv" "$current_dir/GeneByGOAttributeMatrix_nofiltering-2009Dec07.tab" "$current_dir/ORF_List_Without_DAmPs.txt" 1 true true + +wait diff --git a/workflow/.old/templates/qhtcp/REMcJar2old.sh b/workflow/.old/templates/qhtcp/REMcJar2old.sh new file mode 100644 index 00000000..e3117b36 --- /dev/null +++ b/workflow/.old/templates/qhtcp/REMcJar2old.sh @@ -0,0 +1,10 @@ + +cp REMcRdy_lm_only.csv-finalTable.csv REMcRdy_lm_only.csv-finalTableBUP.csv +rm REMcRdy_lm_only.csv-finalTable.csv +/mnt/data/REMcJava/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64/jre/bin/java -Xms512m -Xmx2048m -Dfile.encoding=UTF-8 -classpath ./jingyuJava_1_7_extractLib.jar ExecMain ./REMcRdy_lm_only.csv GeneByGOAttributeMatrix_nofiltering-2009Dec07.tab ORF_List_Without_DAmPs.txt 1 true true + +#/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-1.el7_9.x86_64/jre/bin/java -Xms512m -Xmx2048m -Dfile.encoding=UTF-8 -classpath ./jingyuJava_1_7_extractLib.jar ExecMain ./REMcRdy_lm_only.csv GeneByGOAttributeMatrix_nofiltering-2009Dec07.tab ORF_List_Without_DAmPs.txt 1 true true + +#/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/jre/bin/java -Xms512m -Xmx2048m -Dfile.encoding=UTF-8 -classpath ./jingyuJava_1_7_extractLib.jar ExecMain ./REMcRdy_lm_only.csv GeneByGOAttributeMatrix_nofiltering-2009Dec07.tab ORF_List_Without_DAmPs.txt 1 true true + +wait diff --git a/workflow/.old/templates/qhtcp/REMcMaster2.sh b/workflow/.old/templates/qhtcp/REMcMaster2.sh new file mode 100644 index 00000000..e6ccdd52 --- /dev/null +++ b/workflow/.old/templates/qhtcp/REMcMaster2.sh @@ -0,0 +1,92 @@ +#REMcMaster.sh Is to perform all REMc task and to operate from source directory REMc +#Step 0 Perform JoinInteractExps3dev.R to create the "REMcRdy_lm_only.csv" and "Shift_only.csv" files +Rscript JoinInteractExps3dev.R + +#Step1 Perform REMc java utility using file input file REMcRdy_lm_only.csv +#and producing REMcRdy_lm_only.csv-finalTable.csv +sh ./REMcJar2.sh +wait #wait isn't holding process until Jar is complete. Should take at least 3minuites + +#Step 2 +if [ -f "REMcRdy_lm_only.csv-finalTable.csv" ]; then + echo "REMcRdy_lm_only.csv-finalTable.csv exists." + #Jarflag= 1 + #echo "Jarflag = $Jarflag" +echo "REMcJar... .sh completed" +else +echo "REMcJar failed" +wait +exit +fi +echo "start Step2" +#Step2 If REMcJar successfully produces "REMcRdy_lm_only.csv-finalTable.csv" + #then add shift values back to the "REMcRdy_lm_only.csv-finalTable.csv" + #and output it as "REMcWithShift.csv" to be used to produce the REMc Heatmaps. +if [ -f "REMcRdy_lm_only.csv-finalTable.csv" ]; then + echo "REMcRdy_lm_only.csv-finalTable.csv exists." + Rscript ./AddShiftVals2.R + wait + echo "AddShiftVals2.R executed" + wait + fi + +#Step3 Execute REMcHeatmaps_zscores.R contingent upon "REMcWithShift.csv" being created. +cd REMcHeatmaps +if [ -f "REMcWithShift.csv" ]; then + echo "REMcWithShift.csv exists." +fi +cd .. + Rscript REMcHeatmaps_zscores.R + wait + echo "REMcHeatmaps executed" + wait + pdftk *.pdf output compiledREMcHeatmaps.pdf + wait + +#Step4 Begin the process of GTF contingent upon "REMcRdy_lm_only.csv-finalTable.csv" +# being produced by "REMcJar.sh" (Step1) +if [ -f "REMcRdy_lm_only.csv-finalTable.csv" ]; then + echo "REMcRdy_lm_only.csv-finalTable.csv exists." + python2 DconJG2.py REMcRdy_lm_only.csv-finalTable.csv GTF/Process/ + #python2 DconJG.py REMcRdy_lm_only.csv-finalTable.csv 12 GTF/Process/ +else + echo "DconJG.py failed" + wait + exit + +fi + +if [ -f "GTF/Process/REMcRdy_lm_only/1-0-0-finaltable.csv" ]; then + echo "Begin copying REMcRdy_lm_only to /Function and /Component" + cp -r GTF/Process/REMcRdy_lm_only GTF/Function/ + echo "Copy to Function complete" + wait + cp -r GTF/Process/REMcRdy_lm_only GTF/Component/ + echo "Copy to Component complete" + + wait + +else + echo "COPY failed" + wait + exit + +fi + +if [ -f "GTF/Function/REMcRdy_lm_only/1-0-0-finaltable.csv" ]; then + echo "Begin concurrent running of GTF tasks" + sh ./mProcess.sh & + sh ./mFunction.sh & + sh ./mComponent.sh & + + echo "GTF ontologies run in background" + wait +else + echo "GTFontologies failed" + + exit + + +echo "masterDev.sh Finished" +exit +fi diff --git a/workflow/.old/templates/qhtcp/REMcMaster3.sh b/workflow/.old/templates/qhtcp/REMcMaster3.sh new file mode 100644 index 00000000..68a82f3c --- /dev/null +++ b/workflow/.old/templates/qhtcp/REMcMaster3.sh @@ -0,0 +1,121 @@ +#REMcMaster.sh Is to perform all REMc task and to operate from source directory REMc +# Gain permissions to the perl scripts for GTF +currentDir="$PWD" +GTFpath="$currentDir/GTF" +chmod -R u+rwx "$GTFpath" +#Step 0 Perform JoinInteractExps3dev.R to create the "REMcRdy_lm_only.csv" and "Shift_only.csv" files +Rscript JoinInteractExps3dev.R + +#Step1 Perform REMc java utility using file input file REMcRdy_lm_only.csv +#and producing REMcRdy_lm_only.csv-finalTable.csv +sh ./REMcJar2.sh +wait +#wait isn't holding process until Jar is complete. Should take at least 3minuites + +#Step 2 +if [ -f "REMcRdy_lm_only.csv-finalTable.csv" ]; then + echo "REMcRdy_lm_only.csv-finalTable.csv exists." + #Jarflag= 1 + #echo "Jarflag = $Jarflag" +echo "REMcJar... .sh completed" +else +echo "REMcJar failed" +wait +exit +fi +echo "start Step2" +#Step2 If REMcJar successfully produces "REMcRdy_lm_only.csv-finalTable.csv" + #then add shift values back to the "REMcRdy_lm_only.csv-finalTable.csv" + #and output it as "REMcWithShift.csv" to be used to produce the REMc Heatmaps. +if [ -f "REMcRdy_lm_only.csv-finalTable.csv" ]; then + echo "REMcRdy_lm_only.csv-finalTable.csv exists." + Rscript ./AddShiftVals2.R + wait + echo "AddShiftVals2.R executed" + fi + +#Step3 Execute REMcHeatmaps_zscores.R contingent upon "REMcWithShift.csv" being created. +cd REMcHeatmaps +if [ -f "REMcWithShift.csv" ]; then + echo "REMcWithShift.csv exists." +fi + +rm *.pdf #Remove .pdf files to be sure of a clean 'slate' + +cd .. + Rscript REMcHeatmaps_zscores.R + echo "REMcHeatmaps executed" + wait +cd REMcHeatmaps + pdftk *.pdf output compiledREMcHeatmaps.pdf + +#Step3b Execute REMcHeatmaps_Z_lm_wDAmPs_andHomology_221212.R contingent upon "REMcWithShift.csv" being created in ../REMcHeatmapsWithHomology. +#cp ./Homology/REMcWithShift.csv ./REMcHeatmapsWithHomology/REMcWithShift.csv +cp ./REMcWithShift.csv ../REMcHeatmapsWithHomology/ +cd ../REMcHeatmapsWithHomology +if [ -f "REMcWithShift.csv" ]; then + echo "REMcWithShift.csv exists." +fi + rm ./Homology/*.pdf #Remove .pdf files to be sure of a clean 'slate' + rm ./Homology/*.csv #Remove .csv files to be sure of a clean 'slate' + + Rscript REMcHeatmaps_Z_lm_wDAmPs_andHomology_221212.R REMcWithShift.csv Homology 17_0503_DAmPs_Only.txt Yeast_Human_Homology_Mapping_biomaRt_18_0920.csv + + echo "REMcHeatmaps_Z_lm_wDAmPs_andHomology_221212.R executed" + wait +cd Homology + pdftk *.pdf output compiledREMcHomologyHeatmaps.pdf + +echo "pdftk executed" +cd ../.. + +#Step4 Begin the process of GTF contingent upon "REMcRdy_lm_only.csv-finalTable.csv" +# being produced by "REMcJar.sh" (Step1) +if [ -f "REMcRdy_lm_only.csv-finalTable.csv" ]; then + echo "REMcRdy_lm_only.csv-finalTable.csv exists." + python3 DconJG2.py REMcRdy_lm_only.csv-finalTable.csv GTF/Process/ + #python2 DconJG.py REMcRdy_lm_only.csv-finalTable.csv 12 GTF/Process/ +else + echo "DconJG2.py failed" + wait + exit + +fi + +if [ -f "GTF/Process/REMcRdy_lm_only/1-0-0-finaltable.csv" ]; then + echo "Begin copying REMcRdy_lm_only to /Function and /Component" + cp -r GTF/Process/REMcRdy_lm_only GTF/Function/ + echo "Copy to Function complete" + wait + cp -r GTF/Process/REMcRdy_lm_only GTF/Component/ + echo "Copy to Component complete" + + wait + +else + echo "COPY failed" + wait + exit + +fi + +if [ -f "GTF/Function/REMcRdy_lm_only/1-0-0-finaltable.csv" ]; then + echo "Begin concurrent running of GTF tasks" + sh ./mProcess.sh & + sh ./mFunction.sh & + sh ./mComponent.sh & + + echo "GTF ontologies run in background" + +else + echo "GTFontologies failed" + +fi + +wait + +Rscript CompileGTF.R +wait + +echo "REMcMaster3.sh Finished" + diff --git a/workflow/.old/templates/qhtcp/REMcRdy_lm_only.csv b/workflow/.old/templates/qhtcp/REMcRdy_lm_only.csv new file mode 100644 index 00000000..e37a9e80 --- /dev/null +++ b/workflow/.old/templates/qhtcp/REMcRdy_lm_only.csv @@ -0,0 +1,832 @@ +OrfRep,Gene,FY4_Z_lm_K,BY4742_Z_lm_K_1,FY4_Z_lm_L,BY4742_Z_lm_L_1 +KML14-13_-6_,VPS8,-59.3847278181521,-6.06157169672863,0.772743415948687,8.39820521641744 +KML12-19MG-C1DNMT,VPS8,-61.7704731480934,-7.00152259748668,3.59681346254071,8.99468364704015 +CQ10-30A-4CONTROL,VPS8,-22.1493418068443,1.01057802879191,-1.32259812578781,-1.40227673581777 +NBP13-2_-7_,VPS8,-51.1031045178275,-3.73433070180383,4.71147533646182,8.19513739350017 +CQ10-27C-1HDAC,VPS8,-26.4720466459974,-0.331443770649795,3.06034059896547,0.705141331827187 +PSC03-61_-6_,VPS8,-25.3220571929659,-0.72622940144637,2.6849735823816,1.68355485772886 +EG12-32D-3AHDAC,VPS8,-41.324395003364,-4.09835822552595,2.32241487629303,3.03853435965829 +CQ10-06B-1CONTROL,VPS8,-39.0716102878534,-5.34095716930887,2.01966216347308,3.77845508412703 +EG12-30A-6CONTROL,VPS8,-37.8775642922419,-1.76184832277848,1.49657970926092,1.19181087929409 +CQ10-30A-4DNMT,VPS8,-35.4936750499954,0.522291578085531,-0.327827611198834,0.87541470554711 +Lys_3,VPS8,-39.8518983279553,1.52099978286979,4.48531893673844,-2.86418009670572 +PSC07-4_-7__2,VPS8,-7.23278458251803,-3.71137209074474,3.57258904477228,8.02246684078295 +PSC10-14_-6_,VPS8,-15.1064754799911,0.75356131177783,3.54251842817478,1.3233468188676 +PSC03-17_-6_,VPS8,-8.18234185181037,-3.62751532438468,3.51942828772159,8.07587628895911 +Farnesol_1,VPS8,-13.1295215797973,-1.94911804017062,3.39747359540882,0.968785243900746 +PSC08-79_-7_,VPS8,-4.19181905498484,-3.47276039612587,3.36530291687454,3.9612329984847 +PSC11-37-M37A-1_-6_,VPS8,-5.58451903151947,-3.35601750693486,3.33705911091163,7.50674629779757 +Leucine_2,VPS8,-19.9462802819614,-2.18975358413756,3.29533708404183,0.337399876432149 +Tryptophan_2,VPS8,-29.1403100346624,-6.86896685809796,3.28961619940997,-1.79505709927979 +KML12-33_-7_,VPS8,-5.77846047153248,-1.30037937389063,3.23000650860923,1.70474451122617 +Tryptophan_1,VPS8,-14.1189265737416,-4.75429893154531,3.22587287318308,8.79792713362979 +Lys_1,VPS8,-11.2856668684289,1.10570501845037,3.19620576755786,-2.89936157176371 +PSC04-37_-7__1,VPS8,-19.2630326544322,-4.01291286825037,3.12775096546675,2.17147652385328 +BGC13-12_-6_,VPS8,-4.69555012893993,0.129023264065035,3.11114352910146,1.03744784040905 +PSC08-33_-7_,VPS8,-14.159063585086,1.01346543098873,3.10783804064975,0.058814946877905 +CWR15-17_-7__1,VPS8,-7.02325099437684,-0.523296278142047,3.09577687412093,2.54467584732745 +CQ10-27C-1DNMT,VPS8,-30.1815185878921,-4.8516766534435,3.00074866606415,8.61559522313556 +Leucine_1,VPS8,-12.3090074166839,-4.13037516639965,2.98954779517816,8.58577321143547 +Tryptophan_3,VPS8,-16.2255648659991,-6.41818568544464,2.88948835765507,8.76545071972336 +Lys_4,VPS8,-23.6715403311731,1.24856043860688,2.86242601835046,-3.02321820724638 +NBP13-28_-6_,VPS8,-29.7682159041289,0.808646398523773,2.8197403546427,0.814308638277034 +PSC07-29_-6__2,VPS8,-4.20358371764322,0.420677042639075,2.74458947513955,1.23580868999463 +NBP13-34_-6_,VPS8,-2.18953233936,0.0844892628259896,2.66049213000546,1.79366419823232 +SCVX93-627_-6_,VPS8,-0.502906968341118,-5.25722144186007,2.59251093585805,4.33320840298761 +Lys_2,VPS8,-9.05511778005427,0.95016280147417,2.5883837871097,-3.02765037942577 +KML12-21_-6__2,VPS8,-12.7680679724564,-0.854527535508487,2.57707941409955,1.00022864383892 +PSC08-79_-6_,VPS8,11.4409455317132,-1.63328386021317,2.57613442646025,1.45738080754952 +EG12-32B-2HDAC,VPS8,-21.1304723231736,-4.12523897023883,2.55796613325006,2.08992366904526 +Thr_1,VPS8,-13.5724306324034,-4.63736993300665,2.54780799581994,3.82990695548651 +PSC04-51_-7__1,VPS8,-10.0546589346468,0.160659044715004,2.52702658654835,-0.104948290282127 +SCXII93-541_-7_,VPS8,-3.08456007861081,0.678584229510604,2.45727424464177,0.484358042700346 +Ser_2,VPS8,-9.66306084475538,-1.74036556613552,2.44522147118079,0.359571309608067 +KML12-2MG-F3DNMT,VPS8,-2.88255603640969,-0.788722772502747,2.40161044079616,-0.110960165565157 +SCVI93-650_-6_,VPS8,-2.16923473076524,-0.0874923800997822,2.39812871648861,0.924040026966393 +PSC08-42_-6_,VPS8,-4.74362634045679,-2.99227286684029,2.38630188119521,1.54791111526214 +EG12-30C-3HDAC,VPS8,-5.44722316266923,-6.62367919514257,2.37301907145697,8.80552613682307 +BGC11-27_-7_,VPS8,-29.8429995486121,-3.59094369535735,2.37231364524654,7.83839016321656 +PSC07-79-6B_-6__1,VPS8,-21.1616778607605,0.715583731817298,2.36192900020766,0.0773495160863704 +PSC08-51B_-6__1,VPS8,-3.23542308874182,-7.52027885702353,2.35214222508142,9.00266742287267 +KML12-25_-6_,VPS8,-0.868912289374969,0.775343556872083,2.30364161991375,-1.35882296402362 +Pro_1,VPS8,-3.42203424672533,-4.45106694960332,2.29775305342292,1.28515250724191 +BB15-08_-6_,VPS8,-1.7636760292316,-3.48806290172213,2.2673589137703,8.27121312571654 +KML12-50_-7_,VPS8,-2.46219516194658,0.227902425967862,2.2520981934181,-0.242005609709674 +EG12-30C-3CONTROL,VPS8,-6.2322299130099,-0.980409544776534,2.24740102785834,0.926083546179913 +Qercetin_1,VPS8,-3.60150427167056,-7.54148748236098,2.24566503071291,9.01970857241558 +Met_2,VPS8,-11.583300392335,-4.18665672207283,2.21628767780497,8.55319319908789 +Qercetin_3,VPS8,-12.6388812344232,-7.05544182663451,2.19928366279483,9.12045250085229 +KML12-16_-7_,VPS8,-3.34034413533202,-3.58873236600511,2.1925561670846,1.83658287629382 +PSC04-46_-7_,VPS8,-0.684950228760758,1.82850109221622,2.15753621532798,0.753083888649431 +Met_1,VPS8,-17.4042847358604,-6.43500569702338,2.14381312233427,8.87530965784294 +Ile_3,VPS8,-5.23878097432242,-3.46732345856629,2.13829863537208,3.71123577421947 +NBP13-72C_-6_,VPS8,-3.35223422298993,-6.04271344042061,2.12815886242004,8.41260064598755 +SC95-1668_-6_,VPS8,-3.06624398271039,-3.36316982113876,2.11888615650921,8.1466276850671 +Tryptophan_4,VPS8,-8.90757650942717,-6.56936327515137,2.11399520145026,8.69727418510771 +Ile_1,VPS8,-7.38203527450982,-6.01933171414364,2.06390831884063,3.00945096522038 +SCB93-42-_726_,VPS8,-4.89740447033515,-4.13693558542637,2.06224691848987,7.69093858835016 +EG12-25B-7BHDAC,VPS8,-2.88050776524786,-7.38809125662153,2.06019307413239,8.73420554285671 +PSC08-37B_-6_,VPS8,-5.62829134486666,-6.12431852502124,2.04402044943558,8.19514788767809 +Ala_4,VPS8,-12.3231834761076,0.594392109186782,2.02118868053896,0.270870649190131 +Ile_4,VPS8,-8.19888581384635,-3.86206024184973,2.00805559050418,8.97605571062824 +PSC07-43_-7_,VPS8,-2.44337837753993,0.679106106983496,2.00505225868417,-0.463405842470903 +PSC07-69_-7_,VPS8,-0.234098941506491,-3.60050801889806,1.9400192595955,3.02695021127285 +Tryptophanol_1,VPS8,-3.94348261335724,1.02941142058836,1.92918975101339,-0.370772557214418 +KML12-42_-7_,VPS8,-4.49745044559542,0.688082765025664,1.91810969450136,1.26212957214766 +PSC08-24_-7_,VPS8,-6.94055748298722,-3.26625960733787,1.866619541704,7.72894559022456 +Farnesol_2,VPS8,-11.6437764834434,-6.65975019187317,1.85525054330942,8.78964827900868 +PSC11-37-M15A-1_-6_,VPS8,-1.58641206818955,-3.40366815267497,1.84652190749881,7.67593481927814 +KML12-61_-7_,VPS8,-3.50248426901029,-4.06294845983622,1.84206474901754,8.39754333343814 +EG12-25B-7BDNMT,VPS8,0.379476110270691,0.633432861727241,1.8398641435749,-1.52328294847224 +Qercetin_4,VPS8,-12.0120293395496,-6.51857576772642,1.83794526296682,8.6549724506806 +PSC04-21_-7__2,VPS8,-3.23997176795898,-0.235956869431461,1.83317313542729,0.614774947807729 +PSC03-1-1A_-6_,VPS8,-19.4814461302424,1.41230237981683,1.82898679574404,-0.776943145459301 +EG12-25B-5HDAC,VPS8,1.91485511571641,0.803150979619018,1.82725675916228,-0.724599451212079 +PSC08-52_-7_,VPS8,-9.52434888720067,-2.34306734204259,1.80415607785767,1.17618402784505 +PSC07-33_-6__1,VPS8,-2.38981886826098,-2.26630794940395,1.77386462949448,0.992779542596733 +Gly_2,VPS8,-7.52503595785521,-1.77749265372066,1.76265483942652,0.238916710489834 +EG11-07C-2DNMT_1,VPS8,-5.60333379294226,-1.13076508323083,1.75861850416733,0.809522806313864 +EG12-40B-5CONTROL,VPS8,-15.8457536915885,-0.136903405706871,1.74986708451992,-0.86732930987168 +Pro_4,VPS8,-9.77739989272224,-6.59571985796382,1.7327877423449,8.7814223638835 +KML14-43_-7_,VPS8,-2.51931714580922,1.59295479593636,1.72288907202666,-0.574194118016521 +SCXV93-627_-6__1,VPS8,-5.7311287180774,-3.6795540127766,1.70802971486316,7.55256178029826 +PSC07-57_-6_,VPS8,-1.51879787851869,0.557144061163078,1.70012002212442,0.741100039910471 +NBP13-4B_-6_,VPS8,-1.76958111912926,0.592285181661068,1.64927663071672,1.10572123074176 +Gln_2,VPS8,-6.31454816089284,0.726440587951234,1.64693899420562,0.658081730819998 +Pro_2,VPS8,-8.78986008990014,-7.60370261014225,1.64485514896333,9.01568053412605 +NBP13-24_-6_,VPS8,-14.6273317519134,1.17531529508368,1.64173019193462,-0.511707856778301 +PSC07-7_-6_,VPS8,-1.57517742730342,-4.5201186087166,1.6069178138675,8.40226470860369 +PSC11-32_-7_,VPS8,-2.17266672288972,0.792118907892301,1.60143170612068,1.13832375181232 +PSC07-AM16_-6_,VPS8,-2.27540496989116,0.221104997583241,1.57038565534946,0.865462098536407 +PSC07-37_-6_,VPS8,-6.39841500292332,-1.26000337344952,1.56348139766926,0.868823401167989 +PSC07-24B_-7_,VPS8,-2.80568062661159,-0.12508023672096,1.55891072232654,0.585817475694795 +PSC11-37-M37A_-1_,VPS8,-0.679008725153562,-3.43339163553847,1.54880727600808,7.16541936511268 +EG12-30A-1HDAC,VPS8,-2.02461060286936,-4.12847277012433,1.53323645160597,1.01936302651786 +PSC11-32_-6_,VPS8,-1.08365607245669,0.885311558526146,1.5326218388847,0.598172036280399 +PSC08-J3_-7_,VPS8,-3.09163647616545,-3.30320572902501,1.52868929047026,1.79833365702571 +PSC08-35_-6_,VPS8,-3.84582711331293,-0.871664854073376,1.51811032981806,0.600818438335709 +NBP13-80_-7_,VPS8,-1.65807222558747,0.831212544930451,1.49872002821334,-0.165650564703603 +RT175_2,VPS8,-4.36102344831458,-3.7514435735063,1.49767324058385,2.05316078567735 +Met_4,VPS8,-6.86913603768521,-5.38443759605136,1.49594048677732,8.88599830998787 +PSC03-110_-7_,VPS8,1.14754340523006,-3.6653063773484,1.46833075356906,8.61754222767328 +PSC07-69F_-7_,VPS8,-1.83098778281485,0.841016622629793,1.45635634635578,-0.509622048448881 +PSC07-AM17_-7__2,VPS8,-1.19436285289658,0.307404502318286,1.45204675979439,0.137372095282122 +KML12-14MG-C1DNMT,VPS8,0.321922219353183,0.000228952339917235,1.44270107875834,-0.5248556793283 +SCIII93-577_-7_extraunextracted,VPS8,-1.40294665011384,0.511935811133818,1.43545221632018,-0.452750008387724 +PSC07-32_-7__3,VPS8,-1.4243397044707,0.609498000556354,1.43173129576887,-0.0947641162577423 +PSC07-34_-7_,VPS8,-1.8609046796807,-4.27840664248997,1.41259802877186,7.67972856222393 +PSC07-69G_-6_,VPS8,-1.72824144387796,-0.0102827267918121,1.39283879736744,-0.367073282696887 +BGC11-6_-7_,VPS8,0.148839765957055,-3.8426037724401,1.38997898329368,8.35005947710692 +EG12-25B-7ADNMT,VPS8,-7.62829714618537,-6.42069512561629,1.37175709452715,2.96897005006579 +NBP13-40_-7_,VPS8,-0.436628959512128,-3.17543156416925,1.34840991946625,2.87502008261607 +EG12-25B-4DNMT,VPS8,-1.48504338126373,0.395594827733189,1.31978988619111,-0.677500289419047 +CQ10-29B-2CONTROL,VPS8,5.28192260757526,0.467585363648098,1.31668674123545,-1.02808729147271 +NBP13-5_-7__2,VPS8,1.3380306002961,0.872737840869983,1.30612002356863,-0.557975901027384 +Thr_2,VPS8,-7.87913500736024,-0.423365251575647,1.30345156648988,0.43307294051567 +PSC07-AM16_-7_,VPS8,-3.40796135947867,-0.74173164099518,1.28215580328229,1.38612569350455 +KML14-23a_-6_,VPS8,-7.68868928346341,-6.64428827247055,1.26414148820527,8.62088776430597 +PSC07-48_-6_,VPS8,-8.27397695187682,-3.95765439694135,1.25288953473163,8.80168199787225 +PSC08-22_-6_,VPS8,-1.0868756512755,-3.90914343578741,1.24715287905489,7.89032290274878 +KML12-8MG-C2DNMT,VPS8,1.40518051517026,0.290534575997662,1.22554656614777,-1.75364438130931 +PSC07-92_-6_,VPS8,-2.24300182585702,0.25026617209396,1.22078939881839,-0.176355849769085 +KML12-33_-6_,VPS8,-1.25192180127375,-4.30850900114966,1.21655684155584,8.68371548594376 +PSC08-86_-7_,VPS8,-2.03751218245904,1.18477967840693,1.21361918734851,0.238838349101716 +EG12-24A-2ADNMT,VPS8,0.0514624261939759,0.77754391748443,1.21258861641351,-1.40878687237766 +PSC03-58_-7__2,VPS8,-3.55568469865347,-0.881204280841511,1.20516866784845,0.673359014980345 +CQ10-24C-2DNMT,VPS8,-14.9786623480012,0.655402087216137,1.19348616113604,-0.785593315908515 +EG12-28D-2DNMT,VPS8,-18.073799337432,0.417067989780462,1.18785167063461,-0.74000087439007 +CQ10-28A-3HDAC,VPS8,-2.78071801722753,-1.22007946121976,1.18645703490825,0.688997120790878 +SC95-1672_-7_,VPS8,-1.24263731683206,0.647856851474319,1.17833976848001,1.13705405521153 +NBP13-44_-7_,VPS8,1.09753625561547,-3.84297064801632,1.16661915253554,8.43791306914286 +KML12-17_-7_,VPS8,-1.0505155508043,-1.78077777475324,1.15692886674153,0.824587202628629 +PSC08-42D_-6_,VPS8,-3.17385054037941,0.0887274470307813,1.14898592977908,0.176655614582461 +KML12-60_-7_,VPS8,-1.72500466969631,0.683963827938775,1.14724263512114,-0.311145585877092 +PSC08-45_-6_,VPS8,-1.86087534641468,0.327009116854274,1.13992485173138,0.0111002056155133 +EG12-25B-5DNMT,VPS8,3.23626210642434,-2.19247433734489,1.13316330096272,0.330278593939243 +NBP13-9_-7_,VPS8,0.767023174975367,-3.4943181212287,1.12906372059501,8.26809703174893 +NBP11-18_-7_,VPS8,-0.302907703148754,-0.285100160130153,1.12857397642134,0.946077430928206 +PSC11-1_-6_,VPS8,-0.958649830577411,0.756733125204131,1.1269725778402,0.490570791283905 +KML12-61_-DCM_,VPS8,-1.92307299679092,-0.134845821816152,1.11690687556869,0.803689977690897 +EG12-30A-1CONTROL,VPS8,-1.22325915440329,-0.260353413409403,1.11495762889068,0.353011800166924 +SC95-1667_-7_,VPS8,-0.00914819334132018,-3.33312502656556,1.11323136176195,3.01982995190371 +Phe_4,VPS8,-9.9366289526209,-6.47388037168125,1.11137292857311,8.69780996092287 +PSC08-46_-6_,VPS8,-0.98074182585912,-1.24092314925672,1.09724494433122,1.26704772811865 +PSC07-18_-7_,VPS8,0.928629240913673,0.390402323921037,1.07417831808504,0.861683702447192 +KML12-49_-7_,VPS8,-2.34773878091564,0.768463889095804,1.07177419312652,-0.100960835902209 +SXBI93-42_726__-7_,VPS8,3.4844437897864,0.913545255453172,1.06537022047143,-0.557216743188716 +NBP13-13_-6_,VPS8,-0.737717739857149,-0.148566322100427,1.0651456192527,1.45530864087039 +NBP13-43_-6_,VPS8,-1.20199961698142,-0.511505433805913,1.06075738172302,0.375964899904487 +Ile_2,VPS8,-5.59924433106212,-3.31529926001099,1.05900678955255,1.54283987081717 +PSC07-50_-7_,VPS8,-1.11425269190068,0.504400855315958,1.05078654711429,0.0562939699042167 +KML12-27_-7_,VPS8,-1.11701103039861,-4.56242015313628,1.04058543544377,8.01663230695369 +PSC07-92_-7_,VPS8,-0.93686532884296,0.290573182823189,1.03606503185397,-0.400303660722067 +PSC07-29_-6__1,VPS8,0.31326587140113,-1.18649517809439,1.03292953397384,0.744372330773908 +CQ10-24C-2CONTROL,VPS8,-5.55578861468958,0.493869187443201,1.01761935270344,-2.06489568475027 +EG12-30A-1DNMT,VPS8,2.60266254887398,0.21315644615817,1.01609579425587,-0.923154012231783 +SCXXV93-627_-6_,VPS8,-1.48489064598203,-3.83691566207184,1.01530847373826,7.81588280440224 +PSC07-22_-7__1,VPS8,-1.25296363796346,-0.00569239808079719,1.00004369921244,0.346533039402701 +Asn_2,VPS8,-5.90912702226192,1.10975610803914,0.9956765433856,-0.335822308128861 +PSC07-85_-7_,VPS8,-1.40838038477129,-0.0572935043762748,0.991844538477016,-0.242066315053466 +PSC07-78_-6__1,VPS8,-1.08445312809892,0.701901495694419,0.970182277973893,0.487084326510906 +CQ10-30C-1DNMT,VPS8,-3.01923894114928,-0.361245612865802,0.9684341183076,0.211473880701457 +PSC07-26_-7_,VPS8,-4.90617612836743,1.21114402827303,0.965140507656166,0.615588672247558 +EG12-20E-3BHDAC,VPS8,-3.23277702584832,0.539203423651625,0.951434968305804,0.236434349279269 +KML14-43_-6_,VPS8,-1.14384489985644,-3.28003093613504,0.947375929674324,7.44903120374846 +PSC07-73_-6__1,VPS8,-1.99056074997031,-3.95903579027844,0.943514289066032,8.44806313904152 +SCX604_-6_,VPS8,0.2364531741028,-3.11919524016148,0.939742731576689,2.00681259673281 +PSC08-21C_-7_,VPS8,-0.765330458102444,-4.23125822465818,0.933564981809759,2.58036623404231 +CWR15-6_-7_,VPS8,0.424981109296994,-2.35158783565249,0.923641986449781,3.18146986619603 +PSC11-33_-7_,VPS8,-2.50132776180276,0.450149698845697,0.918854818235586,0.894793351867301 +KML14-24_-6_,VPS8,-1.57927902708673,0.0523944264606447,0.909056691423199,0.326012586953193 +PSC04-42_-6_,VPS8,-1.48279584619134,-3.93836903115492,0.897287425395246,7.9939220285913 +SC508_-6__1,VPS8,-3.10194560193402,0.556032458719175,0.887058745344082,0.595086636025943 +EG12-30B-3HDAC,VPS8,-4.46286854794026,-4.2706700824535,0.877787661102703,1.96041359264094 +KML12-21_-6__1,VPS8,-1.17514248320916,-1.60449961624755,0.877536302338068,1.12873401269934 +PSC07-36_-6_,VPS8,-0.459065873542568,-1.02489374549508,0.874862980250975,1.03185476378994 +BGC11-3_-6_,VPS8,-1.64941284315962,-6.72384574618896,0.873893221920322,8.8180160907878 +Ser_4,VPS8,-6.00216101566999,0.660257637965246,0.859057378963831,-0.918096029345318 +CQ10-27C-4ADNMT,VPS8,-2.08912659275321,-0.169478200299639,0.852589350365484,0.341433790524106 +PSC03-19_-7_,VPS8,1.34253275088438,2.10111416719401,0.852007981867927,0.271498769084958 +EG12-2C-9_?_DNMT,VPS8,-4.55089970225382,-0.253563409414306,0.841512537192361,0.498884695053459 +PSC10-48_-7__1,VPS8,2.34482718651517,-0.0607736012999129,0.834581521966255,0.00408396382984304 +SC95-1625_-6_,VPS8,-1.41806744300182,0.38972019385579,0.831261153768909,0.436382745917406 +BGC13-37_-6_,VPS8,0.958391379513961,-1.05379232505938,0.823081453066877,1.31927615042091 +NBP13-40_-6_,VPS8,-0.53050856017516,0.166998102712512,0.815980162548596,1.13937211263714 +PSC04-46_-6_,VPS8,-0.13716463520953,0.610948383605336,0.81391091233135,1.00730661409215 +PSC07-50-2.0_-7_,VPS8,-0.540476813162717,-3.26758297272761,0.807123414851502,6.72633965970696 +KML13-7_-6_,VPS8,-1.1215162154627,0.45519896905071,0.779559088387823,0.811061243425377 +PSC11-37-M33E-2__,VPS8,-0.553075956664799,-6.89451578503918,0.778362296334274,8.83332611490885 +CWR15-9_-7_,VPS8,-1.19826114280161,0.839694510187522,0.77701460855743,-2.1636588455648 +KML14-32_-6__1,VPS8,-1.87752652659542,-4.08687098161068,0.774293527686098,2.35611080387528 +NBP11-26_-6_,VPS8,-0.28854654070154,-1.99041904107381,0.769420410991092,1.65743629114243 +NBPB-61_-7_,VPS8,1.26333596710288,0.837320533081677,0.764287016349483,-0.293969042955047 +PSC07-61-G,VPS8,-0.146142637595884,-3.43938711563306,0.75978769446253,1.55465600535861 +PSC08-55B_-7_,VPS8,-1.74107120754049,-1.92013596477951,0.745940259035358,0.54981026165193 +KML12-10MG-C1HDAC,VPS8,-3.72374408311646,0.642804154627986,0.740077113141583,-0.738039205078295 +NBP13-29_-7_,VPS8,-1.35589507992386,-3.88251437439173,0.737240813274841,8.05724770951522 +PSC08-21C_-6_,VPS8,-0.864676161164735,-4.51241049329075,0.733120151204288,8.23072368453052 +BGC11-42_-7_,VPS8,0.845094168236814,-6.55541044858566,0.73080521806548,8.71017509378745 +EG12-31B-3_?_CONTROL,VPS8,-1.25062102264949,-3.55189037497772,0.712001960801391,3.10622832089492 +PSC08-78_-6_,VPS8,-1.84197359668576,-0.216998862112379,0.703781718363127,0.595498613864717 +PSC08-67_-6_,VPS8,-0.261257499874414,-4.03188275459269,0.698383991601289,2.55322889911939 +BakersFungus_-6_,VPS8,-6.47199294902385,-5.14162750550334,0.697930734990223,8.26557128019764 +PSC03-45PSC04-55_-6_,VPS8,-1.87189858548708,0.355647385899706,0.689078852301475,0.806593602955233 +PSC08-98_-6_,VPS8,-1.40748116844395,0.748575891322727,0.687478264555061,-0.353259747612713 +PSC08-7_-7__1,VPS8,-1.41493384099721,0.072700817138778,0.68601308620766,-1.14530862825408 +NBP13-34_-7_,VPS8,0.750599580479279,-0.163750226670696,0.679182614487408,1.71257856994675 +NBP13-78_-6_,VPS8,0.675220167248254,-1.45365098410745,0.675577643301718,3.53742178826769 +PSC03-25_-6__1,VPS8,-0.828402037507726,-2.48054373487782,0.672792426022625,1.6581390990726 +KML12-29_-7_,VPS8,-1.19293058032119,-0.175694812980679,0.667575515404378,0.114017931026017 +PSC07-61-D,VPS8,-2.16322748018248,-0.0924370235231872,0.666630892950189,-0.17989381177193 +KML12-56_-7_,VPS8,0.567016829339483,-1.26370049099003,0.665824112399186,-0.124109352280184 +KML12-10MG-C1CONTROL,VPS8,-4.72385774214234,0.201726198710177,0.662649694452273,-0.0851068509758296 +PSC08-66_-6_,VPS8,-2.91654418830091,0.0643207373502594,0.662389416505668,0.718932699229641 +CWR15-2_-6_,VPS8,-1.39899677412029,-1.2249937217568,0.659971507356832,1.24526712822355 +PSC07-9BT_-7_,VPS8,1.87208620236553,-3.96098554918899,0.655122715703564,8.11833115091074 +PSC07-73_-6__2,VPS8,0.182151229745923,-2.0967823302816,0.654288366771924,0.691222414994518 +CQ10-06B-1HDAC,VPS8,-3.53390727736255,-0.18194911871623,0.649359302480921,1.33133946177282 +PSC07-28_MeOH,H2O_,VPS8,-4.7158608869298,0.703098078843036,0.647223848536846,0.717262279151568 +PSC04-47_-6_,VPS8,0.485376281050823,-1.34387815103852,0.645532973415408,1.25213118750743 +BGC13-11_-6_,VPS8,-1.29410506079612,-6.045417021185,0.645345670594019,2.4245935154389 +EG12-31A-8HDAC,VPS8,-3.11741738252231,-3.21795492650365,0.639889563732006,1.19851139497658 +PSC04-10_-6_,VPS8,2.62052145042126,-5.6995023023386,0.639429820443143,8.65002436118002 +NBP13-78_-7_,VPS8,-0.945032114700042,1.11272392208558,0.638507090526519,0.225319132622557 +CQ10-24C-2HDAC,VPS8,-6.06724748700336,-0.0687212389539658,0.626166996852428,-0.742546065293024 +GlutamicAcid_1,VPS8,0.125401474914166,1.00177156060193,0.625512653229654,-1.47804041528374 +KML14-4_-6_,VPS8,-1.20450912846412,-4.41341905177404,0.623277181893859,7.88863986414419 +PSC07-29_-7_,VPS8,0.62087472873831,0.579440188233813,0.622685272544881,1.27300299055297 +KML12-47_-6_,VPS8,-0.555766525203296,0.131665889850295,0.619895190257441,1.54659447211942 +NBP11-23_-6_,VPS8,0.622663046473674,-4.02134229167388,0.614713956367077,3.58541550127852 +EG12-25B-4CONTROL,VPS8,-3.21429099930337,-0.197835256314151,0.613992313462161,0.542914144489868 +PSC04-42_-7_,VPS8,0.723695918078154,-4.69710554661713,0.598859704996455,8.43551145660922 +EG12-30A-6HDAC,VPS8,-1.7042660506193,-6.2449092254981,0.594666878635412,4.30622590079548 +NBP11-43_-6_,VPS8,1.34493605571426,0.686239117774631,0.592407082257878,0.976577432647739 +PSC07-56_-7_darker,VPS8,-1.7135829028028,-0.312326995616263,0.589872412908695,0.739326284331447 +Ala_2,VPS8,-0.331378166552182,-2.02739474958535,0.5818289324404,-0.152261022003257 +KML12-31_-6_,VPS8,3.65322335650478,0.819837923293204,0.57771718955182,-0.556580360202665 +PSC11-37-M13E-1.2_-6_,VPS8,-1.48443345162886,0.511117186522695,0.577069332606841,1.0090554736594 +PSC07-6_-6_,VPS8,-1.06554834389421,0.512453576637129,0.576502559134329,0.790016269522199 +EG12-30C-3DNMT,VPS8,-0.924537265178598,-4.83695877209263,0.575330092122519,8.59184715622732 +EG12-39B-1HDAC,VPS8,-5.22401015764284,-6.36167933861325,0.56669551313997,2.92808909351643 +EG12-40B-5HDAC,VPS8,-2.63679586473229,-0.424762407462804,0.56224727384067,-0.305616283973089 +PSC08-35_-7_,VPS8,-0.739209690456507,1.05383217949829,0.561691041219575,-0.57920674241577 +PSC08-37B_-7_,VPS8,-1.01592758419754,0.551023965545858,0.558574192538113,-0.240174218158172 +NBP13-79_-6_,VPS8,-0.235232823962006,-1.40810738011443,0.557983904858583,1.25614020558761 +EG12-25B-7ACONTROL,VPS8,0.0485543868901536,-6.98969383165329,0.556508185659764,9.00608806668302 +PSC07-44_-7_,VPS8,1.15588922515907,-2.77585628835827,0.552968081252044,3.251046716214 +PSC11-20A_-7__2,VPS8,-5.07966419002819,-0.0891411656811373,0.538434679647838,0.945703649710246 +CQ10-29C-2BHDAC,VPS8,-3.10846062146652,0.864175463763291,0.535142690665855,-1.00365987038 +SC95-1602_-6_,VPS8,0.712271116708852,-4.18881881852378,0.533816165056366,8.18262390768868 +PSC04-9_-7__2,VPS8,0.0829370206347525,-0.423700948203536,0.533757784956193,1.48070154976241 +KML12-2MG-F3HDAC,VPS8,-2.10439405197129,-2.81850403777255,0.526549464254263,1.64751369576237 +NBP13-35_-6_,VPS8,0.486106578225563,-0.273014853083334,0.518630041498836,1.98994947072619 +PSC10-50_-7__2,VPS8,-0.613471128418632,-3.47227659360797,0.515959151915915,8.35472014692867 +SC95-1621_-6_,VPS8,-4.83617380624567,-0.522284505181906,0.513810439895656,0.68697201780525 +PSC07-5_-6_,VPS8,0.242236884968637,-3.7182570092167,0.511361719027284,3.03153039535789 +EG12-24A-2ACONTROL,VPS8,-4.24921515316099,1.16727650877054,0.504697468425578,0.391482618151205 +KML12-2_-7_,VPS8,0.02113587509577,1.80016036985866,0.503810415236837,-0.891585528253245 +Val_2,VPS8,-4.44269737583699,-0.418884232722709,0.499054869576902,0.533312468932889 +SCXV93-627_-7__2,VPS8,0.845494719041802,-4.93377566702827,0.486478822997945,8.65198227903797 +EG10-29C-1ACONTROL,VPS8,-5.23891449125742,-6.28565130545347,0.480481889374607,2.35600500298448 +SCXII93-541_-6_,VPS8,-0.0163601308148119,-4.54647107955946,0.478504263481243,8.73284861779511 +PSC03-25_-7__1,VPS8,-2.54519616688346,-3.43428804839522,0.478070466903568,7.48160985193101 +PSC07-G2_-7_,VPS8,0.0180498132119436,-1.20348332354053,0.472398678004806,0.450217425559532 +EG12-31A-8CONTROL,VPS8,-2.9956863515181,0.0869020752001179,0.461463760908493,-0.184414995719464 +KML12-53_-7_,VPS8,-1.65170994133666,-0.917960605835929,0.458088255949873,0.112216210063897 +NBP13-3_-7_,VPS8,1.3148532741716,0.751003552475905,0.457972306584251,-0.318588811316854 +SCXVI93-653-2_-6__1,VPS8,-6.5833733830903,0.638827537377217,0.457318773796201,-0.167728870125363 +KML12-2MG-F2HDAC,VPS8,-2.70790071305966,0.230800336531392,0.456613347585776,0.407493482055926 +RT175_3,VPS8,-5.47240121983477,-0.114834807619721,0.449044205431387,0.863090497633401 +PSC07-57_-7_,VPS8,0.652679069548839,-4.42427842077827,0.441693177817923,8.46611786320102 +NBP13-9F_-6__1,VPS8,-1.06508508058945,-0.622216673962081,0.441135323527381,0.994230410206181 +PSC07-78_-7__1,VPS8,-0.965614964019557,1.52784689755354,0.4380014473167,-0.725426135219685 +SC95-1668_-7_,VPS8,0.604283226581556,1.02835932748203,0.424477534944655,0.0534571887263053 +PSC07-5_-7_,VPS8,0.918175471798869,-3.25844309233728,0.419911724610282,2.6667775626013 +EG10-29C-1AHDAC,VPS8,-5.85317230008854,-0.843363195426855,0.418153024092567,0.605330833311606 +Phe_2,VPS8,-0.867936199660815,-4.24287271118776,0.417074613908813,6.5664206395988 +PSC07-32_-7__4,VPS8,1.10356575902072,0.0355038260707286,0.414840764242466,2.02121954360463 +PSC08-53_-6_,VPS8,0.668325838241337,-6.89137047097241,0.413652080536163,8.70746415683347 +EG12-27E-2HDAC,VPS8,0.688007448249649,-4.81224686289195,0.410548205210293,8.76300075743224 +SCXVI93-638_-6_,VPS8,1.90725577683305,-1.22735410651875,0.407792177981289,1.51547335616936 +PSC11-19_-6_,VPS8,0.56550768337729,-1.31823731512492,0.407071345911096,1.54646555852418 +EG11-07C-2HDAC_2,VPS8,-3.34159838532741,0.0125463572254147,0.406352135510353,0.868343556119022 +PSC07-58B_-7_,VPS8,-1.32526103527839,-4.62913160543504,0.401838218598355,8.25220007562413 +SCXV93-624_-6__1,VPS8,-1.32753082317328,-3.84510225084721,0.398727045759965,7.78656212335033 +PSC04-49_-7_,VPS8,-1.03153895067243,1.32973939899747,0.394685845492427,0.221614742486169 +EG12-29D-3CONTROL,VPS8,-8.99639258147978,-0.380201906864224,0.392462010563366,-0.714771324260278 +PSC-77_-7_,VPS8,1.4211661336599,1.20215012280289,0.38894513564207,-0.845327374200623 +PSC07-32_-6_,VPS8,1.53338104857006,-2.76708602834489,0.375020670916059,3.81594506745542 +PSC07-50_-6_,VPS8,-0.0165047741610572,-3.70116766711795,0.372691142752209,7.78143149867606 +PSC07-69_-6_,VPS8,0.0140776843958994,-5.18713867062521,0.365993647926792,8.54062923917032 +PSC07-23_-6_,VPS8,-0.648883460949773,-4.45672551587122,0.35858342937843,8.42447740777173 +PSC07-61_-7_,VPS8,0.456715657164231,-4.4103013757929,0.334475691345834,2.42022997065327 +PSC08-2K_-6_,VPS8,1.01774168010229,-6.82272867739724,0.334379202013604,8.68551917505238 +EG10-02A-1BHDAC,VPS8,1.93795759143795,0.781298602599102,0.330402057689311,-0.678109730145776 +EG12-28D-1DNMT,VPS8,-4.37701210128001,-3.98196173402362,0.325297853097786,8.05927474159681 +SC95-1667_-6_,VPS8,0.342430218269747,-4.7250365568943,0.322389388940552,8.34938626166508 +NBP11-1_-7__2,VPS8,2.20101022918083,0.774085636843856,0.320546361611477,0.311901322851427 +NBP13-53_-6__2,VPS8,-2.34426531762195,1.0143386534182,0.311763399874321,-0.777595216343186 +PSC07-19_-6.1_,VPS8,0.396174830572216,-4.14097491021328,0.305305101292671,8.32078961120233 +CQ10-23B-4CONTROL,VPS8,-3.57954983929157,-2.01506276011223,0.303657485132231,1.13506612572294 +PSC08-53_-7_,VPS8,-8.7957398924995,0.227045651416719,0.301217602981313,-0.165027180335853 +KML14-32_-7__2,VPS8,-0.418798379738953,-3.76051435345104,0.296811607552208,7.59794823289732 +SCXVIII93-526_-6__1,VPS8,0.792952770646198,-4.86813721034788,0.295466432744052,8.58728845774149 +PSC11-20-M2E-1_-7_,VPS8,-0.432549612551317,-4.95883777897175,0.286465356465972,8.48160522877584 +PSC04-9_-7__1,VPS8,-0.748388979737284,-4.76232492506419,0.2834239154139,8.1205363236802 +NBP11-18_-6_,VPS8,1.35760195768384,0.309125475810095,0.282963361290312,0.358694911677952 +Gln_1,VPS8,-0.325040158107735,-1.98529926053033,0.279878135163108,0.365876139331085 +PSC07-81B_-7_,VPS8,1.08001822684921,-1.20433393013729,0.279443527750709,1.30748055645596 +EG12-25E-4BaDNMT,VPS8,2.48759219224045,0.463702864812224,0.27942974356039,-1.63997430713982 +EG10-29C-1ADNMT,VPS8,1.49807087672401,-0.0432491864873475,0.276566686147733,-0.444184757211568 +SCXV93-626_-7__1,VPS8,-1.14521041396433,1.21797972081905,0.27615234960345,-0.463963444926528 +PSC07-64_-6_,VPS8,0.252821136542637,-4.58762504180139,0.275372326598359,8.36316125908718 +CWR15-6_-6_,VPS8,0.419595926252268,0.0617076949017208,0.271165716046996,1.70222251112871 +CWR15-17_-6_,VPS8,0.676972071274076,-3.31741981562928,0.27054056247431,3.88917208204988 +NBP11-38_-7_,VPS8,-0.667139878826221,-3.19840902524327,0.266464496313613,8.46415789909553 +ScotiaCocktail_30mgml_,VPS8,1.39372941501074,-0.198362502191778,0.261647327214605,0.657091347008906 +PSC08-55_-6_,VPS8,-0.356739303757362,-4.70704223533552,0.261205422289685,8.09872400694818 +BGC11-10_-6_,VPS8,0.119663281185261,-1.48630059370235,0.256620151921922,1.00180834694256 +PSC04-21_-7__1,VPS8,-0.37568555913128,-4.60000241290997,0.255367412272373,8.09335669964138 +PSC07-90_-7_,VPS8,2.05293084484603,-4.08256952225054,0.254336841337373,8.42496543781088 +EG12-29D-3DNMT,VPS8,-5.50457981266004,-2.4110648128284,0.250404292922934,0.993809487193666 +SCXV93-626_-6__1,VPS8,-0.236248361861498,-1.46864562385553,0.247520964642162,1.35682104139173 +EG12-31C-2BHDAC,VPS8,-0.160699017985937,-1.83245658733396,0.2406013011022,0.51842158451702 +NBP13-53_-6__1,VPS8,0.209100409283973,-0.10845691435393,0.237957169065192,1.67840418972147 +KML14-48_-7__3,VPS8,0.135949312778632,-4.300295684572,0.235863593806207,8.07199694465775 +EG12-39B-1DNMT,VPS8,-4.52597957553089,-4.63384083511215,0.234057864874464,3.91917552769884 +NBP13-53_-7__1,VPS8,1.05830857551771,0.0662041336405929,0.231365893588703,0.965776314988967 +EG12-31A-8DNMT,VPS8,0.131738471866682,0.56961452269416,0.214823243536873,-1.50688466169927 +PSC11-17-M1E-2_-7_,VPS8,0.902394174679451,1.27027734907331,0.214479449613632,-0.0201153006617577 +KML12-102_-6_,VPS8,0.55371571043675,-5.0913537658335,0.214295390131142,8.32504751129926 +EG12-3B-5HDAC,VPS8,-5.27128931351746,0.466123215797255,0.210533117008874,-0.226738556787044 +PSC11-20A_-7__1,VPS8,0.589783489739684,-4.86126885048795,0.207087880263937,8.14850920968342 +PSC07-32_-7__1,VPS8,-0.519569274933103,-5.14901568685137,0.20698166091501,8.44823365967015 +EG12-40B-3DNMT,VPS8,-1.83187587273094,-0.279730841625938,0.201640692583895,0.577695919194337 +PSC07-51_-6_,VPS8,0.230151579367889,-3.04713354432851,0.201064189094686,3.14039008259368 +PSC08-81B_-7_,VPS8,1.72833701499063,-4.04733370874309,0.194583997975471,3.10563831951985 +PSC07-27_-7_,VPS8,-1.29308244245311,0.226517377546697,0.191596072015222,-0.245400334384469 +KML12-19MG-C4HDAC,VPS8,-3.69636704249126,-3.20226753410223,0.191572557808208,1.71635491978842 +PSC07-84_-6_,VPS8,-0.0558497873228986,-4.3650735973958,0.187635955220147,8.38486376053436 +SC95-1603_-7_,VPS8,2.07041144841082,0.778198520197748,0.180744670895545,-0.307398565583544 +KML12-2MG-F2CONTROL,VPS8,-1.24466131218752,-3.87863832906367,0.179412469442984,2.39816426026711 +PSC07-32_-7__2,VPS8,0.729169100920944,-6.18253856394962,0.179377603549826,3.80041370755841 +KML14-35_-6_,VPS8,-0.020259432211771,-6.59635930498263,0.175283699025185,9.00057521286042 +PSC10-48_-7__2,VPS8,1.22969981440392,-3.8367226279442,0.172709298774498,7.90916850158387 +NBP13-37_-7_,VPS8,-0.0314910386221077,1.04662926522425,0.170981409976317,0.220905717712319 +PSC08-59_-6_,VPS8,1.05713221040106,-1.06291118871629,0.164065800609977,0.553872823209496 +KML12-21_-7__2,VPS8,0.773833550151947,-5.25915810454858,0.162822790977125,8.57723865397246 +CQ10-23B-4HDAC,VPS8,-2.61932841056262,-0.277459777981043,0.1600035186396,0.0457411302807321 +PSC07-61-A,VPS8,1.25507207802034,0.414544154227596,0.159584317086967,-0.478690629538911 +PSC08-22_-7_,VPS8,-0.421099523883719,1.11702172984932,0.158043731110178,-0.825870629432518 +PSC07-14M_-7_,VPS8,0.45285175798488,-3.95907873751631,0.153742252896032,7.33268770716329 +PSC03-32_-6__1,VPS8,0.25165185186951,-4.09926149166533,0.15311953182752,8.10750957077653 +KML12-14MG-C1HDAC,VPS8,-0.561100122159501,-2.95219338509465,0.151217313563547,1.30852065418956 +PSC03-58_-6__1,VPS8,0.285965704162756,-4.34288289665631,0.14349978865455,8.5223688671327 +KML12-47_-7_,VPS8,1.61089268679325,-3.54867047435157,0.141317021575857,2.66514738539158 +SC95-1666_-6_,VPS8,-0.812728970025006,0.0764863420253217,0.138593427735837,1.69570589478493 +PSC03-32_-6__2,VPS8,0.403127826111177,-4.03747331990474,0.135016024930784,7.65829150802647 +PSC07-83,VPS8,0.00924174147012767,-3.65338395347329,0.134987645715422,8.12412953436672 +PSC03-36_-6_,VPS8,1.91363727943056,-3.94273959793601,0.132863258736901,8.4406195725605 +PSC08-7_-6__1,VPS8,-0.499168494161307,-4.72024142925379,0.130273452626445,8.33189937119893 +NBP13-37_-6_,VPS8,0.142837572833953,-4.95788722866984,0.12322405553054,8.16202944928635 +Gln_3,VPS8,-2.52362913591434,-0.753370913563636,0.122524305163187,0.381731566523545 +Val_1,VPS8,-0.887019006445511,-1.96242311730565,0.120897770705587,0.563482264614341 +NBP11-25_-6_,VPS8,0.883421620515309,-4.28585833092378,0.120006663343221,8.38849926033679 +GlutamicAcid_3,VPS8,-5.63605859141069,1.09349623809469,0.11964178771714,-1.36755668958086 +BGC11-76_-6_,VPS8,1.0531084954965,-1.08559406937057,0.116067628250987,0.130585033221333 +PSC08-85_-6_,VPS8,0.441848748751129,-4.29344125972011,0.114302441055475,8.21802671852262 +Pro_3,VPS8,-4.64786536480066,-0.765964962624958,0.113345656080416,-0.102564752935117 +EG12-25B-4HDAC,VPS8,-1.55089858646524,-2.15802771856957,0.110732335762945,0.565638746585065 +PSC08-96_-6_,VPS8,-0.334001976623188,-1.76625349863689,0.109645817231944,0.400941660361597 +Tryptophanol_3,VPS8,-4.00119530850803,0.797605988636514,0.107620352089827,-1.01138820631083 +PSC08-33B_-7_,VPS8,1.389560045268,-0.290166677763139,0.10496730087085,8.33913558459553 +EG12-28D-1HDAC,VPS8,-2.53501145462251,-2.49319112532234,0.104876487381691,0.640692641093627 +PSC08-58_-7_,VPS8,1.18512943392257,-3.5446712412681,0.101692339418083,3.27445578811252 +PSC07-16_-7_,VPS8,-0.522867750122591,-3.26249383926192,0.0988836079319774,2.55553297385346 +Gln_4,VPS8,-3.90959459916727,-0.357512287148684,0.0945351013038038,0.125364373655154 +KML12-63_-7_,VPS8,1.04880763180262,-2.68974958930811,0.0904371426055424,2.56087402098346 +NBP13-13_-7_,VPS8,2.10205091603647,0.593132475837895,0.0853053696333807,-0.432747938649257 +PSC03-25_-7__2,VPS8,1.06336401219268,0.29149437823113,0.0844839940573342,-0.30056000629291 +EG12-24A-2AHDAC,VPS8,-2.67468635249626,0.847025695068276,0.081011999766484,-0.068689124851195 +EG12-32B-3DNMT,VPS8,0.583323090771494,-2.63952222351745,0.072276066443358,0.763918087310158 +KML12-54_-7_,VPS8,0.187053931139191,-3.96181810880814,0.0698241022360864,8.1143590433874 +KML12-18MG-C1bHDAC,VPS8,-3.13510837640891,-1.10902738447372,0.0689913749738954,1.13692275432748 +BGC11-11_-7_,VPS8,-0.720875387701313,-4.24152855750735,0.0670405066264439,7.90836125692793 +PSC07-24B_-6_,VPS8,0.571342980331645,-4.6393789762997,0.0598256992467177,8.24541983438849 +Uracil_4,VPS8,-2.45274681581195,0.529933673555301,0.0572699481946943,0.490350819672969 +NBP13-9F_-6__2,VPS8,1.77733166118152,0.546932441589521,0.0545236509823851,0.723155131035812 +CWR15-2_-7_,VPS8,0.804176285121075,1.36025946523395,0.0527892755064091,-0.352000964332155 +SCXIV93-551_-7__1,VPS8,-0.499128034484043,-5.08296534788443,0.0485542857396843,8.41552234643853 +KML12-14MG-C2DNMT,VPS8,-2.2207914860193,-5.32569548346833,0.0471718125341958,8.63851353666488 +EG12-40B-3CONTROL,VPS8,-4.23321132781659,0.546289375235312,0.0464947655391325,-0.818719676350231 +PSC04-21_-6__1,VPS8,0.384555822752016,-6.82821781412625,0.0429854728509488,9.07053804348056 +CQ10-23B-4DNMT,VPS8,-0.193960918670136,0.550575189754438,0.0423116691947841,-1.09850173881852 +SCXVIII93-728_-6_,VPS8,-0.954644322527621,-4.29633356994848,0.0379128908136857,3.06808422043509 +EG12-36A-1CONTROL,VPS8,-1.78350430557001,-4.44273750563362,0.0367209637684846,2.35291524729473 +PSC08-7_-7__2,VPS8,-0.234842388076337,1.70165985182159,0.0364614966566038,-0.776588462551746 +SCXIV93-551_-6__1,VPS8,1.37517359552248,0.836703966087001,0.0344976549535582,-0.293712238888328 +KML12-14MG-C2CONTROL,VPS8,-5.86373025287231,-0.261083859117249,0.0323011036845455,0.678931288082764 +NBP13-57A_-6_,VPS8,1.59819745155764,-3.19966305825699,0.0280936822984589,3.01892926194328 +KML12-19MG-C6CONTROL,VPS8,-2.45376943415497,0.334875885773198,0.0276088031331306,-0.00677035626506162 +KML12-50_-6_,VPS8,0.410848544026358,-5.67345422797857,0.0222418880908298,3.04039132930409 +EG10-02A-1BCONTROL,VPS8,2.1526194436732,0.848638272473027,0.0213369965381457,-0.762129336367572 +PSC07-36_-7_,VPS8,0.467561885148559,1.10434372807568,0.0206404895096913,0.195700381511791 +NBP13-80_-6_,VPS8,0.115480762047405,-4.14161968988815,0.0134727105439923,8.38726128057292 +PSC07-55C-7.1_-7_,VPS8,0.745887039569176,-5.58239523267273,0.0106550598759162,2.53164849044231 +KML12-102_-7_,VPS8,-1.9332040999795,-3.71432539867626,0.0103866735820651,7.95058011832953 +KML12-11MG-C2DNMT,VPS8,-0.75303273919602,-4.79127593224068,0.00576896982531728,8.48976020731951 +PSC07-54_-7_,VPS8,0.851624360148301,-3.55511473023757,0.00216480947435181,2.06235423484939 +EG12-25B-7AHDAC,VPS8,0.692163668597268,-5.81571931630851,-0.00583812925771302,3.09173023790636 +SCX93-629_-6__2,VPS8,0.62918615794164,-5.29836527763577,-0.00687437603578553,8.33811621227757 +KML14-4_-7_,VPS8,-0.690338446281281,-0.83717765096044,-0.0108539528642508,1.51813215286151 +BGC11-29_-6_,VPS8,0.949954525311104,-4.0307704703082,-0.0166295286077654,8.00734234310585 +Uracil_3,VPS8,-3.62203553490155,0.679667847717068,-0.0167462888081118,0.106175687315257 +PSC07-94_-7_,VPS8,0.905622856925648,0.128529941936468,-0.0181522762206146,1.76717415961568 +PSC87-27_-6_,VPS8,-0.196176086000712,-3.79217411710256,-0.0230399879406626,2.52082588718433 +PSC04-37_-7__2,VPS8,0.760783281248301,-3.82632539863253,-0.0257765551362777,7.72070364616029 +RT175_1,VPS8,0.0805236008855637,-4.23042966278724,-0.0271347033000276,3.69869030863084 +KML12-41_-6_,VPS8,1.37972632070736,0.49117413404576,-0.0279690522316684,-0.292937393151826 +EG12-2C-9_?_HDAC,VPS8,-2.2519484719935,-1.34002241575361,-0.037125808776876,1.53017879224233 +CQ10-28B-2CONTROL,VPS8,-3.69674736345761,-3.92166354438126,-0.0383063841359316,2.6370683574563 +PSC11-12_-6__2,VPS8,-0.0255626844100189,-4.19688764157148,-0.0419535187273008,2.75084730188791 +KML12-60_-6_,VPS8,0.197976021018403,1.53577614556584,-0.0443560220163702,-0.313672360552153 +EG12-29D-3HDAC,VPS8,-4.01667720401564,-2.9355616103457,-0.0489956183106827,1.25704490994208 +CQ10-28B-3HDAC,VPS8,-1.61566542634816,0.263656686819209,-0.0556979781444457,-0.348688089559104 +PSC07-78_-7__2,VPS8,-0.023098690064238,-3.86681105159586,-0.0560296095468185,8.18936356501471 +PSC04-51_-7__2,VPS8,0.202499412937258,1.36496572864293,-0.0575434379776952,-0.91780784948293 +EG12-40A-3HDAC,VPS8,-1.45026626566574,-3.70336277005927,-0.0591829457908895,1.96681254975097 +KML12-29_-6_,VPS8,2.35556012740314,0.695206638106614,-0.0595486322516966,-1.04631185417832 +Asn_4,VPS8,-3.96126363002576,0.808365299714233,-0.0607551543219405,-1.32502236501629 +EG12-24A-4CONTROL,VPS8,-3.44722747626983,-4.53133263509736,-0.0659428748901025,8.64436580463952 +Phe_3,VPS8,-3.58926016183653,-5.52001139991718,-0.0660588242557234,4.03078434850943 +EG12--44E-2DNMT,VPS8,-3.62990696511456,-6.53255143507991,-0.0663855906497479,3.96156346746299 +PSC08-36_-7_,VPS8,1.56756542989603,-0.319602097800761,-0.0700473202661609,0.832892317426546 +PSC11-37-M15C-1-0_-6_,VPS8,0.379205030432972,-3.75399219509803,-0.0708524791477166,1.63944841106936 +NBP13-53_-6__3,VPS8,1.12886216074227,0.0799349138488254,-0.0721181921528579,-0.176293439219006 +PSC11-37-M7B_-6_,VPS8,2.93535438313511,-3.17165586232116,-0.0727538865769642,1.87553388036833 +SC95-1602_-7_,VPS8,1.21090022536011,0.419619010021125,-0.0766499474287954,-0.166502144722988 +PSC07-20_-6_,VPS8,0.807829793978615,-4.51520377707267,-0.0789421771953147,7.88874763318149 +PSC08-32_-6_,VPS8,1.19615469597882,-3.86376602389836,-0.0810162924209083,7.60949350257944 +PSC11-1_-7_,VPS8,1.67863938190715,0.600265829293161,-0.0842020620539666,-0.789386035730536 +SC95-1609_-6_,VPS8,0.164395500375693,-4.08693917177293,-0.0849066774296666,1.38265252934059 +PSC07-58_-7__2,VPS8,1.27722779729376,-0.0264340864278283,-0.0955918574307956,0.488059022424163 +PSC07-79_-7__1,VPS8,-0.176109097566399,0.328835745120089,-0.0970513599351226,1.0912747230841 +KML14-23a_-7_,VPS8,-0.513926161445779,-5.03158480306853,-0.0977275960954617,8.38238234434652 +EG12-31B-3DNMT,VPS8,2.39837253490708,-1.56641432552822,-0.100404972356177,1.54177453603053 +PSC08-58_-6_,VPS8,1.44837627811635,-4.41882092337078,-0.100538760085742,8.20910507923263 +EG12-27D-5CONTROL,VPS8,2.07668472137164,0.780698597704134,-0.102415031638527,-0.452904841118522 +KML12-19_-7_,VPS8,0.339806408198742,-1.49335581973554,-0.10722652489446,0.594928392882573 +CQ10-29B-2DNMT,VPS8,1.12253224423327,0.353062213467229,-0.110232289218651,-0.653844303650265 +EG12-28D-1CONTROL,VPS8,-2.86920737738616,-0.390061838817068,-0.110311751021665,0.298067325291816 +KML12-63_-6_,VPS8,1.37360982899598,0.3578948057195,-0.114610796731633,0.470204830523938 +EG12-27D-5HDAC,VPS8,1.58395564515837,0.576520004501709,-0.116177329419613,-0.500592299080333 +PSC11-37-M13E_-7_,VPS8,-0.543254370007342,-5.0304855330457,-0.116332198852018,3.76296840063472 +SC95-1626_-6_,VPS8,1.36266953226199,-0.356694576308578,-0.118062520154369,0.852371570917629 +PSC03-25_-6__2,VPS8,-0.308907873287997,-4.01168373200922,-0.119950954228025,3.35836967154457 +SCXIV93-585_-7_,VPS8,2.25851354550174,0.72452166881256,-0.141225635732775,-0.251589210080018 +EG12-31C-3DNMT,VPS8,-1.64363520124537,-4.52520922357252,-0.141344017602572,2.3046517706494 +BGC11-6_-6_,VPS8,1.19796526653668,0.289649474544948,-0.141451047786222,0.367227422893412 +CWR15-13_-7_,VPS8,1.72655982366652,0.462460593112687,-0.147729341059005,0.254757813949489 +CQ10-29C-2BCONTROL,VPS8,-1.93818064028379,-1.13447316602356,-0.147748801092395,1.09513769740512 +NBP11-43_-7_,VPS8,1.21276946245001,0.727817983540119,-0.153957362578862,0.209789136890578 +SC531_-7__2,VPS8,1.31793427859576,-0.265378582903806,-0.158981294532647,0.77955858040949 +NBP13-79_-7_,VPS8,-0.0628149207650473,-3.35646171038352,-0.162619509942046,1.27664633430431 +Qercetin_2,VPS8,0.664820007205839,-2.09282463803079,-0.164359561261095,-0.370106922781293 +KML12-19MG-C6DNMT,VPS8,-2.98839754065779,-6.40657519666326,-0.170962188423728,8.69705523662055 +EG12-33D-4AHDAC,VPS8,-1.91842620285639,-1.93888658182609,-0.171434094233461,0.383245107623277 +KML12-18MG-C1bCONTROL,VPS8,-4.21219859442607,-4.40897321310531,-0.171818429892934,8.42129003618136 +KML12-19MG-C4CONTROL,VPS8,-1.23072396485972,0.279676120764444,-0.178712957556434,0.649827509270465 +EG10-02A-1BDNMT,VPS8,1.72328056682373,0.117053206387914,-0.181205463499935,0.958198378252586 +KML12-8MG-C2HDAC,VPS8,2.74274912396396,0.413736380647315,-0.185412074051297,-1.42562442028998 +SCX93-629_-6__1,VPS8,0.519083238185013,-6.06358008695441,-0.187791873968076,8.56675879717803 +EG12-33D-4ADNMT,VPS8,-0.974407863382401,-7.2276890342625,-0.192609043067084,8.90230273231404 +EG11-07C-2HDAC_1,VPS8,-2.42640453143296,-1.47860424307836,-0.192733911614676,1.10318865836532 +PSC07-74_-7_,VPS8,-0.391744005039998,-4.49515106858585,-0.19315716734093,3.16159705109406 +EG12-25B-7BCONTROL,VPS8,-0.131935221922298,-6.85786739924631,-0.19382853849292,8.70476856673606 +SC95-1665#2_-7_,VPS8,-0.54230862505115,-0.160677328957139,-0.196603214920593,1.35848054814957 +PSC04-21_-6__2,VPS8,-0.297247394298594,-3.41503831619083,-0.198751116106128,2.64663225553478 +CQ10-29B-2HDAC,VPS8,-1.42369639560209,0.459586212152881,-0.205016436023318,-1.37576691680821 +NBP13-43_-7_,VPS8,0.779929812024707,-4.18525636449943,-0.206717567275585,1.47093924377326 +Ser_1,VPS8,-0.792595223123199,-1.87844847448421,-0.212426654571679,0.208445697277168 +KML12-10MG-C1DNMT,VPS8,-2.22979679868782,0.576018458433976,-0.221199886292137,-1.01708359530712 +PSC08-60_-7_,VPS8,1.10487260659657,-0.584196832091947,-0.225595421334339,0.0533368011624909 +KML12-34_-6_,VPS8,1.49166408682822,0.523094097482455,-0.227779810082482,0.54435061026546 +EG12-2C-9_?_CONTROL,VPS8,-1.64594443732559,-0.635294564777655,-0.231737494373385,0.498423266232383 +PSC04-51_-6__1,VPS8,0.330999347948857,-1.97706378500547,-0.237993895108602,0.132708277988001 +KML12-30_-7_,VPS8,1.35977464235327,1.36272082169343,-0.240463697679815,-0.386681449783217 +EG12-24E-3CONTROL,VPS8,-2.34068767065929,0.229569943855095,-0.249780999500499,0.472322355690283 +PSC07-41-7.2_-7_,VPS8,0.179476845078331,-3.58218074202444,-0.250627510953009,2.61928756752744 +EG12-31C-2BDNMT,VPS8,-0.0137434011873382,-2.60414946206629,-0.265172264243358,1.54143519997955 +PSC07-69B_-7_,VPS8,0.510140638016265,-3.6619512420992,-0.265793363642422,7.77101234722542 +EG12-25A-3HDAC,VPS8,1.28796579564139,0.688116117667836,-0.268200731939839,0.558759262343559 +His_1,VPS8,-1.11461177153646,0.885935664131724,-0.26966428861779,-2.40134925502044 +KML12-51_-6_,VPS8,1.1057394551821,0.1829322132889,-0.276605033860593,-0.162906546747666 +EG12-32D-3ACONTROL,VPS8,-2.37341853807932,-6.48335069102844,-0.280775967684071,2.52770154187096 +EG12-10E-1DNMT,VPS8,0.325615176396067,-1.21280904211173,-0.282481963944685,0.931184159223536 +PSC04-57_-6_,VPS8,1.79473134539177,0.93225117619255,-0.283328475397196,0.865275548968684 +EG12-40B-5DNMT,VPS8,-0.926477306703721,-1.71598699066249,-0.284530132459092,0.364241606686076 +SC508_-7_,VPS8,1.46679554619382,0.112043342558068,-0.288545386015443,0.383521692082918 +PSC08-36_-6_,VPS8,1.70338654350975,-3.33189212450664,-0.290250571441331,7.48714120008255 +EG12-25B-5CONTROL,VPS8,3.17760568930122,0.761687249001851,-0.292507124479969,-1.47144945194588 +EG12-31C-3CONTROL,VPS8,-1.24745808737886,-1.7010603126339,-0.304285309689892,0.62555628507358 +PSC03-16_-7__1,VPS8,0.981314821163583,-1.1172939282132,-0.305353989856951,-0.161162120716766 +SCXV93-626_-6__2,VPS8,0.91840406897545,-2.11084218227784,-0.308332185800505,0.960239169136047 +EG12-32A-3ADNMT,VPS8,0.532362104265236,-1.42483327327828,-0.30927437575052,0.879401136803256 +PSC08-16_-6_,VPS8,1.69879133566374,1.11461954006328,-0.313595313998054,-0.262199344634724 +PSC03-39_-6_,VPS8,-1.5396669800549,-1.24845890462422,-0.320832824750072,0.675666500126986 +KML14-8_-7_,VPS8,-0.260280398668332,-5.12530503875645,-0.321959074182576,3.79066606634333 +NBP13-45_-6_,VPS8,1.3910408694561,-4.23692463645244,-0.325946759358292,7.98480838307346 +EG12-25A-3DNMT,VPS8,-0.97207030552809,-5.94868407896167,-0.330191479141711,3.22766587263877 +PSC07-55C-7.4_-7_,VPS8,1.84902823228899,0.869049289932769,-0.331969639692816,-0.694663531732059 +SCX93-624_-7_,VPS8,-1.12685891584629,0.6100523169004,-0.334088350828265,-1.37670580338945 +PSC08-69_-6_,VPS8,2.1246243814777,0.348363374447777,-0.334115919208902,0.0826755574010436 +EG12-25E-4BDNMT,VPS8,3.34910718080799,0.467875600167822,-0.336040840845165,-0.193375172671532 +KML12-54_-6_,VPS8,1.17498619283081,-4.25192567259765,-0.339425264985758,8.53185663490975 +PSC07-58_-6_,VPS8,1.4852664003598,0.648758743469496,-0.343948101079724,0.0796307410562018 +PSC08-57_-7_,VPS8,0.0611019443037158,0.679833811378288,-0.344642175604004,-1.10198342901392 +SCXVI93-653-2_-6__2,VPS8,0.324519730633965,-2.11203590989202,-0.344915426906202,0.776204439644311 +PSC08-14_-6_,VPS8,0.645152558084576,-1.50695433158886,-0.346750345888033,1.41833465296423 +SCXIII93-532_-7_,VPS8,0.0041660749565218,-2.25962908280897,-0.351250478609711,0.979419592384716 +PSC07-58_-7__1,VPS8,2.6597835212447,-4.13271555893289,-0.356657935388244,3.03991318946141 +Arg_2,VPS8,-0.181755245529513,1.21204774781024,-0.359529101148146,-1.45774505006403 +PSC08-33B_-6_,VPS8,1.3124428888982,-0.0103751318860494,-0.36135915512163,0.0499826603973105 +PSC07-94_-6_,VPS8,-0.52378618479664,0.0564481431410939,-0.370635915206082,1.09536892337754 +PSC11-20-M2E-1_-6_,VPS8,0.16838179007879,-4.30414448810157,-0.371711082050937,7.90849426301826 +PSC07-93_-7_,VPS8,2.48993581904636,0.770833754232066,-0.37261273026472,-1.00818071328628 +KML14-23b_-6_,VPS8,-0.326168983103589,-6.91321473827454,-0.372980849229701,8.92512998782767 +PSC07-9BT_-6_,VPS8,-0.00875775745565782,-3.84458140136671,-0.374851444939415,7.81680600308565 +PSC07-133_-6_,VPS8,0.92084884497453,-3.49920108510836,-0.387061805057565,7.83470487139058 +SCXIV93-551_-6__2,VPS8,-0.386438729857887,-3.74653685506783,-0.389741613822455,7.84409032679046 +PSC04-37_-6__2,VPS8,0.560160937025967,-4.03926636708562,-0.391970598480455,3.12837963263666 +EG12-23A-1DNMT,VPS8,0.0249957283073866,-2.03280956394641,-0.400500579783524,1.93442079217739 +Fk506_4,VPS8,2.67018165830325,-3.14831221099919,-0.406894822421929,2.89120555964451 +PSC07-69G_-7_,VPS8,1.22398791946524,-4.2486745895355,-0.407366728231662,8.44244312016309 +PSC07-55C_-7_,VPS8,1.74311996957339,-4.13024609624329,-0.41936464965196,7.95456586750316 +SCXIX93-760_-7_,VPS8,2.46211169898732,-4.64979699390204,-0.419633846780537,8.37852755501568 +NBP13-578-2_-6_,VPS8,-2.49659600254596,-0.386831544045589,-0.426525131105137,-0.287317715314649 +PSC07-133_-7__1,VPS8,-0.1414017749117,-5.81744257422786,-0.432042050571496,3.05377371013804 +PSC07-56_-7_,VPS8,-0.954566437648872,1.36614220882914,-0.432129620721757,-0.349292073625716 +KML12-19MG-C4DNMT,VPS8,0.742077760954129,0.615449962306185,-0.438278991273323,-1.5102974615607 +EG12-25E-4BaHDAC,VPS8,2.60435679785969,0.886770622399802,-0.445129733861694,-1.44425004751414 +CWR15-17_-7__2,VPS8,1.17186169425359,0.666818056991967,-0.445971380305855,-0.434731434601497 +CWR15-3_-7_,VPS8,2.2487303955377,0.928755202497466,-0.448912277852076,0.376222727094977 +EG12-40A-4CONTROL,VPS8,-3.61520594137827,-0.358426971938119,-0.452382650473477,-0.343059885690494 +EG12-30A-6DNMT,VPS8,0.933064633034472,-4.1310971562379,-0.457064410173471,3.18884420130182 +EG12-10E-1CONTROL,VPS8,0.360408475864968,-4.65082109928325,-0.457646589505752,2.86153565234515 +EG12-32B-2CONTROL,VPS8,-1.02997923011365,-0.419380181942955,-0.461519946985293,0.330951887482131 +His_2,VPS8,0.215755014703064,0.97807496522409,-0.463439192778484,-2.28424932892666 +SCXIV93-583_-7_,VPS8,2.12558732179674,1.37377585191699,-0.468628535016094,-0.880340715918774 +KML12-2MG-F3CONTROL,VPS8,0.454583432172066,-2.48613319372477,-0.469659105951094,0.739820453113219 +EG12-31D-4ADNMT,VPS8,-1.8017809532851,-3.53675958334789,-0.473577059340488,2.52779097278141 +KML12-25_-7_,VPS8,1.7754998492931,-1.16667993933866,-0.474470599207029,0.23920906094836 +CC10-28A-1HDAC,VPS8,1.27167875255608,-3.0482442330014,-0.47667201548439,3.16800794464809 +EG12-24A-4DNMT,VPS8,-0.466934269279785,-5.67404612664343,-0.482955984600244,8.79187160506583 +SCXIV93-585_-6_,VPS8,2.61399024701784,0.462252024877734,-0.491572725218851,-1.5842757900449 +EG12-23A-1HDAC,VPS8,0.642521667570043,-3.74504009465199,-0.500460284635482,3.07458821825235 +PSC11-17-M1E-2_-6_,VPS8,0.203007181887009,-1.38202938324122,-0.502273311079746,1.10022773816977 +NBP13-29_-6_,VPS8,1.00527200756747,0.437536003707478,-0.507235619594461,0.332206578267602 +PSC03-23_-6__2,VPS8,-0.707206085735416,-6.54952439257054,-0.514606918076041,8.8148768060147 +CQ10-24B-2HDAC,VPS8,-2.84423971054245,-6.08579545602371,-0.517083207325051,2.5800439500542 +PSC11-37-M35D-1_-6_,VPS8,1.28660129302544,0.150281575701604,-0.518488383902828,1.22078718677722 +PSC07-33_-7__2,VPS8,-0.0337274472832381,-5.19296875467779,-0.520529254904713,3.81706913943936 +EG10-65D-1DNMT,VPS8,-2.40823105589491,0.365482874477806,-0.525030198461114,0.210880809955076 +His_3,VPS8,-0.356092960412962,1.54543961674973,-0.525266962200705,-1.88947872678831 +Tryptophanol_4,VPS8,-1.37621696432498,0.495600326637591,-0.525926170831827,-0.898818672278533 +PSC11-12_-7__2,VPS8,0.503767227354211,1.13277411421442,-0.527212154705084,-0.594490165318748 +EG12-30A-2DNMT,VPS8,1.21873119589584,-0.552062817794188,-0.534429394588985,-0.481241618143237 +KML12-41_-7_,VPS8,1.84027478111148,0.831982054349335,-0.539025205808168,-0.698659512143408 +KML12-53_-6_,VPS8,2.20213703119282,0.644034889968415,-0.546587050450035,-0.686351674210047 +KML12-12MG-C4DNMT,VPS8,-1.1960065272857,-1.15487081958216,-0.549872552754223,1.02885496489105 +KML12-16_-6_,VPS8,1.11597878800736,-4.03740410523777,-0.55161260407327,8.23423777364536 +CQ10-29C-2BDNMT,VPS8,-2.2411032555011,0.0694844573753299,-0.55224181181958,-0.0348285025825927 +EG12-31B-3HDAC,VPS8,1.82396750818755,-4.26943900444894,-0.553321032838057,2.97447282885278 +PSC04-9_-6__1,VPS8,0.156857862500172,-1.23404462369421,-0.553368061252086,1.1023022921377 +PSC08-7_-6__3,VPS8,-0.0570119915525046,1.49173660866914,-0.553698070985009,0.212125610544086 +KML14-48_-7__2,VPS8,1.43208518906332,0.623724844206208,-0.556730592855112,-0.556378122737108 +KML12-43_-7__1,VPS8,3.05440597201208,0.528838290546974,-0.559469592554901,-0.137241827973605 +CQ10-28B-3DNMT,VPS8,-3.58048445783653,0.0309187515430705,-0.560248804725267,0.122231568665937 +EG12-24A-4HDAC,VPS8,1.57211107463739,-4.61341954121613,-0.567146575727665,8.72748335673585 +KML12-30_-6_,VPS8,2.13437314071606,0.764620682413722,-0.569939090519279,-0.780092320428865 +EG12-40B-3HDAC,VPS8,-3.03683080882656,-0.452480737535444,-0.571864822990267,0.38876827078465 +KML12-55_-7__2,VPS8,-0.415992501120232,1.00652671076039,-0.57775229392578,-0.276540811585142 +PSC08-25_-6_,VPS8,-0.0850070537480011,-5.48597411829711,-0.582079718851112,8.50377461570421 +PSC10-14_-7_,VPS8,1.22203978600466,1.02843688379722,-0.582181073191691,-0.484296324684541 +PSC07-340_-6_,VPS8,-0.322352624045038,-3.78063033360553,-0.589403178083939,2.94269051200594 +BGC11-45_-6_,VPS8,-0.285456432849994,1.24935404873637,-0.592892199904007,-0.145376685083097 +EG12-24E-3DNMT,VPS8,-0.298824310220218,-6.39327788658189,-0.60127704179137,8.70171829373111 +PSC08-77_-6__1,VPS8,1.82605320455085,0.594071946666204,-0.60684504384538,-0.496184340830209 +KML12-12MG-C4CONTROL,VPS8,-2.52833358488898,-0.11058474439169,-0.623960143212796,0.890066520041638 +KML12-19MG-C3HDAC,VPS8,0.02961217748396,-2.30555502150049,-0.633037437954989,1.68366952569235 +KML12-12MG-C1DNMT,VPS8,1.67229935047884,0.766055188691259,-0.635124526536178,-1.4182132527284 +EG10-64C-1DNMT,VPS8,3.02527095840948,0.617817543014902,-0.639614118406436,-2.0398901987265 +PSC08-42E_-7_,VPS8,1.20810142718491,-4.64472647852084,-0.646673245519035,8.0937850474605 +KML14-23b_-7_,VPS8,0.433207573178049,-2.85196344118385,-0.653501284735114,0.858734299553331 +PSC11-18-M1D-2_-7_,VPS8,0.322661619955312,-1.24597196257622,-0.653751832665023,0.896828686090645 +EG10-64C-1CONTROL,VPS8,0.708601423980404,0.595865336511223,-0.653947243833658,-1.92675760557846 +PSC08-46_-7_,VPS8,0.939395561035389,1.20401056059638,-0.658526027523626,-0.660327156909575 +CQ10-27B-1CONTROL,VPS8,-2.26192077094878,0.806928394787774,-0.660797175587303,-0.939340171342736 +KML12-19_-6_,VPS8,1.51239056800204,0.448320329266826,-0.672803205354848,0.131552908309445 +EG10-64C-1HDAC,VPS8,2.12430373853533,1.01929631807862,-0.673284841181277,-2.76491287691296 +KML12-18MG-C2HDAC,VPS8,3.67817686246146,0.325690773717455,-0.673914048927586,-0.510255703104877 +EG12-32A-3ACONTROL,VPS8,0.742091921841187,-4.09269501541793,-0.679690435505825,2.90292441932657 +KML12-8MG-C5HDAC,VPS8,1.01395667729362,-5.65248166247934,-0.688926653854047,2.82110888464941 +Arg_4,VPS8,-1.32042913832035,1.05735111169021,-0.701389994406281,-1.87548648608533 +His_4,VPS8,-3.02398688427699,1.22270391698426,-0.704137913288039,-2.18978465211868 +KML12-18MG-C2CONTROL,VPS8,3.05205121879492,0.484687273586022,-0.714824714958617,-0.104306109594701 +KML12-19MG-C6HDAC,VPS8,-0.171323729237208,-1.27322141389504,-0.717472901169248,0.485805762837428 +CQ10-27B-2BHDAC,VPS8,-0.0724898410923911,-3.67047866397676,-0.718562663039145,2.66367442820146 +EG12-30A-4HDAC,VPS8,1.78686092667069,-0.283698778052034,-0.722816302004537,2.13467953635964 +CQ10-29B-1DNMT,VPS8,-1.27694611166564,-6.44920558442819,-0.725029880802767,8.78299865657457 +2PE_1,VPS8,1.68600911212201,0.913688831724442,-0.726543709233644,-0.378188158312343 +KML12-8MG-C2CONTROL,VPS8,2.07284408650672,0.334703982600359,-0.72657614262263,-0.8063333989277 +PSC03-110_-6_,VPS8,0.146426346207867,-1.90478933049527,-0.735363969368131,2.23424653141754 +PSC03-23_-6__1,VPS8,0.24661967950898,-3.50506120938317,-0.739622473341871,2.63209230257263 +PSC07-23_-7_,VPS8,0.908303310544829,-0.383784692293735,-0.744265312975081,5.57282376167116 +KML14-38_-6_,VPS8,1.39137668477744,0.407652150542569,-0.746144827866766,-0.453892837640813 +KML12-49_2,VPS8,2.00489307002259,0.906542342810784,-0.750683880655226,-0.619322061342573 +CQ10-26C-1HDAC,VPS8,0.93899197575462,-3.38986004110663,-0.752030677132831,2.76383892754208 +BGC11-45_-7_,VPS8,0.34475968418861,-1.07869098621194,-0.75433020441187,1.40273337960948 +EG12-31C-3HDAC,VPS8,-1.25404896880625,-0.540774547518182,-0.756199178452136,0.501317001300258 +EG12-3B-5CONTROL,VPS8,-2.34925298433748,-3.47846122081569,-0.75661189332697,2.04710184670082 +KML14-13_-7_,VPS8,0.616063061618901,2.19559580607071,-0.756748924395432,-3.66158332508611 +KML12-14MG-C1CONTROL,VPS8,-0.230448467124742,-6.15058844955699,-0.7673992385034,8.74098995468849 +EG12-27E-2DNMT,VPS8,0.55292573523805,-5.87271726846013,-0.776743297869998,3.54714070391612 +CQ10-28B-3CONTROL,VPS8,-1.60162288385945,-0.652765752428397,-0.777490887486103,0.527742242078015 +EG12-36A-1HDAC,VPS8,-2.75110557943313,-5.86822429211125,-0.786082492228246,3.33922975410446 +EG12-40A-2HDAC,VPS8,-0.233525425581183,-1.79986306043531,-0.788523915584095,1.10459033793267 +SCXV93-624_-6__4,VPS8,1.19635901734904,0.580532829929084,-0.788553105634182,-0.316768333085585 +CQ10-27B-2BDMNT,VPS8,0.955974925288974,-4.09656323658165,-0.798036628573414,2.74854186298881 +CQ10-27B-1DNMT,VPS8,-2.59449426065389,1.03935701857418,-0.801722683231566,-1.37010938339147 +KML12-43_-7__2,VPS8,2.20971614023754,1.05702249678771,-0.813640332014127,0.0513229525383536 +PSC08-64_-7_,VPS8,1.60256305073515,0.722306230978409,-0.81486063827469,-0.968386314182558 +KML14-32_-7__1,VPS8,1.31963661951693,-0.293033976997552,-0.840935461349229,0.974621219996079 +KML12-44_-6_,VPS8,1.66670782308004,0.450157694342107,-0.85047817522336,-0.0282180998930666 +NBP13-33_-6_,VPS8,2.11362744119553,0.074294776459028,-0.850917647644106,0.161052636021427 +RT175_4,VPS8,-6.08453995306883,-1.5847554231885,-0.851927136876267,0.654886515280702 +PSC08-51B_-6__2,VPS8,1.69433369072044,-3.9777082406666,-0.853062305490743,2.57326677818987 +2PE_3,VPS8,-1.42113833250666,0.732089520387083,-0.85968114934787,-0.334158367834675 +KML12-11MG-C2CONTROL,VPS8,-1.14404922122666,-0.369497422047609,-0.86586781829677,0.545839255353412 +EG12-32D-3ADNMT,VPS8,-2.33092171605808,-6.49882666314814,-0.878943339066095,8.81227875371687 +EG11-07C-2CONTROL_1,VPS8,-3.56165654701863,-1.12087613904815,-0.882343979901181,0.93513102969384 +KML12-6MG-C3HDAC,VPS8,-0.247800611214201,-3.68459836797471,-0.886638160602802,2.64400760201888 +PSC11-14_-6__1,VPS8,1.29798765770133,0.279946025879008,-0.888749574225731,0.383064696798185 +KML12-8MG-C5DNMT,VPS8,0.480942911913897,-6.61524257228461,-0.890945314660018,2.99717586724772 +PSC04-51_-6__2,VPS8,2.11012059866811,-2.17483002583484,-0.892400762990723,3.58299274418693 +PSC03-34_-7_,VPS8,1.42003022822052,-3.03700484947488,-0.895114626814049,4.55322817884049 +CQ10-27B-1HDAC,VPS8,-0.415733559185705,1.00764596603657,-0.895755186246504,-1.70727231947676 +EG12-31D-4ACONTROL,VPS8,-0.730862859035574,-4.76467537256631,-0.896023572540355,8.50826953947494 +CQ10-29C-3HDAC,VPS8,-3.43393950676222,-1.31375538250097,-0.898691218784376,1.17790943366659 +KML14-38_-7_,VPS8,2.34623720626804,0.5762900768692,-0.905093569770028,-0.399350791449275 +CQ10-26C-1CONTROL,VPS8,1.08755991069246,-2.945565611204,-0.909240989386491,3.0351723749442 +BGC13-12_-7_,VPS8,-0.253711770063437,3.62186912095244,-0.92162811147461,7.89646403266832 +2PE_4,VPS8,-0.426717350072744,0.952632496094194,-0.927856943829192,-1.56463931653422 +ScotiaCocktail_300mgml_,VPS8,2.14185919250307,0.692503703434139,-0.9327762781035,-0.496239589513887 +PSC07-23_-7.1_,VPS8,1.72684000693161,-6.70113811524449,-0.934472544347419,8.92581692302085 +KML12-8MG-C5CONTROL,VPS8,2.26995149626616,-3.59818909649608,-0.938289954230961,2.28841752472117 +PSC11-14_-6__3,VPS8,2.2315866187862,0.778150775662035,-0.950510855200532,-0.109606913856338 +SCXV93-624_-6__3,VPS8,-0.142291887811655,0.610577392571858,-0.952359558372682,-1.89029858997077 +EG12-20E-3BCONTROL,VPS8,-0.671885798970071,-4.04242253567091,-0.95331634334774,8.33017506660221 +GlutamicAcid_4,VPS8,-0.339337596563252,0.944269092626762,-0.962894733949753,-1.58620642460227 +GlutamicAcid_2,VPS8,2.67228050406167,0.665280751474858,-0.970694153165935,-2.04278973149575 +KML12-18MG-C2DNMT,VPS8,3.49482371999019,0.636802620800405,-0.97540753542019,-0.853987434846299 +CQ10-29C-3DNMT,VPS8,-1.24477662226774,-3.25711389816962,-0.976336752014611,1.75852808166155 +CQ10-30C-1HDAC,VPS8,1.4392809426659,0.214520820510043,-0.983921300028768,0.754771360790367 +EG12-23A-1CONTROL,VPS8,1.01077351218435,-5.07913972780678,-0.994662427625896,3.13507597772301 +EG12-40B-2CONTROL,VPS8,-0.511914303993495,-4.09932385304966,-0.996961954904935,2.35743711332478 +EG12-30B-3CONTROL,VPS8,-1.0201991146254,-6.4323381674902,-0.997943875756459,2.65095282912199 +Ser_3,VPS8,-1.4708956436141,0.343694918314689,-0.998607949395928,-1.21913178296623 +KML12-15MG-E1DNMT,VPS8,-2.15622795601466,-2.07490779431449,-1.0011093745214,1.18624993865421 +PSC07-79_-6_,VPS8,2.67045476112483,0.616295086276843,-1.00786524944699,-0.985492261564349 +PSC03-23_-7__2,VPS8,2.23251213390376,0.910244257649145,-1.01402353918053,-0.700608562928665 +SC572_-7_,VPS8,0.07551975029911,0.723758098905295,-1.01535736230254,-1.03130399261121 +KML12-19MG-C3DNMT,VPS8,-1.56648972310148,-3.64030206490951,-1.03044375318894,7.86882400293219 +KML12-11MG-C2HDAC,VPS8,0.028293192004945,-4.35194281859486,-1.03260706023424,1.99409482720822 +EG12-25E-4BCONTROL,VPS8,2.63549557697912,0.371482694984728,-1.04519121516045,-0.175068419022917 +PSC11-14_-7_,VPS8,0.0659480021488039,0.818064179525082,-1.04682180379167,-0.924356182663635 +EG12-30A-4CONTROL,VPS8,1.39765198072212,-1.7076319253556,-1.05123355552836,2.24640397015644 +PSC03-23_-7__1,VPS8,0.953064863001283,1.03236529962677,-1.05542394938523,0.593031521409677 +EG12-31D-4AHDAC,VPS8,1.24396994257727,-5.90894737556931,-1.06305228247452,2.94487650836394 +EG12-25E-4BHDAC,VPS8,2.81530040575377,-0.354171197641222,-1.07043087846862,0.464147596753691 +KML12-6MG-C3CONTROL,VPS8,2.17919942865615,-3.50718686921475,-1.07055088200786,2.83974789058365 +SCX93-629_-7_,VPS8,0.281142910632097,0.508670678842262,-1.07182794669915,0.145207518167737 +KML12-12MG-C1HDAC,VPS8,2.38227565230494,0.525894234547015,-1.07807056324405,-0.70781476469463 +CQ10-27C-4ACONTROL,VPS8,1.47127443246767,-1.7998450919304,-1.07912708089024,0.298278010687753 +BGC11-42_-6_,VPS8,0.887195496912733,0.653792822231329,-1.07990548222588,-0.120785223145643 +EG12-25A-3CONTROL,VPS8,1.35579644458564,-4.48601781652308,-1.08221311785217,8.57927228298952 +EG12-28D-2CONTROL,VPS8,-2.8281165291501,0.43116724815187,-1.08288854317778,-2.09874607578115 +CQ10-24B-2CONTROL,VPS8,-1.25463259965087,0.0413232910228899,-1.08467481207613,-0.316859089110542 +PSC08-42E_-6_,VPS8,0.526416554690318,0.0656741464499107,-1.08575484392934,0.821988546349337 +KML12-18MG-C1bDNMT,VPS8,-0.957504821710653,-3.8818175668795,-1.08640026837014,2.03068821307127 +PSC07-28_MeOH,CHCl3_,VPS8,1.11099617875148,-0.209482752821772,-1.08683163244364,0.637351879038532 +Thr_4,VPS8,2.27157291783278,-0.912680494227388,-1.09182232017372,0.631712420808432 +EG12-32A-3AHDAC,VPS8,1.32777204912412,-3.45679730906832,-1.09606622912241,2.89713251565448 +2PE_2,VPS8,2.04075248198756,0.914483469846332,-1.10181666898946,-1.58451690621379 +CWR15-8_-6_,VPS8,0.438518917311752,1.0711515669386,-1.10320157469913,0.386387802808955 +KML12-2MG-F4DNMT,VPS8,0.690623166385186,-4.1543209535864,-1.1081363148332,1.87173051016628 +KML12-27_-6_,VPS8,5.07982247364063,0.0122258520407051,-1.11864878703799,0.154045261308446 +EG10-65D-1CONTROL,VPS8,-0.658470381479053,-3.56814202098301,-1.1234992003607,2.43122479974617 +EG12-40A-3CONTROL,VPS8,0.703484286297605,-3.99002975752168,-1.12497329789007,2.55459920289107 +Phe_1,VPS8,0.291097002732611,-1.137236638026,-1.12573872587012,1.62814903213373 +KML14-31_-6_,VPS8,0.587137426846179,-3.65933580100174,-1.15146083583945,8.59044308937117 +NBP11-?_-7_,VPS8,1.16017390498203,-0.262601861221593,-1.16468960437173,0.384081681827343 +PSC07-64Basel_-6_,VPS8,1.03666365966984,0.39124299325798,-1.17293255018228,0.245873348156534 +KML12-2MG-F4HDAC,VPS8,-1.32368614234063,0.189821932546382,-1.18149658654379,0.878346296194542 +SC575_-6_,VPS8,3.74556953539925,0.595361962901454,-1.18675322806354,-0.394716040763074 +BakersFungus_-7_,VPS8,2.36574989712375,0.0532442335077712,-1.18686350158609,0.486947227925486 +CQ10-30C-1CONTROL,VPS8,2.20714998520665,-0.312105748808428,-1.21430214866745,0.969609618720602 +KML12-2MG-F4CONTROL,VPS8,-1.03239366135477,-0.00379563788931985,-1.21927013302524,0.612848405745451 +CWR15-4_-6_,VPS8,0.749340273024223,0.528248565575964,-1.21991555746604,-1.86815034760035 +CC10-28A-1DNMT,VPS8,1.14512492802121,-3.63678507099332,-1.2242405498872,2.98607880387869 +KML12-12MG-C4HDAC,VPS8,-1.26692829557343,-4.92962276695597,-1.22953611147373,2.36596170249027 +KML12-14_-6_,VPS8,0.0517496899026084,0.616955171616272,-1.23639577324407,-0.672982174842829 +CQ10-06B-1DNMT,VPS8,-1.22283736226773,-1.03888346556565,-1.23704930603212,1.59508133078826 +PSC07-78_-6__2,VPS8,2.6992195686804,0.34191123728674,-1.24034129501411,0.650646690370409 +EG12--44E-2HDAC,VPS8,2.25507548442567,-3.33788965709833,-1.2417075515251,2.3246153027258 +SCXIII93-526_-7__1,VPS8,1.86978505822077,0.876473793678778,-1.24277704252688,-1.10146777463294 +EG12-30A-4DNMT,VPS8,2.03837041848825,-4.05282536183007,-1.25006806837073,8.55062413529692 +CQ10-29C-3CONTROL,VPS8,0.213098836890237,-0.229048646310856,-1.25517146212753,0.985958795552527 +KML12-14MG-C2HDAC,VPS8,0.893410103341504,-1.45924954491591,-1.26861591269656,1.34063590540454 +CWR15-8_-7_,VPS8,-0.0984487700292387,0.695842394292678,-1.28249334900854,-1.2181257112573 +CQ10-29B-4ADNMT,VPS8,-0.351589798332744,-6.09887776572433,-1.30257286012919,2.898368712111 +NBPB-61_-6_,VPS8,0.729238893864234,0.68502414498427,-1.31047120118178,-0.124240994205487 +KML14-42_-7_,VPS8,2.29813166148517,0.916499477155714,-1.31512052749279,0.604856103881495 +PSC08-77_-6__2,VPS8,2.39542909338564,-0.586669610689159,-1.31524458520566,1.22819664913252 +PSC11-19_-7_,VPS8,-0.612302855237446,0.551263601995437,-1.32210749031489,-0.23411152772781 +SCXIV93-551_-7__2,VPS8,1.72663163959368,0.543789868835811,-1.3256240805156,-0.902701768033728 +KML12-46_-6_,VPS8,0.184711315825221,0.479978954192255,-1.34075912148548,-0.749588226214245 +KML12-44_-7_,VPS8,2.68077501330464,0.818440196299159,-1.34737066783008,-0.297743346549175 +EG12-35E-2CONTROL,VPS8,-13.1841552935078,-0.279126153654502,-1.35872802981792,-0.64216636891907 +NBP13-96_-6_,VPS8,-0.0485387236400951,0.503093477431358,-1.35918696227206,1.30045988113395 +PSC08-64_-6_,VPS8,0.0395875109150421,0.452688954284497,-1.37375036476108,0.194362135618292 +EG12-36A-1DNMT,VPS8,-0.589075966008297,-0.133809833924022,-1.37422064890136,0.204862454888159 +KML12-15MG-E1CONTROL,VPS8,-1.25760335145448,-4.06042519190256,-1.38746725579759,2.64295924119406 +EG12-40B-2DNMT,VPS8,-1.52821486840345,-0.440518561133357,-1.40810462120878,0.483988012936217 +NBP11-23_-7_,VPS8,1.67010239000304,0.24615191808354,-1.41543051294578,-0.0858728296396417 +EG12-32B-3CONTROL,VPS8,-0.829924332865037,-0.375908553734195,-1.42940849276362,-0.397447440192492 +contaminated_notRF1,VPS8,-1.34586310294461,-2.22526066992842,-1.43136909112777,-0.526614848234313 +PSC07-41-7.3_-7_,VPS8,3.88743127882949,0.845238701620387,-1.4369411473554,-0.732126913842386 +Ala_3,VPS8,-0.711912557693934,0.264532422118985,-1.43846713830715,-1.43210488626049 +Arg_3,VPS8,-0.809656057536296,0.45855410778758,-1.4400823210786,-2.40807390653115 +EG12-28D-2HDAC,VPS8,-5.13729596582444,-0.00466383457819225,-1.45419327779128,-0.710262758839263 +CQ10-27B-2BCONTROL,VPS8,1.87617768722953,-3.43813730532262,-1.45515736027886,2.89476330204027 +KML12-15MG-E1HDAC,VPS8,-1.2778999485573,-3.84352644923827,-1.46303786296751,2.47249454332881 +PSC08-62_-7_,VPS8,0.500485947527555,0.631076360492122,-1.46738636959568,-1.23775195353027 +SCXIII93-532_-6_,VPS8,5.13531595549312,0.75386822461864,-1.47146243575637,-0.567461281515636 +Arg_1,VPS8,-0.166188384699631,0.560758482426424,-1.49025353049959,-2.35904445122201 +PSC07-4_-7__1,VPS8,0.658683285655803,0.610171564018303,-1.50551425085179,-0.760022724521459 +KML12-11_-6_,VPS8,4.32344195646088,0.725368620325255,-1.50915895293899,-1.50996290008732 +EG12-32B-2DNMT,VPS8,1.86830726850845,-2.17425077348186,-1.51669647253911,0.840405037181738 +KML12-49_1,VPS8,3.16917591554188,0.770069727439293,-1.52072956445941,-0.413738981051939 +CWR15-13_-6_,VPS8,0.395461728760323,0.934771585104098,-1.52463049031958,-0.287261443507201 +Met_3,VPS8,-1.12529616081171,-6.69214520201806,-1.52595377259017,8.77595035691072 +EG11-07C-2DNMT_2,VPS8,1.53570343404538,0.046789355033679,-1.52684406911781,-0.52625872306068 +PSC11-14_-6__4,VPS8,1.68689214457843,-0.115987758202209,-1.53299749384301,0.677523128731525 +Gly_4,VPS8,0.643309619784896,-0.329407660378009,-1.53535459038749,-0.623772308708597 +EG12-30A-2HDAC,VPS8,0.771262337661397,0.909507072880037,-1.54276480893586,-1.85278950833197 +Asn_1,VPS8,-0.0337234013155272,0.405582916071365,-1.57752853691949,-0.661216933549773 +Farnesol_4,VPS8,1.59354155419572,-0.0575366816885508,-1.58391710371483,-1.16413990335636 +CQ10-29B-4AHDAC,VPS8,0.570070523481489,-3.33860319804234,-1.59690424349917,2.75734140950871 +Gly_1,VPS8,-1.26187184740654,0.461515639658267,-1.60433959792399,-1.12773988788618 +Fk506_1,VPS8,1.40364203594205,-4.51448909042722,-1.61499072286669,2.92685153289488 +SC95-1675_-6_,VPS8,2.34248760567698,-5.19779198426479,-1.62022547184888,8.37455988102868 +KML12-19MG-C3CONTROL,VPS8,1.76799862512712,-4.14034874862291,-1.63741597884568,8.0124044184874 +KML12-48_-7_,VPS8,2.77002400390405,0.813006456938148,-1.63954198749365,0.316556536013066 +Leucine_3,VPS8,0.370389878247629,-0.25685995258462,-1.64425212640901,-0.164731117474023 +EG12-27D-5DNMT,VPS8,3.18159197900431,-0.255389352351857,-1.65772171285451,0.459530580212867 +PSC07-79_-7__2,VPS8,3.27075195831372,-1.63703580401479,-1.67157158078585,2.17708835774154 +NBP13-9D_-7_,VPS8,0.110117831825183,0.695318460834994,-1.68097239858317,0.771730319390279 +Thr_3,VPS8,-0.854799953942968,-0.6300658527889,-1.68508414147175,-0.517576835774539 +EG12-40B-2HDAC,VPS8,-0.414398389835769,-5.52697604839817,-1.69748585858492,2.65204116987497 +Farnesol_3,VPS8,-1.33877962494644,-0.894999596127919,-1.69894941526286,-0.325964510587678 +KML12-19MG-C1HDAC,VPS8,-0.159918146214614,-2.72029360628515,-1.71013488028909,1.43427825364022 +EG10-65D-1HDAC,VPS8,0.224358765074664,0.181736772354056,-1.71700102873723,-0.111714548826222 +EG11-10A-1DNMT,VPS8,-1.75532312885907,-6.80062729777481,-1.73517913242863,8.79985462071478 +KML12-6MG-C3DNMT,VPS8,1.25980080280135,-3.37154361526385,-1.77693955325107,2.59236236026654 +NBP12-44_-6_,VPS8,5.89537223435291,-3.39601908621351,-2.0452090869021,2.59326475543325 +PSC07-83_-7_,VPS8,-0.124379377192004,-3.4307037780878,-2.07393452869144,3.33616447528418 +PSC11-12_-6__1,VPS8,2.55827828290808,0.832057554679732,-2.08971985911047,-0.893742273164176 +EG12-40A-4HDAC,VPS8,-4.71193730972648,-5.00995355863507,-2.10168372547234,8.66848321922938 +Ala_1,VPS8,-1.51545793216001,0.923769210935478,-2.1117542927522,-2.38814618378677 +Fk506_3,VPS8,2.08396139432876,-0.578409120682676,-2.11597711999805,0.576326638546426 +Leucine_4,VPS8,1.54124944430726,-0.265407709355018,-2.12980023038348,-0.729034351721526 +CQ10-27C-1CONTROL,VPS8,-1.40615307953754,-0.0566923572675338,-2.14635504295618,0.338288025967114 +Val_4,VPS8,0.969945651850531,-0.561537709484147,-2.15409932541109,-0.668299337339352 +KML12-19MG-C5DNMT,VPS8,-2.9733910463581,-4.97229328566068,-2.15799376459347,8.55141194060121 +KML12-17MG-C1HDAC,VPS8,-2.45959259320615,-5.01590620571316,-2.19546568055736,8.56987011656804 +Uracil_1,VPS8,-0.297857323933447,-1.78645880339611,-2.25935459184958,0.137973955000139 +CQ10-29C-4DNMT,VPS8,-5.91413795329189,-0.0345005143142759,-2.38768945788985,0.325715540018117 +KML12-19MG-C1CONTROL,VPS8,-1.22364048686156,-1.02292137075183,-2.38805433351593,0.563397082401076 +EG12-25E-4BaCONTROL,VPS8,5.37825204169703,0.721129522349444,-2.42679601665859,-0.819265683403108 +CQ10-24B-2DNMT,VPS8,-1.99403724773979,-2.63594317513239,-2.42888878108284,0.816781450332396 +BGC13-11_-7_,VPS8,2.26703839950267,-0.211643592837572,-2.4360849392639,0.589287570487445 +KML12-19MG-C5HDAC,VPS8,-3.99218493837985,-0.303219325654329,-2.4422351206502,0.348758674647599 +EG12-32B-3HDAC,VPS8,-0.0493074575082387,-3.26807263977211,-2.50413910853653,0.551406753878228 +CC10-28A-1CONTROL,VPS8,1.89894030166199,-3.72061842197104,-2.57284924310138,2.96043318341504 +CQ10-29B-1HDAC,VPS8,-2.63436524962025,-5.40656102039961,-2.57925726993011,8.68718285240636 +Gly_3,VPS8,-3.18274560042737,-0.796712900509157,-2.58056271383676,0.975454383787573 +Val_3,VPS8,-0.479106563186654,-0.0129495675090599,-2.58642585973053,-1.5629293356703 +Asn_3,VPS8,-1.38647652698889,0.079496075317231,-2.61573348085216,-1.50470677223039 +EG12--44E-2CONTROL,VPS8,-0.515114664465612,-2.51174025585936,-2.66824557012314,0.464451464513913 +PSC08-41_-7_,VPS8,-0.595657744008293,-0.0899429997497973,-2.68460298467265,1.0820451235388 +Fk506_2,VPS8,2.70243611302342,-4.72038466286092,-2.92980787893206,8.20034543453983 +EG12-3B-5DNMT,VPS8,-0.759758149050337,0.133554426102607,-3.23359035185229,-0.378954136976154 +BGC11-10_-7_,VPS8,2.96277087194564,-3.52727201308505,-3.26514803933475,-2.66186896623727 +KML12-17MG-C1CONTROL,VPS8,-0.278233368965242,-6.20459867390617,-3.28359290765055,3.65529614095567 +14.317g,VPS8,1.88504037953566,0.622862244364823,-3.28937740257604,-0.276931985907223 +EG12-27E-2CONTROL,VPS8,3.15339765289825,-2.16531020939492,-3.30878067753635,1.82190745185149 +CQ10-29B-1CONTROL,VPS8,-0.518035853164554,-2.20553741513009,-3.58666184601311,1.54460313221827 +EG12-35E-2DNMT,VPS8,-1.4012038495154,0.374674382930679,-3.64216753708742,-0.0319739872593032 +KML12-19MG-C5CONTROL,VPS8,-2.27855374427475,-0.3393096257977,-3.78002322446424,-0.719899902686996 +CQ10-29C-4HDAC,VPS8,-1.96255860733129,0.370201473795531,-3.87293272138557,-2.13354046901214 +SCXIVI93-638_-7_,VPS8,0.95333897731479,-5.87927361475361,-3.89817562803265,8.40089739610227 +CQ10-29C-4CONTROL,VPS8,0.335012947934112,0.784308906997897,-4.01122058367063,-3.58349169799806 +EG12-40A-4DNMT,VPS8,-1.68579519645332,0.290298937296287,-4.02835352140198,0.224717194803488 +EG11-10A-1CONTROL,VPS8,-0.43422363169839,0.524861330632072,-4.0906223849144,-0.237481015349567 +SC95-1624_-6_,VPS8,3.61372965402897,-3.98611402375268,-4.10746909798796,7.889393906364 +NBP13-46_-7_,VPS8,2.25260744411216,0.816739211548377,-4.11771399473362,-0.523971700389474 +EG11-10A-1HDAC,VPS8,1.12117785653664,-6.42086542968985,-4.29911961517014,2.99064731445993 +KML12-17MG-C1DNMT,VPS8,1.5870164197439,-6.997035296458,-4.56523232845366,8.96011093062638 +EG12-35E-2HDAC,VPS8,1.31270789978432,0.094811334471397,-5.4585224578969,0.0336607668659672 +CQ10-30A-4HDAC,VPS8,23.3944557567319,1.25783452911554,-10.617064327657,-0.488593444526053 +EG12-39B-1CONTROL,VPS8,25.3485438703162,-2.53052449671489,-13.9901457012852,0.502529665910034 +EG12-30A-2CONTROL,VPS8,10.4352332648449,0.0144430031955158,-18.4053378097147,-1.2514717022687 diff --git a/workflow/.old/templates/qhtcp/REMcRdy_lm_only.csv-WholeTree.txt b/workflow/.old/templates/qhtcp/REMcRdy_lm_only.csv-WholeTree.txt new file mode 100644 index 00000000..e74e5e03 --- /dev/null +++ b/workflow/.old/templates/qhtcp/REMcRdy_lm_only.csv-WholeTree.txt @@ -0,0 +1,3 @@ +root cluster is:0-0-0 +root cluster is:0-0-0 +root cluster is:0-0-0 diff --git a/workflow/.old/templates/qhtcp/mComponent.sh b/workflow/.old/templates/qhtcp/mComponent.sh new file mode 100644 index 00000000..7ee35b8c --- /dev/null +++ b/workflow/.old/templates/qhtcp/mComponent.sh @@ -0,0 +1,32 @@ +#This is a 'master associated' sh script to operate from the REMc source directory +#It is an altered Process.sh with a cd at start + +cd GTF/Component +#Begin the Original Component.sh +#!/bin/bash +# this one code will load the terms2tsv_v4.pl to add two more columns: one is the gene names, the other one is the cluster name column + +set $1 = ORF_List_Without_DAmPs.txt #ORF_List_Without_DAmPs.txt #ORFs_w_DAmP_list.txt +set $2 = REMcRdy_lm_only/*.txt +#paths= ORF_List_Without_DAmPs.txt:REMcRdy_lm_only/*.txt +#if [ $argv -lt 2 ]; then + +#echo "Usage: ./example_v4.sh backgroundFilePath geneListsFolder" + +#else + for i in ${*:2} + do + #echo $1 + #echo $i + ./analyze_v2.pl -an gene_association.sgd -as C -o gene_ontology_edit.obo -b $1 $i + ./terms2tsv_v4.pl $i.terms > $i.tsv + done +#fi +wait +echo "Component complete" +#Concatinatethe Process ontology outputs from the /REMcRdy_lm_only folder +python3 Concatenate_GTF_results.py REMcRdy_lm_only/ ComponentResults.txt +wait +echo "Component Concatenate complete" +pwd +#exit diff --git a/workflow/.old/templates/qhtcp/mFunction.sh b/workflow/.old/templates/qhtcp/mFunction.sh new file mode 100644 index 00000000..671ed258 --- /dev/null +++ b/workflow/.old/templates/qhtcp/mFunction.sh @@ -0,0 +1,32 @@ +#This is a 'master associated' sh script to operate from the /REMc source directory +#It is an altered Function.sh with a cd at start + +cd GTF/Function +#Begin the Original Function.sh +#!/bin/bash +# this one code will load the terms2tsv_v4.pl to add two more columns: one is the gene names, the other one is the cluster name column + +set $1 = ORF_List_Without_DAmPs.txt #ORF_List_Without_DAmPs.txt #ORFs_w_DAmP_list.txt +set $2 = REMcRdy_lm_only/*.txt + +#if [ $argv -lt 2 ]; then +#echo "Usage: ./example_v4.sh backgroundFilePath geneListsFolder" +#else + + + for i in ${*:2} + do + #echo $1 + #echo $i + ./analyze_v2.pl -an gene_association.sgd -as F -o gene_ontology_edit.obo -b $1 $i + ./terms2tsv_v4.pl $i.terms > $i.tsv + done +wait +echo "Function complete" +#fi +#Concatinatethe Process ontology outputs from the /REMcRdy_lm_only folder +python3 Concatenate_GTF_results.py REMcRdy_lm_only/ FuctionResults.txt +wait +echo "FunctionConcatenate complete" +pwd +#exit diff --git a/workflow/.old/templates/qhtcp/mProcess.sh b/workflow/.old/templates/qhtcp/mProcess.sh new file mode 100644 index 00000000..30a0bf55 --- /dev/null +++ b/workflow/.old/templates/qhtcp/mProcess.sh @@ -0,0 +1,37 @@ +#This is a 'master associated' sh script to operate from the REMc source directory +#It is an altered Process.sh with a cd at start + +cd GTF/Process +#Begin the Original Process.sh +#!/bin/bash +# this one code will load the terms2tsv_v4.pl to add two more columns: one is the gene names, the other one is the cluster name column + +set $1 = ORF_List_Without_DAmPs.txt #ORFs_w_DAmP_list.txt #ORF_List_Without_DAmPs.txt +set $2 = REMcRdy_lm_only/*.txt +#paths= ORF_List_Without_DAmPs.txt:REMcRdy_lm_only/*.txt +#if [ $argv -lt 2 ]; then + +#echo "Usage: ./example_v4.sh backgroundFilePath geneListsFolder" + +#else + for i in ${*:2} + do + #echo $1 + #echo $i + ./analyze_v2.pl -an gene_association.sgd -as P -o gene_ontology_edit.obo -b $1 $i + ./terms2tsv_v4.pl $i.terms > $i.tsv + done +#fi +wait +echo "Process complete" +#Concatinatethe Process ontology outputs from the /REMcReady_lm_only folder +#python2 Concatenate_GTF_results.py ./REMcReady_lm_only/ ProcessResultsTest.txt +pwd +python3 Concatenate_GTF_results.py REMcRdy_lm_only/ ProcessResults.txt +#python2 ConcatGTFdebug.py REMcRdy_lm_only/ ProcessResults.txt +#python2 ConcatGTFdebug.py REMcRdy_lm_only/ PresDebug4.txt + +wait +echo "Process Concatenate complete" +pwd +#exit diff --git a/workflow/templates/easy/DMPexcel2mat.m b/workflow/apps/easy/DMPexcel2mat.m similarity index 93% rename from workflow/templates/easy/DMPexcel2mat.m rename to workflow/apps/easy/DMPexcel2mat.m index 4fddde53..238b02ef 100755 --- a/workflow/templates/easy/DMPexcel2mat.m +++ b/workflow/apps/easy/DMPexcel2mat.m @@ -7,7 +7,7 @@ global matDir % If we already have mpdmFile, don't recreate if (exist(mpdmFile, 'file') && ~isempty(mpdmFile)) - disp(sprintf('The Drug Media/MasterPlate Annotation File: %s exists, skipping DMPexcel2mat.m\n', mpdmFile)); + fprintf('The Drug Media/MasterPlate Annotation File: %s exists, skipping DMPexcel2mat.m\n', mpdmFile); return end @@ -82,7 +82,7 @@ if ~exist(masterPlateFile, 'file') || isempty(masterPlateFile) end end else - disp(sprintf('Using MasterPlate file: %s skipping directory selection\n', masterPlateFile)); + fprintf('Using MasterPlate file: %s skipping directory selection\n', masterPlateFile); end % fid=fopen(masterPlateFile)%('exp23PrintTimes.xls'); % textread puts date and time sequentially into vector @@ -175,7 +175,7 @@ numOfMedias=0; % find a matching DrugMedia file [mpFile, mpPath]=fullfile(masterPlateFile); mpFileParts=strsplit(mpFile, '_'); -mpBareFileName=strjoin(parts(2:end-1), '_'); +mpBareFileName=strjoin(mpFileParts(2:end-1), '_'); if ~exist(drugMediaFile, 'file') || isempty(drugMediaFile) if exist(fullfile(matDir), 'dir') @@ -183,7 +183,7 @@ if ~exist(drugMediaFile, 'file') || isempty(drugMediaFile) dmFileToTest=fullfile(mpPath, 'DrugMedia_', mpBareFileName, '.xlsx'); if exist(dmFileToTest, 'file') % Try to find a matching drug media file drugMediaFile=dmFileToTest; - disp(sprintf('Using matching DrugMedia file: %s, skipping directory selection\n', drugMediaFile)); + fprintf('Using matching DrugMedia file: %s, skipping directory selection\n', drugMediaFile); else % Try to find the DrugMedia file automatically (newest created first) files=dir(matDir); @@ -195,7 +195,7 @@ if ~exist(drugMediaFile, 'file') || isempty(drugMediaFile) [~, sortedIndices]=sort(datenum({files(strncmp(dmFiles.name, 'DrugMedia_', 10)).date}), 'descend'); sortedFiles=dmFiles{sortedIndices}; drugMediaFile=sortedFiles{1}; - disp(sprintf('Using newest DrugMedia file: %s, skipping directory selection\n', drugMediaFile)); + fprintf('Using newest DrugMedia file: %s, skipping directory selection\n', drugMediaFile); end catch Me @@ -229,7 +229,7 @@ if ~exist(drugMediaFile, 'file') || isempty(drugMediaFile) end end else - disp(sprintf('Using drugMediaFile: %s, skipping directory selection\n', drugMediaFile)); + fprintf('Using drugMediaFile: %s, skipping directory selection\n', drugMediaFile); end % Drug and Media Plate setup diff --git a/workflow/templates/easy/DgenResults.m b/workflow/apps/easy/DgenResults.m similarity index 96% rename from workflow/templates/easy/DgenResults.m rename to workflow/apps/easy/DgenResults.m index ba1e42a7..403bcb16 100755 --- a/workflow/templates/easy/DgenResults.m +++ b/workflow/apps/easy/DgenResults.m @@ -366,7 +366,7 @@ if isequal(opt,'DB')||isequal(opt,'Both') try copyfile(DBfilename,DBupload) catch ME - disp(sprintf('DB upload failed with error: %s\n', getReport(ME, 'basic'))); + fprintf('DB upload failed with error: %s\n', getReport(ME, 'basic')); rep=sprintf('Failed copyfile to %s - %s', DBupload, rep); errordlg(rep); end @@ -654,7 +654,7 @@ try try copyfile(DBfilename,DBupload) catch ME - disp(sprintf('DB upload failed with error: %s\n', getReport(ME, 'basic'))); + fsprintf('DB upload failed with error: %s\n', getReport(ME, 'basic')); rep=sprintf('Failed copyfile to %s - %s\n', DBupload, rep); errordlg(rep) end @@ -663,6 +663,6 @@ try msgbox([sprintf('Printing Script complete. Check !!Results sheets in %s for results.', printResultsDir)]) catch ME - disp(sprintf('Printing Script failed with error: %s\n', getReport(ME, 'basic'))); + fprintf('Printing Script failed with error: %s\n', getReport(ME, 'basic')); end diff --git a/workflow/templates/easy/EASYconsole.fig b/workflow/apps/easy/EASYconsole.fig similarity index 100% rename from workflow/templates/easy/EASYconsole.fig rename to workflow/apps/easy/EASYconsole.fig diff --git a/workflow/templates/easy/EASYconsole.m b/workflow/apps/easy/EASYconsole.m similarity index 74% rename from workflow/templates/easy/EASYconsole.m rename to workflow/apps/easy/EASYconsole.m index 4c47c498..d00d8291 100644 --- a/workflow/templates/easy/EASYconsole.m +++ b/workflow/apps/easy/EASYconsole.m @@ -1,6 +1,5 @@ % Launch the MATLAB EASY console -% -% Updated 240724 Bryan C Roessler to improve file operations and portability +% Updated 240727 Bryan C Roessler to improve file operations and portability % function varargout = EASYconsole(varargin) global easyDir @@ -27,122 +26,134 @@ function varargout = EASYconsole(varargin) [easyDir,easyFileName]=fileparts(easyPath); easyDir=fullfile(easyDir); [parentDir, ~]=fileparts(easyDir); - userName=system('whoami'); - todayStr=datetime('now', 'Format', 'yyyyMMdd'); % This should match the parent workflow script + parentDir=fullfile(parentDir); % ../easy/apps + userName=getenv('USER'); + dt=datetime; + todayStr=char(dt, 'yyyyMMdd'); % This should match the parent workflow script - disp(sprintf('This script name: %s\n', easyFileName)) + demo=1; + if demo + disp('Running in demo mode'); + disp('Initialized variables:'); + whos; + end - % Set scansDir intelligently (project scans directory) - % Allow users to specify a PROJECT=/mnt/data/ExpJobs/Job directory to analyze with EASY - % This better enables running the new EASY in standalone mode + fprintf('This script name: %s\n', easyFileName); + + % Set scansDir (project scans directory) intelligently if exist('PROJECT', 'var') && ~isempty(getenv('PROJECT')) - scansDir=getenv('PROJECT') - disp(sprintf('Using project path: %s from environment variable PROJECT\n', scansDir)); + scansDir=getenv('PROJECT'); + fprintf('Using project path: %s from environment variable PROJECT\n', scansDir); disp('This usually indicates that we are in standalone mode'); elseif exist('SCANS_DIR', 'var') && ~isempty(getenv('SCANS_DIR')) scansDir=getenv('SCANS_DIR'); - disp(sprintf('Using scans directory: %s from environment variable SCANS_DIR\n', scansDir)); + fprintf('Using scans directory: %s from environment variable SCANS_DIR\n', scansDir); disp('This usually indicates that we are in module mode'); else - dirToScan = fullfile(parentDir,'ExpJobs'); % hardcoded relative to easy script dir TODO: if we change pj layout this will change + dirToScan=fullfile(parentDir,'..','ExpJobs'); % hardcoded relative to easy script dir TODO: if we change pj layout this will change if exist(dirToScan, 'dir') dirs=dir(fullfile(dirToScan, 'dir')); % filter for dirs only [~, sortedIndices]=sort(datenum({dirs.date}), 'descend'); % sort by newest first sortedDirs=dirs{sortedIndices}; scansDir=sortedDirs{1}; disp('Beginning in newest project scans directory'); - disp(sprintf('Using scans directory: %s from hardcoded relative path\n', scansDir)); + fprintf('Using scans directory: %s from hardcoded relative path\n', scansDir); disp('This usually indicates that we are in stand-alone mode without PROJECT or SCANS_DIR environment variables'); else - scansDir=fullfile('/mnt/data/ExpJobs/demo') + scansDir=fullfile(parentDir, '..', 'demo', '20240727_hartmanlab_demo_project'); if exist(scansDir, 'dir') - disp(sprintf('Using scans directory: %s from hardcoded absolute path to demo\n', scansDir)); + demo=1; + fprintf('Using scans directory: %s from hardcoded absolute path to demo project\n', scansDir); else - disp(sprintf('Error: scansDir %s does not exist\n', scansDir)); + fprintf('Error: demo project %s not found\n', scansDir); + disp('Attempting to continue but this may get ugly'); end end end - % If we don't have the EASY_SUFFIX from the module, generate it from scansDir - if exist('EASY_SUFFIX', 'var') && ~isempty(getenv('EASY_SUFFIX')) - easySuffix=get_env('EASY_SUFFIX'); - else - [dirName, ~]=fileparts(scansDir); - [scansDate, scansUserName, easySuffix]=strsplit(dirName, '_'); - % The following is handled by the workflow script that calls this module - % Reimplementing here for stand-alone mode - % While the easySuffix directory exists, increment by one and try again - if exist(easySuffix, 'dir') - oldSuffix=easySuffix; - while exist(easySuffix, 'dir') - count=1; - easySuffix=strcat(oldSuffix,'.',num2str(count)); - end - end - % Might as well check this too - if userName ~= scansUserName - disp('WARNING: userName does not match scansUserName'); - disp("This usually means that you are attempting to run an EASY analysis on another user's project data scans"); - end - % For happiness - if todayStr == scansDate - disp("Early bird gets the worm"); - end - end - - % Helpful variables for running in workflow mode that I'll probably have to reimplement in matlab anyways for standalone mode - if exist('EASY_DIR','var') && ~isempty(getenv('EASY_DIR')) - EASY_DIR=fullfile(get_env('EASY_DIR')); - if easyDir ~= EASY_DIR % sanity check - disp("WARNING: EASY_DIR does not match this script's hardcoded EASY location"); - disp("This is probably OK but if strange beahvior arises, we'll need to fix it in code"); - easyDir=EASY_DIR; - end - disp(sprintf('Using EASY script directory: %s from environment variable EASY_DIR\n', easyDir)); - else - disp(sprintf('Using EASY script directory: %s from hardcoded default\n', easyDir)); - end - + % Sanity check and warning if exist('PROJECT_USER', 'var') && ~isempty(getenv('PROJECT_USER')) - if get_env('PROJECT_USER') ~= userName % sanity check + if ~equal(getenv('PROJECT_USER'), userName) disp("WARNING: PROJECT_USER does not match the current namespace"); end end - if exist('EASY_RESULTS_DIR', 'var') && ~isempty(getenv('EASY_RESULTS_DIR')) - easyResultsDir=fullfile(get_env('EASY_RESULTS_DIR')); - disp(sprintf('Using output directory: %s from environment variable EASY_RESULTS_DIR\n', easyResultsDir)) + % Allow module to override hardcoded default EASY directory + if exist('EASY_DIR','var') && ~isempty(getenv('EASY_DIR')) + EASY_DIR=fullfile(getenv('EASY_DIR')); + if ~strcmp(easyDir, EASY_DIR) % sanity check + disp("WARNING: EASY_DIR does not match this script's hardcoded EASY location"); + disp("This is probably OK but if strange beahvior arises, we'll need to fix it in code"); + easyDir=EASY_DIR; + end + fprintf('Using EASY script directory: %s from environment variable EASY_DIR\n', easyDir); + else + fprintf('Using EASY script directory: %s from hardcoded default\n', easyDir); + end + + % If we don't have tan EASY_SUFFIX from the module, generate it from scansDir + if exist('EASY_SUFFIX', 'var') && ~isempty(getenv('EASY_SUFFIX')) + easySuffix=getenv('EASY_SUFFIX'); + else + % The following is a way to parse the project name from the scansDir + [ ~, dirName]=fileparts(scansDir); + parts=strsplit(dirName, '_'); + scansDate=parts{1}; + scansUserName=parts{2}; + easySuffix=strjoin(parts(3:end), '_'); + % Might as well check this too for fun + if ~strcmp(userName, scansUserName) + disp('WARNING: userName does not match scansUserName'); + disp("This usually means that you are attempting to run an EASY analysis on another user's project data scans"); + end + % For happiness + if strcmp(todayStr, scansDate) + disp("Early bird gets the worm"); + end + end + + if (exist('EASY_RESULTS_DIR', 'var') && ~isempty(getenv('EASY_RESULTS_DIR'))) + easyResultsDir=fullfile(getenv('EASY_RESULTS_DIR')); + if exist(easyResultsDir, 'dir') + fprintf('WARNING: EASY results dir %s already exists\n', easyResultsDir); + disp('Files in this directory may be overwritten'); + end + fprintf('Using output directory: %s from environment variable EASY_RESULTS_DIR\n', easyResultsDir); else easyResultsDirName=strcat('Results_',todayStr,'_',userName,'_',easySuffix); easyResultsDir=fullfile(scansDir,easyResultsDirName); - disp(sprintf('Using output directory: %s\n', PROJECT_PREFIX)) + if exist(easyResultsDir, 'dir') + fprintf('WARNING: EASY results dir %s already exists\n', easyResultsDir); + disp('Files in this directory may be overwritten') + fprintf('Using output directory: %s\n', easyResultsDir); + end end if exist('MASTER_PLATE_FILE', 'var') && ~isempty(getenv('MASTER_PLATE_FILE')) - masterPlateFile=fullfile(get_env('MASTER_PLATE_FILE')); - disp(sprintf('Using drug media file: %s from environment variable MASTER_PLATE_FILE\n', masterPlateFile)) + masterPlateFile=fullfile(getenv('MASTER_PLATE_FILE')); + fprintf('Using drug media file: %s from environment variable MASTER_PLATE_FILE\n', masterPlateFile); else % Try to find MasterPlate_ file on our own mp=fullfile(scansDir,'MasterPlateFiles',strcat('MasterPlate_', easySuffix,'.xlsx')); if exist(mp, 'file') masterPlateFile=mp; - disp(sprintf('Using drug media file: %s from internal logic\n', masterPlateFile)) + fprintf('Using drug media file: %s from internal logic\n', masterPlateFile); else - disp("WARNING: Have you created a MasterPlate_ file?") + fprintf('WARNING: Have you created a MasterPlate_ file in %s/MasterPlateFiles/?\n', scansDir); end end if exist('DRUG_MEDIA_FILE', 'var') && ~isempty(getenv('DRUG_MEDIA_FILE')) - drugMediaFile=fullfile(get_env('DRUG_MEDIA_FILE')); - disp(sprintf('Using drug media file: %s from environment variable DRUG_MEDIA_FILE\n', drugMediaFile)) + drugMediaFile=fullfile(getenv('DRUG_MEDIA_FILE')); + fprintf('Using drug media file: %s from environment variable DRUG_MEDIA_FILE\n', drugMediaFile); else % Try to find MasterPlate_ file on our own dm=fullfile(scansDir,'MasterPlateFiles',strcat('DrugMedia_', easySuffix,'.xlsx')); if exist(mp, 'file') drugMediaFile=dm; - disp(sprintf('Using drug media file: %s from internal logic\n', drugMediaFile)) + fprintf('Using drug media file: %s from internal logic\n', drugMediaFile); else - disp("WARNING: Have you created a DrugMedia_ file?") + fprintf('WARNING: Have you created a DrugMedia_ file in %s/MasterPlateFiles/?\n', scansDir); end end @@ -161,6 +172,12 @@ function varargout = EASYconsole(varargin) searchRangeFile=fullfile(fotosResultsDir,'CSearchRange.mat'); mpdmFile=fullfile(matDir,'MPDM.mat'); + % Decent time to print some helpful vars + if demo + disp('Vars at end of main loop:') + whos; + end + % This can be removed, I think it should add the previous search range? % Might be nice feature but can remove if it causes issues % We are using searchRangeNum to hold old CSrchRange value(s) @@ -172,14 +189,6 @@ function varargout = EASYconsole(varargin) % reduce directory scoping issues when calling scripts w/o a path addpath(easyDir); - % Pulled this out of the opening function - % Seems better to wait until we have our ars set - if exist('scansDir','var') && ~isempty(scansDir) - set(fhconsole,'Name',sprintf('EASYconsole - %s', scansDir)); - else - set(fhconsole,'Name','EASYconsole - No Active Experiment.') - end - % GUI interface design gui_Singleton=1; gui_State=struct( 'gui_Name', mfilename, ... @@ -221,6 +230,7 @@ end % varargin--input arguments to EASYconsole (see VARARGIN) function EASYconsole_OpeningFcn(hObject, ~, handles, varargin) global fhconsole + global scansDir % Choose default command line output for EASYconsole handles.output=hObject; @@ -232,6 +242,15 @@ function EASYconsole_OpeningFcn(hObject, ~, handles, varargin) fhconsole=gcf; set(fhconsole,'Toolbar','none'); fhconsole=gcf; + + % Pulled this out of the opening function + % Seems better to wait until we have our vars set though? + if exist('scansDir','var') && ~isempty(scansDir) + set(fhconsole,'Name', sprintf('EASYconsole - %s', scansDir)); + else + set(fhconsole,'Name','EASYconsole - No Active Experiment.') + end + end @@ -319,7 +338,7 @@ function NewExpDat_Callback(~, ~, ~) sbdg= cell(1,scanMax); save((fullfile(easyResultsDir,'Fotos','Nbdg')),'sbdg'); catch ME - disp(sprintf('ERROR: %s\n', ME.message)); + fprintf('ERROR: %s\n', ME.message); end % set the title for fhconsole depending on existence @@ -340,7 +359,7 @@ function LoadDatFile_Callback(~, ~, ~) global fhconsole try - questdlg('\fontsize{20} Load file from ExpJobs/YourJob/YourResults/matResults','File Creation','OK', struct('Default','OK','Interpreter','tex')); + questdlg('Load results .mat from ../ExpJobs/YourJob/Results/matResults/','File Creation','OK', struct('Default','OK','Interpreter','tex')); [inputFile,inputPath]=uigetfile('.mat','Open Experiment folder and data storage .mat file name','MultiSelect','off'); matDir=fullfile(inputPath); matFile=fullfile(inputPath,inputFile); @@ -368,9 +387,11 @@ function LoadDatFile_Callback(~, ~, ~) try load(fullfile(easyPath,'ImParameters.mat')); catch - disp("Could not load the ImParameters.mat file") + disp("Could not load the ImParameters.mat file"); end - end + end + else + disp('WARNING: cannot find project scans'); end bkupDir=fullfile(matDir,'BkUp'); @@ -395,7 +416,7 @@ function LoadDatFile_Callback(~, ~, ~) fhconsole=gcf; set(fhconsole,'Name',sprintf('EASYconsole - %s', easyResultsDir)); else - set(fhconsole,'Name','EASYconsole -Exp. Analysis NOT selected.'); + set(fhconsole,'Name','EASYconsole - Exp. Analysis NOT selected.'); end end @@ -415,6 +436,7 @@ end function NImCFcombo_Callback(~, ~, ~) try par4Gbl_Main8c + EASYconsole catch EASYconsole end @@ -433,6 +455,7 @@ function PlateCFit_Callback(~, ~, ~) try NCstart catch + EASYconsole end end @@ -455,7 +478,7 @@ function runResults_DBcombo_Callback(~, ~, ~) DgenResults %similar but semicolons removed to restore so cmdLine display info. %Dgen241010qhtcp %par4global -convert 1x1cell of 384cells to be like previous 1x384 cells CFparameter catch ME - disp(sprintf('Error in DgenResults: %s\n', ME.message)); + fprintf('Error in DgenResults: %s\n', ME.message); EASYconsole end end diff --git a/workflow/templates/easy/NCdisplayGui.m b/workflow/apps/easy/NCdisplayGui.m similarity index 100% rename from workflow/templates/easy/NCdisplayGui.m rename to workflow/apps/easy/NCdisplayGui.m diff --git a/workflow/templates/easy/NCfitImCFparforFailGbl2.m b/workflow/apps/easy/NCfitImCFparforFailGbl2.m similarity index 100% rename from workflow/templates/easy/NCfitImCFparforFailGbl2.m rename to workflow/apps/easy/NCfitImCFparforFailGbl2.m diff --git a/workflow/templates/easy/NCscurImCF_3parfor.m b/workflow/apps/easy/NCscurImCF_3parfor.m similarity index 100% rename from workflow/templates/easy/NCscurImCF_3parfor.m rename to workflow/apps/easy/NCscurImCF_3parfor.m diff --git a/workflow/templates/easy/NCsingleDisplay.m b/workflow/apps/easy/NCsingleDisplay.m similarity index 100% rename from workflow/templates/easy/NCsingleDisplay.m rename to workflow/apps/easy/NCsingleDisplay.m diff --git a/workflow/templates/easy/NIcircle.m b/workflow/apps/easy/NIcircle.m similarity index 100% rename from workflow/templates/easy/NIcircle.m rename to workflow/apps/easy/NIcircle.m diff --git a/workflow/templates/easy/NImParamRadiusGui.m b/workflow/apps/easy/NImParamRadiusGui.m similarity index 94% rename from workflow/templates/easy/NImParamRadiusGui.m rename to workflow/apps/easy/NImParamRadiusGui.m index a096e980..37b4958a 100755 --- a/workflow/templates/easy/NImParamRadiusGui.m +++ b/workflow/apps/easy/NImParamRadiusGui.m @@ -41,7 +41,7 @@ function NImParamRadiusGui(scansDir) if exist(pointMapsFile, 'file') load(pointMapsFile); else - load(fullfile(PTmats,'NImParameters')) % hardcoded default + load(fullfile(easyDir, 'PTmats', 'NImParameters')) % hardcoded default disp('WARNING: Using hardcoded NImParameters.mat') end ImParMat; @@ -67,7 +67,7 @@ function NImParamRadiusGui(scansDir) set(fhImParm,'Name',strcat('ImageAnalysis- ',char(easyResultsDir))) else set(fhImParm,'NumberTitle','off') - set(fhImParm,'Name','EASYconsole -Exp. Analysis NOT selected.') + set(fhImParm,'Name','EASYconsole - Exp. Analysis NOT selected.') end btnNumber=5; diff --git a/workflow/templates/easy/NIscanIntensBGpar4GblFnc.m b/workflow/apps/easy/NIscanIntensBGpar4GblFnc.m similarity index 97% rename from workflow/templates/easy/NIscanIntensBGpar4GblFnc.m rename to workflow/apps/easy/NIscanIntensBGpar4GblFnc.m index 16fa386c..b4263689 100755 --- a/workflow/templates/easy/NIscanIntensBGpar4GblFnc.m +++ b/workflow/apps/easy/NIscanIntensBGpar4GblFnc.m @@ -1184,7 +1184,7 @@ function [Tmpsbdg2, scanIntens, F_spots, bmtp, optomizedPos, TmpexpScanIntens2, title(strcat('Scan',num2str(selScan),'timePt-',num2str(tPt))); clf(hfscanIm,'reset'); set(hfIm,'NumberTitle','off') - set(hfIm,'Name', char(matFile)) % strcat('EASYconsole- ',char(easyResultsDir))) + set(hfIm,'Name', char(matFile)) if Fflg==1 fullfile(fotosResultsDir,strcat('Scan',num2str(selScan),'_timePt-',num2str(tPt))) hgsave(fullfile(fotosResultsDir,strcat('Scan',num2str(selScan),'_timePt-',num2str(tPt)))); %F 14_0626 diff --git a/workflow/templates/easy/PTmats/NCFparms.mat b/workflow/apps/easy/PTmats/NCFparms.mat similarity index 100% rename from workflow/templates/easy/PTmats/NCFparms.mat rename to workflow/apps/easy/PTmats/NCFparms.mat diff --git a/workflow/templates/easy/PTmats/NImParameters.mat b/workflow/apps/easy/PTmats/NImParameters.mat similarity index 100% rename from workflow/templates/easy/PTmats/NImParameters.mat rename to workflow/apps/easy/PTmats/NImParameters.mat diff --git a/workflow/templates/easy/PTmats/NPTdirectParameters.mat b/workflow/apps/easy/PTmats/NPTdirectParameters.mat similarity index 100% rename from workflow/templates/easy/PTmats/NPTdirectParameters.mat rename to workflow/apps/easy/PTmats/NPTdirectParameters.mat diff --git a/workflow/templates/easy/PTmats/NPTmapDirect.mat b/workflow/apps/easy/PTmats/NPTmapDirect.mat similarity index 100% rename from workflow/templates/easy/PTmats/NPTmapDirect.mat rename to workflow/apps/easy/PTmats/NPTmapDirect.mat diff --git a/workflow/templates/easy/PTmats/NPTmapSearch.mat b/workflow/apps/easy/PTmats/NPTmapSearch.mat similarity index 100% rename from workflow/templates/easy/PTmats/NPTmapSearch.mat rename to workflow/apps/easy/PTmats/NPTmapSearch.mat diff --git a/workflow/templates/easy/PTmats/NPTsearchParameters.mat b/workflow/apps/easy/PTmats/NPTsearchParameters.mat similarity index 100% rename from workflow/templates/easy/PTmats/NPTsearchParameters.mat rename to workflow/apps/easy/PTmats/NPTsearchParameters.mat diff --git a/workflow/templates/easy/PTmats/Nbdg.mat b/workflow/apps/easy/PTmats/Nbdg.mat similarity index 100% rename from workflow/templates/easy/PTmats/Nbdg.mat rename to workflow/apps/easy/PTmats/Nbdg.mat diff --git a/workflow/templates/easy/datatipp.m b/workflow/apps/easy/datatipp.m similarity index 100% rename from workflow/templates/easy/datatipp.m rename to workflow/apps/easy/datatipp.m diff --git a/workflow/templates/easy/figs/NPTdirect.fig b/workflow/apps/easy/figs/NPTdirect.fig similarity index 100% rename from workflow/templates/easy/figs/NPTdirect.fig rename to workflow/apps/easy/figs/NPTdirect.fig diff --git a/workflow/templates/easy/figs/searchNPTIm.fig b/workflow/apps/easy/figs/searchNPTIm.fig similarity index 100% rename from workflow/templates/easy/figs/searchNPTIm.fig rename to workflow/apps/easy/figs/searchNPTIm.fig diff --git a/workflow/templates/easy/p4loop8c.m b/workflow/apps/easy/p4loop8c.m similarity index 100% rename from workflow/templates/easy/p4loop8c.m rename to workflow/apps/easy/p4loop8c.m diff --git a/workflow/templates/easy/par4GblFnc8c.m b/workflow/apps/easy/par4GblFnc8c.m similarity index 100% rename from workflow/templates/easy/par4GblFnc8c.m rename to workflow/apps/easy/par4GblFnc8c.m diff --git a/workflow/templates/easy/par4Gbl_Main8c.m b/workflow/apps/easy/par4Gbl_Main8c.m similarity index 96% rename from workflow/templates/easy/par4Gbl_Main8c.m rename to workflow/apps/easy/par4Gbl_Main8c.m index ddcf85f9..a3e4d128 100755 --- a/workflow/templates/easy/par4Gbl_Main8c.m +++ b/workflow/apps/easy/par4Gbl_Main8c.m @@ -244,4 +244,3 @@ for scanCnt=1:numScans fclose(fid); end -EASYconsole; diff --git a/workflow/docs/.~lock.EASY Manual 17_0614.odt# b/workflow/docs/.~lock.EASY Manual 17_0614.odt# new file mode 100644 index 00000000..66d6c281 --- /dev/null +++ b/workflow/docs/.~lock.EASY Manual 17_0614.odt# @@ -0,0 +1 @@ +,bryan,workstation,24.07.2024 21:41,file:///home/bryan/.config/libreoffice/4; \ No newline at end of file diff --git a/workflow/docs/20_0329_SS_Q_HTCP_Analysis_Readme.md b/workflow/docs/20_0329_SS_Q_HTCP_Analysis_Readme.md new file mode 100644 index 00000000..c2a8e79b --- /dev/null +++ b/workflow/docs/20_0329_SS_Q_HTCP_Analysis_Readme.md @@ -0,0 +1,491 @@ +**Readme for Q-HTCP analysis using current (2/17/20) practices-** + +**![][image1]** + +**Figure 1\. Flow diagram for Q-HTCP analysis.** Sections describing steps in current Q-HTCP analysis are indicated numerically. + +**\*\*\* WHAT FOLLOWS IS OUT OF DATE- WE ARE CURRENTLY USING A SET OF SHELL SCRIPT THAT CALLS THE Rscripts DESCRIBED BELOW AND PRODUCES THE DIRECTORIES NEEDED TO LOCATE THE INPUT FILES AND TO RECEIVE THE OUTPUTS. SEE GOOGLE DOC “Copy of Multi-experiment Study Analysis System Guide\_jh24\_0718”** + +**\*\*\*Highlighted words indicate places in your code/script that you will need to modify the name to match the files, path, or description of your particular experiment\*\*\*** + +**It may also be possible to implement Rprojects in order to avoid the need to change file paths. The advantage of Rprojects is that the folder containing the files is the top of the directory, thus the same directory structure can be used on different computers to call and write files from the Rscripts. [seansantos18@gmail.com](mailto:seansantos18@gmail.com)**is this description correct? could this work on the server just as well as it works from our laptops?** + +[**seansantos18@gmail.com**](mailto:seansantos18@gmail.com)**also wanted to ask if it is necessary to use FileZilla to move files around on server from Mac, whereas it is possible to use keyboard shortcuts (cont-C / cont-V) on PC, because there is not “middle click” on a Mac?** + +Prior to performing interaction score analysis, use John Rodgers Matlab software to generate the \!\!results.txt file. Once the \!\!results.txt file is generated view the experiment using John Rodgers’ software; open Matlab 2014 and the most current version of EZView. Run the EZView.mat program and click “Add to path” when prompted. Navigate to /media/data/ExpJobs/YourJobName/Results-date/matResults/date\_reg.mat to view your plates. Look for plate contamination, plate effects (such as much faster/slower growth than normal, or areas with no growth, gradient from the middle – likely did not mix drug well if seeing this), missing image time points, dropped plates, darker images, and curve fits that do not match visual spot growth. When satisfied with the image results and the Matlab analysis, move on to generating the interaction scores. + +**1.0 Generate interaction scores for genome wide experiments from a \!\!results.txt** + +1) Create folder on the server for the new experiment (On server, for most experiments, I’ve used the path /media/data/Santos\_Sean/Q\_HTCP\_Analysis/**Folder**/) + It is also possible to create new directory using command line “mkdir” + Example: + +![][image2] + +1) Copy \!\!results.txt (results sheet from matlab) to folder (add path to \!\!results.txt files) +1) Copy lm\_interaction\_drug\_all\_V5\_do\_not\_print\_avg\_Z.R (interaction score Rscript) to folder (this is located in the Q\_HTCP\_Analysis Folder) +1) Open the terminal within /media/data/Santos\_Sean/Q\_HTCP\_Analysis/**Folder**/ path or use command line to navigate to your new folder using “cd” + Example: cd /media/data/Santos\_Sean/Q\_HTCP\_Analysis/Folder/![][image3] + +1) Run the interaction scores Rscript from the command line using the following: + Rscript lm\_interaction\_drug\_all\_V5\_do\_not\_print\_avg\_Z.R \!\!results.txt ExperimentName\_Analysis1/ + ![][image4] + + ***Modified scripts** can be used to exclude certain data types –* an example we performed was using the JS\_19\_1224 P53 data where the \!\!results.txt contained both WT and 2KR data. We wanted to include only the 2KR data and ran the following modified Rscript:![][image5] + In the above example we used a slightly modified version of the Rscript where we select a subset of the data from \!\!results.txt using the modifications as seen below: + ![][image6] + In the added line of the above R script (last line, shown as opened in the gedit text editor), we subset our data.frame using the specifics column and specify to only include rows where “2KR” is in the specifics column. + + The interaction scores Rscript will generate several files as seen below: + ![][image7] + + The **ZScores\_Interaction.csv** file is the primary output containing the interaction scores and is used as the input output file for most of the downstream analysis. + ![][image8] + + + + + +1) After interaction scores are generated, **check the Frequency\_delta\_background.pdf file** in the QC folder to identify data that could possibly be contaminated. The default setting will remove any strains where the delta background is 3SD from the mean, but **if there is no or almost no contamination, you may need to set this threshold higher to 5 or above**. Find the following lines in the lm\_interaction\_drug\_all\_V5\_do\_not\_print\_avg\_Z.R and change 3\*sd to 5\*sd or a higher value. Use **Save As** (not just save) to rename the lm\_interaction\_drug\_all\_V5\_do\_not\_print\_avg\_Z.R to something such as lm\_interaction\_drug\_all\_V5\_do\_not\_print\_avg\_Z\_deltabackground5SD.R. + + ![][image9] + + **1.1 REMc** + + **\*\*\* WHAT FOLLOWS IS OUT OF DATE- THE REMc PROCESS IS NOW INCORPORATED IN A JAR FILE AND IN A SHELL SCRIPT THAT ALSO CALLS Rscripts TO ARRANGE DATE. SEE GOOGLE DOC “Copy of Multi-experiment Study Analysis System Guide\_jh24\_0718”** + + At this stage, we want to compare multiple experiments to each other to identify phenomic modules of interest. Recursive Expectation Maximization clustering (REMc) can be used to cluster interaction scores and then perform biological enrichment analysis. + \-See doi: [10.1063/1.3455188](https://doi.org/10.1063/1.3455188) for the Chaos paper and Jingyu Guo’s readme.V2 to set up Eclipse. + +1) **Merge the files**. This can be done using **R or Excel**; **if you want to use R see appendix 3.1 – you will need to use R if the total number of genes between experiments are not the same\!** Using Excel, open the first **ZScores\_Interaction.csv** file of interest. \*\*\***Sort by OrfRep\*\*\***. **Copy** the **OrfRep, Gene, Z\_Shift\_L, Z\_lm\_L, Z\_Shift\_K, Z\_lm\_K** columns into a new excel sheet. Rename the **Z\_Shift\_L, Z\_lm\_L, Z\_Shift\_K, Z\_lm\_K** to have descriptive names preceding the current column names for example **Gem\_Z\_Shift\_L, Gem\_Z\_lm\_L, Gem\_Z\_Shift\_K, Gem\_Z\_lm\_K**. Open the next **Zscores\_Interaction.csv** file of interest, \*\*\***Sort by OrfRep (don’t forget to do this or the ORFs will not match\!)\*\*\***, and repeat the same steps to add additional experiment columns to the new Excel sheet. Give different descriptive names. For example: **Cyt\_Z\_Shift\_L, Cyt\_Z\_lm\_L, Cyt\_Z\_Shift\_K, Cyt\_Z\_lm\_K**. Repeat this process for as many experiments you want to compare in REMc. I generally reorganize the excel sheet at this step so that the order of columns is how I want to output the heatmaps later on (i.e. All K values to the left, all L values to the right, alternate Z\_Shift and the Z\_lm). I also generally save this file as “Date\_Description\_ShiftInt\_WithNAs.csv” (can also save as excel (.xlsx) format – doesn’t really matter yet). Below is an example of how this file looks (using gemcitabine (Gem) and cytarabine (Cyt) as an example. + + ![][image10] + + + + + + + +1) **Substitute the NAs**. For REMc to work correctly and to allow proper heatmap display we will substitute the NA values with small, non-zero values. Open the “Date\_Description\_ShiftInt\_WithNAs.csv” file in excel and **select only the “Shift columns”**. Perform a **find and replace** using find “NA” and replace with “0.001”. + + ![][image11] + + Next, replace the NAs in the Z\_lm columns using **find and replace** to find “NA” and replace with “0.0001”. Note the extra significant digit here – the heatmap script cannot draw the dendrogram if all the values for a gene across a row are NAs and will error out. Thus, we want to be able to identify NAs in one set of columns, but also be able to draw the dendrogram by giving some small value that will cluster away from the rest of the data, and so the script only generates “NAs” in rows with the 0.001 value (shift) but will print the Z\_lm value as a white color to indicate NAs in this way. + + ![][image12] + + After substitution, the example looks like the following: + +![][image13] + +I generally name this file “Date\_Description\_ShiftInt\_NArem.csv” + +1) **Fill empty cells in the gene column by copying over ORF name. *Some ORFs do not have assigned gene names.* **Fill in the ‘missing’ genes** (if there are any – this will depend on the \!\!results.txt file. If there are blanks in the genes column, this can cause issues with REMc and heatmap generation. If it is a genome wide experiment (making sure it is sorted by OrfRep), I will often copy and paste over the Gene column from a previous genome wide experiment with the gene names filled in. However, I also have an R script that can fill in the missing names and updates gene names (and if no name is given it replaces it with the OrfRep). The Rscript is named **14\_0430\_cmd\_MatchGenes.R**. See the following for usage: + + Rscript 14\_0430\_cmd\_MatchGenes.R input\_file.csv SGD\_features.tab output\_file + + Arg 1\) Input\_file.csv + \-This should be your “Date\_Description\_ShiftInt\_NArem.csv” file generated in step 2\. Make sure that OrfRep or ORF is in column 1 and Gene is in column 2\. + Arg 2\) SGD\_features.tab – download this from [https://downloads.yeastgenome.org/curation/chromosomal\_feature/](https://downloads.yeastgenome.org/curation/chromosomal\_feature/) + Arg 3\) output\_file + \-The name you want to give the file. I generally call this file “Date\_Description\_ShiftInt.csv” + +![][image14] + +We will also need to remove all unusual characters in the gene column after adding the gene names (as above, either by copy/paste or by 14\_0430\_cmd\_MatchGenes.R). Open the newly created file (“Date\_Description\_ShiftInt.csv”) in excel and use the find function to **look for the following characters** – comma (**,**) or asterisk (**‘**) and **replace the gene name with the OrfRep** in all instances. Also search for **YKL134C** – in the corresponding gene column, excel will auto change this to a date (October 1). Change the gene name to YKL134C to prevent this conversion at any step. + +1) **Select only the L and K z-scores above |2| for input into REMc** (if you want to cluster all the data you can skip this step, but in general selecting only the values above 2SD tends to clean up the clustering). I generally do this as an “ad-hoc” analysis in R and will give example code below. Open RStudio and create a new R Script. You can copy and paste the following into R and will only need to modify bolded parts (see below): + + X \<- read.csv(file="**filePath/Date\_Description\_ShiftInt.csv**",stringsAsFactors \= FALSE) + + X \<- X\[abs(X$**DescName1**\_Z\_lm\_K) \>= 2 | abs(X$**DescName1**\_Z\_lm\_L) \>= 2 | abs(X$**DescName2**\_Z\_lm\_K) \>= 2 | abs(X$**DescName2**\_Z\_lm\_L) \>= 2,\] + + write.csv(X,file \= "**filepath/Date\_Description\_ShiftInt\_Above2SD.csv**",row.names \= FALSE) + ![][image15] + + \-change “**filePath/Date\_Description\_ShiftInt.csv**” to the file path to your file and then the name of your file. Use tab within the quotation marks in RStudio to help locate files. + \-Change “**DescName1**” and “**DescName2**” to whatever descriptive name you gave your headers in Date\_Description\_ShiftInt.csv (i.e. could be “Gem” and “Cyt”) + \-replace “**filepath/Date\_Description\_ShiftInt\_Above2SD.csv**” with a path to the file you want to create. + \-Save and run the above R script with a descriptive name such as “Date\_Get2SD\_for\_ExperimentDescription.R” in case you need to go back and see what you did. + +1) **Generate files for REMc** and for later adding the shift values back into the heatmaps (we don’t cluster the shift values but are interested in using them at the heatmap stage to identify genes where deletion results in a large initial shift indicating “sick” strains). \-Open the “Date\_Description\_ShiftInt\_Above2SD.csv” created in step 4 (or “Date\_Description\_ShiftInt.csv” generated in step 3 if step 4 was skipped and you want to use all genes regardless of z-score for clustering) in Excel. + i) **Remove** all of the **columns with shift values** and save the file as “**Date\_Description\_REMcReady.csv**”. This file is used as input for REMc. + ii) Reopen “Date\_Description\_ShiftInt\_Above2SD.csv” and **remove** all the **columns with Z\_lm scores**. Save this file as “Date\_Description\_Shift.csv”. This file will later be used to add the shift values back when generating heatmaps associated with REMc generated clusters. + +1) **Perform REMc**. Copy the “**Date\_Description\_REMcReady.csv**” file generated in step 5 to your eclipse-workspace/REMc/ directory. **Open eclipse** by double clicking on the eclipse icon in the eclipse folder in your home folder. Once in eclipse, **select “Run” and then** “**Run configurations**” from the top menu. + +![][image16] +Next, select the Arguments tab and look to see that you have the following: + +Program arguments: + +Date\_Description\_REMcReady.csv + +GeneByGOAttributeMatrix\_nofiltering-2009Dec07.tab + +ORFs\_w\_DAmP\_list.txt + +1 + +true + +VM arguments: + +\-Xms8000m \-Xmx8000m + +![][image17] + +Once set, you will only need to alter the first line in program arguments to the name of your **Date\_Description\_REMcReady.csv** file. Select **apply** and then **run** in the bottom right corner to perform REMc on the selected file. Look to see if any errors are generated after hitting run (common errors here are due to unexpected characters in the ORF or Gene columns, or non-numeric values in the other columns (such as “NA”). If REMc is running, in the eclipse-workspace/REMc/ directory you should see a file called **Date\_Description\_REMcReady.csv-WholeTree.csv**. This file will be updated every few minutes as new clusters are generated. After completion of REMc, you should have **Date\_Description\_REMcReady.csv-WholeTree.csv**, **Date\_Description\_REMcReady.csv-finalTable.csv**, **Date\_Description\_REMcReady.csv-summary.csv**, **Date\_Description\_REMcReady.csv.arff**. Copy these files to a new directory with a descriptive name to perform REMc (such as **Date\_Description\_Clustering/**). + +**1.1.1 GTF (Gene Ontology Term Finder)** + +GTF will look for enriched gene ontology terms in the REMc clusters. Several files are required to run GTF and they must be copied to the working folder (I usually create a new folder to contain all of the REMc/GTF files) to run GTF. + +1\) **Make a new folder, e.g., ‘Clustering’, in the project folder and** **Copy REMc and GTF files to the new folder**. (Most of Sean’s Clustering results are on Data2/Santos\_Sean/Documents/Hartman\_Lab/ACS\_project/). Once REMc is finished, which is described in the previous section, copy the following files to your working folder **Date\_ResultsDescription\_REMcReady.csv-finalTable.csv**, **Date\_ResultsDescription\_REMcReady.csv-WholeTree.csv, Date\_ResultsDescription\_REMcReady.csv-summary.csv**. Next, copy to your working folder the files located in the following directory on the server: **/media/data/Santos\_Sean/GTF\_Files/** + +![][image18] + +If the copy/paste function doesn’t work for you on the server from Xquartz (we’ve had issues with this on Mac OS), then use FileZilla to copy the files to your computer (files in **/media/data/Santos\_Sean/GTF\_Files/**) and then you can copy the files from wherever you save them on your local computer to your working folder on the server. It’s good practice to make a backup of the files off of the server, but one can skip this step by copying them to the server desktop (which exists on a different drive) and then copy back again to the desired folder (dragging between folders on the same drive moves rather than copies the files). + +In your working directory, create folders named “Process”, “Function”, and “Component” and we will perform GTF for each of these ontologies in these folders. Copy the GTF files into these folders. (The GTF files can be removed from these folders after GTF is complete to save space). Copy **DconJG.py and AddShiftVals.R** into the parent folder as well (needs to be in same directory as the **.csv-finalTable.csv** file. In the example of P53\_NoDamps (involving HLD, HLEG, WT and 2KR), there were 5 different comparisons, with component, function and process GTF for each. Also note, ‘Pairwise\_Comparisons’ and ‘Multiple\_Comparisons’ folders are GTA only. + +2\) **Run the DconJG.py script**. GTF requires files to have a specific format and to generate text files for each cluster in this format we can apply the DconJG.py script. To run this script, open the command line in your working folder and apply the script in the following format: + +**python DconJG.py Date\_Results\_REMcReady.csv-finalTable.csv cluster\_origin\_column\_num output\_path\_name** + +\-the cluster\_origin\_column\_num tells the script where the header/column containing “cluster\_origin” is located in the \-finalTable.csv file. (i.e. – is it in the 8th column, 10th column, etc.?) + +![][image19] + +\-I usually put a “./” as the argument for “output\_path\_name”, which makes a folder in my working directory with the same name as my input \-finalTable.csv file. Copy the resulting folder containing the .txt files for each cluster into the “Process”, “Function” and “Component” directories. + +3\) **Perform GTF**. In the process folder in your working directory, run the “**Process\_example\_v4.sh**” script: + +**./Process\_example\_v4.sh ORFs\_w\_DAmP\_list.txt Date\_Results\_REMcReady/\*.txt** + +\-If necessary, substitute “ORFs\_w\_DAmP\_list.txt” with the proper background file containing a list of ORFs to include as the background for GTF. For example, if DAmPs were excluded use the 17\_0503\_ORF\_list\_without\_DAmPs.txt file. + +![][image20] + +In the Function and Component folder, run the “**Component\_example\_v2.sh**” and “**Function\_example\_v2.sh**” scripts in their respective folders using the same arguments as the Process\_example\_v2.sh. \*\*\* if you do not run these scripts in separate folders, you will overwrite the results from one ontology with another\*\*\* + +In your **Date\_DescriptionOfResults\_REMcReady/** folder, new .terms.txt and .tsv text files should be generated ) and GTF will run through all .txt files for clusters (can take 10 mins to an hour depending on how many total clusters). The example below shows the files created after running GTF. + +![][image21] + +4\) **Concatenate the GTF results.** Use the Concatenate\_GTF\_results.py file to concatenate the GTF results for each ontology by running this script in the folder for each respective ontology. The script can be used in the following way: + +python Concatenate\_GTF\_results.py Date\_DescriptionOfResults\_REMcReady/ Date\_GTF\_Results\_**Ontology**\_DescriptionoOfResults.txt + +![][image22] + +\-Make sure to change “Ontology” in the above line to either “Process”, “Function”, or “Component”. + +Lastly, I prefer to compile the concatenated results sheets into one excel document. To do this, I will copy the files to my computer using FileZilla and then copy and paste the tables to separate worksheets in the same Excel document and save this file as Date\_GTF\_Results \_DescriptionOfResults.xlsx + +**1.1.2 Heatmap generation for REMc**. Automatic generation of heatmaps from REMc clusters can be performed using the Rscript “**18\_0205\_heatmaps\_zscores\_2SD\_color\_NARem\_Z\_lm.R**”. This file can be found in **/media/data/Santos\_Sean/Rscripts/REMc\_Heatmaps/** + +Before we make heatmaps, we prefer to add the shift values back with the interaction scores in Date\_Description\_REMcReady.csv-finalTable.csv. + +1\) **Add back the shift values**. Use “**AddShiftVals.R**” to add the shift values back to the Date\_Description\_REMcReady.csv-finalTable.csv. Use the script in the following format: + +Rscript AddShiftVals.R Date\_Description\_REMcReady.csv-finalTable.csv Date\_Description\_Shift.csv Date\_Description\_REMcReady.csv-finalTable**WithShift**.csv . Note: ‘Date\_Description\_Shift.csv’ was saved when the shift values were removed just prior to REMc (see 1.1\_5)). + +This will generate a file with both the interaction scores and the shift values in the finalTable.csv format. However, we will need to **reorganize** the Date\_Description\_REMcReady.csv-finalTable**WithShift**.csv so that each shift values is correctly ordered to the left of its associated Z\_lm interaction score. Open the Date\_Description\_REMcReady.csv-finalTable**WithShift**.csv file in excel and manually reorder the shift values to their correct location. + +2\) **Run the heatmap script**. Use **18\_0205\_heatmaps\_zscores\_2SD\_color\_NARem\_Z\_lm.R** to generate the heatmaps. Use this script as described below: + +Rscript 18\_0205\_heatmaps\_zscores\_2SD\_color\_NARem\_Z\_lm.R Date\_Description\_REMcReady.csv-finalTable**WithShift**.csv Heatmaps/ + +\-this will create a folder called “Heatmaps” in your directory with PDFs for all REMc clusters. + +3\) **Concatenate the heatmaps into one PDF**. Use pdf tool kit to concatenate the heatmaps by running the following line in the command line in your working folder. + +pdftk Heatmaps/\*.pdf output Date\_Description\_Heatmaps.pdf + +**1.2** **GTA Analysis**. Gene Ontology (GO) term averaging (GTA) is performed first on a single experiment (1.2.1) and later can be compared pairwise to other GTA experiments (1.2.2) by generating interactive plots. GTA assigns GO terms an average Z score based on the interaction z-scores (L- or K-based) for all genes in that GO term, and then assigns significance to GO terms with a Z-score above |2| after subtracting the standard deviation. In general, we have observed that GTA tends to identify smaller GO terms that may not have been identified by REMc/GTF. + +**1.2.1 Generate GTA results.** + +Open terminal in or navigate in the terminal to /media/data/Santos\_Sean/Q\_HTCP\_Analysis/. In this folder we will use the ScoreAllGOTerms\_From\_Z\_lm\_V2.R scriptgen to generate GTA scores. Run this script on your experiment using the following arguments/files: + +Rscript ScoreAllGOTerms\_From\_Z\_lm\_V2.R Exp\_Name/Analysis1/ZScores\_Interaction.csv go\_terms.tab gene\_association.sgd Exp\_Name/GTA\_Results/ + +\-Several files will be generated in the specified directory, but the file with all of the GTA results is named “**Average\_GOTerms\_All.csv**” and will be used in the next step of pairwise analysis of experiments. + +![][image23] + +**1.2.2 Pairwise GTA analysis.** Comparing GTA between two experiments will create the interactive plots and associated tables for GTA identified GO terms. This analysis can be performed in the /media/data/Santos\_Sean/Q\_HTCP\_Analysis/ directory using the following scripts: **Compare\_GTF\_Averages\_BetweenScreens\_lm\_v2.R** for L values and **Compare\_GTF\_Averages\_BetweenScreens\_lm\_Kvals\_v2.R** for K values. + +The two scripts take the same arguments (you only need to specify which script is being used for L or K after writing Rscript in the command line) and can be run using the following: + +Rscript Compare\_GTF\_Averages\_BetweenScreens\_lm\_v2.R Exp1/GTA\_Results/ Average\_GOTerms\_All.csv Exp1\_Name Exp2/GTA\_Results/Average\_GOTerms\_All.csv Exp2\_Name Pairwise\_Comparisons/Exp1\_vs\_Exp2/GTA\_L/ + +\-In the Pairwise\_Comparisons directory, you will need to create the folder for your comparison first because the Rscript will only allow you to make one new directory time + +**1.3 Term Specific Heatmaps** + +Open terminal to or navigate in the terminal to /media/data/Santos\_Sean/Q\_HTCP\_Analysis/ and the term specific heatmaps Rscripts are in this directory. + +\-Depending on the number of experiments you want to compare, select one of the following scripts: **GO\_list\_All\_ChildTerms\_lmZscore\_max100child\_Heatmaps\_V2.R** can be used to compare two experiments, **GO\_list\_All\_ChildTerms\_lmZscore\_max100child\_Heatmaps\_3terms\_V2.R** for 3 experiments, **GO\_list\_All\_ChildTerms\_lmZscore\_max100child\_Heatmaps\_4terms\_V2.R** for 4, **GO\_list\_All\_ChildTerms\_lmZscore\_max100child\_Heatmaps\_5terms\_V2.R** for 5\. + +![][image24] + +Follow the directions for the Rscript appropriate for the number of experiments you are comparing by opening the Rscript in either Rstudio or gedit and looking at what arguments to use. The number of arguments will be greater if a greater number of experiments are being compared. For the GO\_list\_All\_ChildTerms\_lmZscore\_max100child\_Heatmaps\_V2.R Rscript it can be used in the command line using the following: + +Rscript GO\_list\_All\_ChildTerms\_lmZscore\_max100child\_Heatmaps\_V2.R Exp1\_ZScores\_Interaction.csv Exp1\_name Exp2\_ZScores\_Interaction.csv Exp2\_Name gene\_ontology\_edit.obo go\_terms.tab All\_SGD\_GOTerms\_for\_QHTCPtk.csv Pairwise\_Comparisons/Exp1\_vs\_Exp2/TermSpecificHeatmaps/ + +\-The All\_SGD\_GOTerms\_for\_QHTCPtk.csv file can be substituted for another file with a list of GO\_IDs if you only want to run it on certain GO\_terms – I’ve created a few examples in the following path: /media/data/Santos\_Sean/Q\_HTCP\_Analysis/Pairwise\_Comparisons/Query\_Term\_Lists/ + +\-For greater than 2 experiments, there will be more arguments to load in the Exp\#\_ZScores\_Interaction.csv and the Exp\#\_Name. + +**3\. Other Rscripts** + +**3.1 Pairwise Venn Diagrams and CPP Correlation plots to compare two experiments.** I generally perform this analysis right after performing GTA and creating a folder for the two experiments I am comparing in the **Pairwise\_Comparisons** folder. Use the Rscript at the following file path: /media/data/Santos\_Sean/Q\_HTCP\_Analysis/**Compare\_Pairwise\_Overlap\_VennDiagrams\_confined\_to\_matches\_V2.R** + +Usage (shown as run from /media/data/Santos\_Sean/Q\_HTCP\_Analysis/): + +Rscript Compare\_Pairwise\_Overlap\_VennDiagrams\_confined\_to\_matches\_V2.R Exp1/Exp1\_Analysis1/Exp1\_InteractionScores.csv Exp1\_Name Exp2/Exp2\_Analysis1/Exp2\_InteractionScores.csv Exp2\_Name Pairwise\_Comparisons/Exp1\_vs\_Exp2/VennDiagrams\_and\_Correlation/ + +This script will output Venn Diagrams for overlap between the two experiments when comparing enhancers and suppressors (defined as Z \> |2|). It will generate lists for the intersecting genes, and genes that are experiment-specific deletion enhancers or suppressors as .csv tables. It will also perform a CPP comparison by plotting the L, K, R, and AUC values across experiments and print a correlation coefficient (R2) for a linear regression fit. It will also create graph plotting the ranked CPP scores against each other. There will be four output folders but using the updated model we only want to look at the “**lm\_both**” results. **Ignore** the “Avg\_Zscore\_Both (alex’s method)” and the “lm\_exp1\_only” and “lm\_exp2\_only” (these compare alex’s method and the updated linear model method). I can remove these extra comparisons if too confusing. + +**3.2 CPP analysis for YKO/YKD/RF for one experiment (all CPPs by all CPPs).** Use the Rscript at the following file path: /media/data/Santos\_Sean/Q\_HTCP\_Analysis/**CPP\_Comaprison\_with\_DAmPs\_and\_RF.R** + +Usage (shown as run from /media/data/Santos\_Sean/Q\_HTCP\_Analysis/): + +Rscript CPP\_Comaprison\_with\_DAmPs\_and\_RF.R ExpName/ExpName\_Analysis1/ExpName\_InteractionScores.csv ExpName/ExpName\_Analysis1/ExpName\_**RF\_InteractionScores**.csv 16\_0531\_DAmPs\_Only.csv ExpName/ExpName\_Analysis1/CPP\_Compare/ + +\-Three PDFs will be created after this analysis: 1\) CPPs only for the YKO. 2\) CPPs from YKO and YKD as different colors. 3\) YKO, YKD and RF as different colors. + +\-After generating these files, I check to make sure that the RF interaction scores generally fall into the range of \+2 to \-2. I also look to see if the DAmPs have a different distribution than the YKO. + +**3.3 Heatmaps with homologs.** Use the Rscript at the following file path: /media/data/Santos\_Sean/GTF\_files/**20\_0328\_heatmaps\_Z\_lm\_wDAmPs\_andHomology.R** + +Uses the following arguments: + +1) EXP\_REMcReady.csv-finalTableWithShift.csv +1) Output folder +1) 17\_0503\_DAmPs\_Only.txt (see path below) +1) Yeast\_Human\_Homology\_Mapping\_biomaRt\_18\_0920.csv (see path below) + +Usage: Rscript 20\_0328\_heatmaps\_Z\_lm\_wDAmPs\_andHomology.R EXP\_REMcReady.csv-finalTableWithShift.csv Heatmaps\_Homologs/ /media/data/Santos\_Sean/GTF\_files/17\_0503\_DAmPs\_Only.txt /media/data/Santos\_Sean/GTF\_files/Yeast\_Human\_Homology\_Mapping\_biomaRt\_18\_0920.csv  + +\-The script will generate a folder with heatmaps including homology info for the genes in the finalTable file and two .csv files, one with all the yeast genes from the original finalTable (even without homologs) and one list only with the homologs. + +**4.0 Appendix.** + +**4.1** **Using R to merge files** (see REMc 1.1 step 1). R can be used to merge two tables using the join function from the plyr package. If you have not installed this package (only need to do this once), open R studio and type install.packages(“plyr”) into the console and follow the instructions to install the package. In R studio modify the following lines by changing the highlighted portion to the path to your files + +\#open required library for the join function + +library(plyr) + +\#read in the files for your experiment + +X1 \<- read.csv(file="FilePath/Exp1\_ZScores\_Interaction.csv",stringsAsFactors \= FALSE) + +X2 \<- read.csv(file=" FilePath/Exp2\_ZScores\_Interaction.csv",stringsAsFactors \= FALSE) + +\#join the two files, **list the larger file first** – in this example X2 has the larger number of genes. + +\#if X1 has a larger number of genes, switch the order of X1 and X2 + +X \<- join(X2,X1,by="OrfRep") + +\#write new file + +write.csv(X,file \= " FilePath/DescriptiveName\_withNAs.csv",row.names=F) + +\-If you need to join more than two tables together you will have to write more than one join. You will first need to join two of the tables, create an object, and then join that object with the next file, and so on… + +See below for an example of multiple files + +\#open required library for the join function + +library(plyr) + +\#read in the files for your experiment + +X1 \<- read.csv(file="FilePath/Exp1\_ZScores\_Interaction.csv",stringsAsFactors \= FALSE) + +X2 \<- read.csv(file=" FilePath/Exp2\_ZScores\_Interaction.csv",stringsAsFactors \= FALSE) + +X3 \<- read.csv(file=" FilePath/Exp3\_ZScores\_Interaction.csv",stringsAsFactors \= FALSE) + +X4 \<- read.csv(file=" FilePath/Exp4\_ZScores\_Interaction.csv",stringsAsFactors \= FALSE) + +\#join the two files, list the larger file first – in this example X2 has the largest number of genes. + +\#if X1 has a larger number of genes, switch the order of X1 and X2 + +X \<- join(X2,X1,by="OrfRep") + +X \<- join(X,X3,by=”OrfRep”) + +X \<- join(X,X4,by=”OrfRep”) + +\#write new file + +write.csv(X,file \= " FilePath/DescriptiveName\_withNAs.csv",row.names=F) + +**5.2 Removing DAmPs** + +Use the R script at the following path: /media/data/Santos\_Sean/Q\_HTCP\_Analysis/Exclude\_DAmPs.R + +Rscript Exclude\_DAmPs.R Input\_File.csv 17\_0503\_DAmPs\_Only.txt output\_file.csv + +Arg 1 – Use any file with OrfRep column that you want to remove the DAmPs from, for example: Zscores\_Interaction.csv or REMcReady.csv, \-finalTable.csv files + +Arg 2 \- /media/data/Santos\_Sean/Q\_HTCP\_Analysis/**17\_0503\_DAmPs\_Only.txt** + +Arg 3 – output file name; make sure to have the .csv extension. + +**\-Alternatively, create a new script using the following script by Copy and pasting the following lines into R and modify the highlighted sections to match the file you want to** + +X \<- read.csv(file="path/FileToRemoveDAmPsFrom.csv",stringsAsFactors \= FALSE) + +Damps \<- read.delim(filepath/**17\_0503\_DAmPs\_Only.txt**",header=F) + +\#create a column in X1 called ORF so we can remove OrfRep numbers and find all the DAmPs + +X$ORF \<- X$OrfRep + +\#remove \_1-4 from newly created ORF column + +X$ORF \<- gsub("\_1","",x=X$ORF) + +X$ORF \<- gsub("\_2","",x=X$ORF) + +X$ORF \<- gsub("\_3","",x=X$ORF) + +X$ORF \<- gsub("\_4","",x=X$ORF) + +X \<- X\[\!(X$ORF %in% Damps$V1),\] + +write.csv(X,file \= "path/output\_file\_noDAmPs.csv",row.names \= FALSE) + +\*the **17\_0503\_DAmPs\_Only.txt** file is in the following path on the server: + +/media/data/Santos\_Sean/GTF\_Analysis/**17\_0503\_DAmPs\_Only.txt** + +\-The above script could also be used to remove any set of genes from another, but you would substitute the 17\_0503\_DAmPs\_Only.txt with a set of OrfReps saved as a tab delimited file with one ORF per line and no header. + +**5.3 Adjust ZScores for YKO only and remove DAmPs** + +\-We discussed a script that would remove the DAmPs and also adjust the ZScores for CPPs to only consider the YKO strains in the z-score calculation. + +Use the file at the following path: /media/data/Santos\_Sean/Q\_HTCP\_Analysis/**Adjust\_YKO\_Zscores\_RemoveDAmPs.R** + +Usage: + +Rscript Adjust\_YKO\_Zscores\_RemoveDAmPs.R ZScores\_Interaction.csv 17\_0503\_DAmPs\_Only.txt AdjustedZScores\_noDAmPs/ + +Arg 1 – Use the Zscores\_Interaction.csv file where you want to adjust the YKO ZScores and remove the damps + +Arg 2 \- /media/data/Santos\_Sean/Q\_HTCP\_Analysis/**17\_0503\_DAmPs\_Only.txt** + +Arg3 – a file path to put the files that will be created into (will create a new ZScores\_Interaction.csv with the adjusted scores in the Z\_lm\_ columns, a scatterplot of the initial Z scores vs adjusted, and new rank plots for the adjusted scores). + +**5.4 Files that are updated from databases.** + +gene\_ontology\_edit.obo \- [www.geneontology.org/ontology/gene\_ontology\_edit.obo](http://www.geneontology.org/ontology/gene\_ontology\_edit.obo) + +SGD\_features.tab \- [https://downloads.yeastgenome.org/curation/chromosomal\_feature/](https://downloads.yeastgenome.org/curation/chromosomal\_feature/) + +go\_terms.tab \- [https://downloads.yeastgenome.org/curation/literature/](https://downloads.yeastgenome.org/curation/literature/) + +\*\*\*\*\*\*\*\*\*\*Adding information about how JH updated files in summer of ‘23: + +Updating Q-HTCP Source Files: + +**gene\_ontology\_edit.obo** + +Direct link to the latest file: +[https://purl.obolibrary.org/obo/go.obo](https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpurl.obolibrary.org%2Fobo%2Fgo.obo\&data=05%7C01%7Cjhartman%40uab.edu%7C0cf8e0ce5ae74943d3bd08dbc1388a83%7Cd8999fe476af40b3b4351d8977abc08c%7C1%7C0%7C638316220828714336%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C\&sdata=4LRsWT5N44VOOrAX9aby7qWa5ece0NDh6BlhW0r%2FAdA%3D\&reserved=0) + +^^copy this into a new text file and give the same name. + +More info about the file, where it comes from, and the Gene Ontology consortium: +[https://geneontology.org/docs/download-ontology/](https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgeneontology.org%2Fdocs%2Fdownload-ontology%2F\&data=05%7C01%7Cjhartman%40uab.edu%7C0cf8e0ce5ae74943d3bd08dbc1388a83%7Cd8999fe476af40b3b4351d8977abc08c%7C1%7C0%7C638316220828714336%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C\&sdata=s%2FDjYbaA%2FkK%2FwIKsfGhKnS%2BconR11mkBrnxnlX9QMrw%3D\&reserved=0) + +You can also use SGD's GO Term Finder, which always has the latest ontology and annotations: +[https://www.yeastgenome.org/goTermFinder](https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.yeastgenome.org%2FgoTermFinder\&data=05%7C01%7Cjhartman%40uab.edu%7C0cf8e0ce5ae74943d3bd08dbc1388a83%7Cd8999fe476af40b3b4351d8977abc08c%7C1%7C0%7C638316220828714336%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C\&sdata=EiFqHvWQI49caPBayi44CbfVfXcqqXjTeN9TMY8%2Faz8%3D\&reserved=0) + + +**SGD\_features.tab** + +Best to use YeastMine – see notes and files from work/yeast strains/ **’23\_0914\_NewMPFile\_Construction.xlsx’** +Need to use the new, updated KO ORF list (made compatible with the final SGD edition of the genome) to get the new gene names, and just replace them in an existing file to update. + + +**Go\_terms.tab** + +The go\_terms.tab file can be generated using YeastMine with a single click. + +From the ‘Retrieve GO Terms’ template ([https://yeastmine.yeastgenome.org/yeastmine/template.do?name=GO\_Terms\_Tab\&scope=all](https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fyeastmine.yeastgenome.org%2Fyeastmine%2Ftemplate.do%3Fname%3DGO\_Terms\_Tab%26scope%3Dall\&data=05%7C01%7Cjhartman%40uab.edu%7C2eec1f6ea1c14c0971a408dbc13bc3c9%7Cd8999fe476af40b3b4351d8977abc08c%7C1%7C0%7C638316235117030364%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C\&sdata=1KnL5BeJIw3LHr%2F4vy%2FoM1sh%2FBMV0tXQBYtHpaIqHCQ%3D\&reserved=0)), click the green ’Show Results’ button, voila. You can download the file via the ‘Export’ button on the results page. + +The updated Go\_terms.tab file was problematic \- it was different from the original in the style of (col 1\) GO\_ID column entries (e.g., ‘GO:0000001’ instead of ‘1’, and (col 3\) ‘biological\_process’ instead of ‘P’. It also had 122 fewer rows/entries (42887 instead of 4409\). + +The above columns can be fixed by using “text to columns” with ‘:’ as the delimiter, and then doing find/replace for P, F, and C. +File updated 2024\_0125 (42,442 rows). Original had 44,009 and last update 42,887… so numbers are getting smaller. One can find updates at: Gene Ontology FAQ: [https://geneontology.org/docs/faq/\#ontology](https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgeneontology.org%2Fdocs%2Ffaq%2F%23ontology\&data=05%7C02%7Cjhartman%40uab.edu%7C4f087305933b4fa99c0a08dc1df646e3%7Cd8999fe476af40b3b4351d8977abc08c%7C1%7C0%7C638418190840735342%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C\&sdata=bkb%2FAv350Z12qddJZeFLDFgxHYxM%2FWHazBOVJ%2BPeO4Q%3D\&reserved=0) + +**gene\_association.sgd** + +The gene\_association.sgd file (‘gaf’) is still served from the Downloads site and can also be accessed even more easily via SGD search. + +Downloads site: +[http://sgd-archive.yeastgenome.org/curation/literature/](https://nam12.safelinks.protection.outlook.com/?url=http%3A%2F%2Fsgd-archive.yeastgenome.org%2Fcuration%2Fliterature%2F\&data=05%7C01%7Cjhartman%40uab.edu%7C4985afdc22f24a1ff21d08dbc1422ebe%7Cd8999fe476af40b3b4351d8977abc08c%7C1%7C0%7C638316262252331525%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C\&sdata=Fc4mkGqT2a3UL8gNeObm7huuQR%2FzH1KTWd%2FZjpStlz8%3D\&reserved=0) + +From SGD Search (search for ‘gaf’, then click category ‘Downloads’): +[https://www.yeastgenome.org/search?q=gaf\&category=download\&status=Active](https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.yeastgenome.org%2Fsearch%3Fq%3Dgaf%26category%3Ddownload%26status%3DActive\&data=05%7C01%7Cjhartman%40uab.edu%7C4985afdc22f24a1ff21d08dbc1422ebe%7Cd8999fe476af40b3b4351d8977abc08c%7C1%7C0%7C638316262252331525%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C\&sdata=JTDNv83D31LvU25UynBuVor7V6X4z28hpU6Sml3HIbc%3D\&reserved=0) + +\*\*\*\*\*\*\*\*\*\*\*\* + +[image1]: + +[image2]: + +[image3]: + +[image4]: + +[image5]: + +[image6]: + +[image7]: + +[image8]: + +[image9]: + +[image10]: + +[image11]: + +[image12]: + +[image13]: + +[image14]: + +[image15]: + +[image16]: + +[image17]: + +[image18]: + +[image19]: + +[image20]: + +[image21]: + +[image22]: + +[image23]: + +[image24]: \ No newline at end of file diff --git a/workflow/docs/20_0329_SS_Q_HTCP_Analysis_Readme.odt b/workflow/docs/20_0329_SS_Q_HTCP_Analysis_Readme.odt new file mode 100644 index 0000000000000000000000000000000000000000..426614f458f5dc989a6c0f193e41e8273671497e GIT binary patch literal 1819969 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 ^ZcLu3w^=vc4YUQmtfRlQ6iB8@G+rya)Q_nqG! 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 z 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ⅈVy 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�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

@o(?GCZ}~2m&iEHu4nOOxyyCZd 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

$yDKVU%+Zqhx4dPv>Kh(BC?c+f9< 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

HW3 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

MU!7D-+ zzWp&sjEuc5iHn*S-QAl=w4r{HKq&Pf&XeR4Y2{{o08@W^_qf(?q4jD}{4USha2kh0 zR0p1U*tvH@8-F|l{6~UY!?$5~O1VuV-w7xlUUr5mLjzMEN#D(q}T%Pr2 zEJUkh4mmaFZmpGCsa@z4NRu*s8heK4V@5qb^1K-b&sJ!`q#LNd-mi%?IP{ro=%Pjg z?qhcT^?7g8-qc6~C(0BXhkJaU@k%XFGsLk_9OsqVmy(y@z?nng^ki{$jUdMSaZ}RD zG-j?TwPD8!KE?8|TwulyMu4;k^s`&@wMhM<`TT|;gKPQnN?moY5JS5GrZm0zZ!EV+ z)rtMF%fd)DE*3 zj`QAVbRfn{+UEQ{GjcLkhl_eYv%^WxKcCzUQ2M zSfSBTWz59J}v%h>rz$paY^^CSpc zYP`@3T&0a85HVBK=sE&pXDKga+B-M4)ch1cnYoh7G#JBWRm_OcdHAIt*Q+QNhs(!? z4IKnP_Z6mdRTgWtH(XuKSA?Y&S_sROYPZmG_03iO1?z19VaG5WWwnxHjQbetTpd$w z(YVG*N#f1BPzb0OA=;b<`!}iIkA7fr9pKx!T=x4yPSA*SyY=oq_31*{>1LYsB?} zckrv%v|gm|<_Jm&sAykLfrMZWv=Hhq$n z`%*X1kd__fqrTXj0G{ezHX1RSB*(_m`!$0zR9c3lDZo+8P-jZO&#CTfVAz=Mq(qAP> zrv=r*Zk|}y?ktz84jK0}em8N|#7+PkHQ%)KtpC}feCXD0Vr^b<<*IEhTltvbA}Y@H zH1fE9Sx_b=F$gGoycV+Nh*g^&zG3|VLQ5g$GJojj*di=$CC{%oL!}fH4gU_e5FBZL z)RR7)KA#K(;$*wmY}SlWFWRNPiZSG41%4HchkM3Y2n?wgdZF(2FUztnjL{nFTTY+u zND<{FH!t4*%DvmihP0#*R3e(COMk+IQ`U6x{mWiUsiL(Vn9(*-NZcAS#du7a}#f&PZO|lw5NKt#^9|$CuVZaPUb5&S%h!D^YNf z@Xl|iKtGA7*J{IDLn3Ve0{7Y5Z(H`-aZ|6rP&pmDuC1H(+5d0rva6MMVU6{F-kTeAfN#Jw?aZf_}B~_w_qE^-S-*7aoHR39C{7Rc8>z! z>Mcofck$PG+Os@+Ed-Xgy);}N59P8MmN@nf(KK{cep)2{!e37>{L&UeOl}H4-MO9e zSxfGsuiBvQ^S4GvxX;!twY)F-+J99loGA+Z>sqX0m$)(Y(3hi!pZ)peI4{Rry}|-@ z`N`WVQ!@WQ2g%*MWyb$^M&N(XZ;-Sck0QW0`f&_4rX9%HgVhgkVGLSLyH8n*(@+}$ z-#fgyxp~>pu=RxGQr>HL_N+n%IQqPM$MukQs)O9GXiiNBesfDJ%P5O)Ag<-48ooRL zP#qJaKQ3%A|DMM48>6a0VWY#tVAzo2dv!f{5A{>QT$+9tnXf$R5SP3bZLB)qgoL*b zQ)K~mhxCqCTvu*s=?;a>K1)q>i2c2`-=?wo59N_L@5f>ix1T1Pj-g&$QQuW>Y5hfU z>N5XDzGuJYv#cMmCpYd@sh{=(-)t8Xr)6C4tijsjX~yl+YXma+Q8cu_*M%MYHm++7OQ^;S7rvQ+&obzBTD zHkT7FbL&Isw{Yypkz~R;QOCaExx(X<={tUp#0+30Z5r;1L#(|eR?m+S z(eFf|yHOsgYHko32bT1x3s;cMwOr@R1dK+tTgUf=R+{xV$3%!(3WI&1B>xj~;*UIV zDJbpi!X&aH%}A2g*lv-@nle;I^dQzikLun1HYHA;#cdKG1Vi)~bus(c`xe5KPLf;p zT{@ip?Z+<3G|as$hwBBOe7sKF(_W_QMNbTIB_tQN$mliv*P(%2^_NtP|15<@i1B|Hc<=@yNfmCys-9kR?^vCbcs?DS&UsF0$YIaxkv6siai-lHpr>4!sBFjuaCL>iN z=OORmc`@pN%K?RbPG-FD=#IbBR_1g|K^FG8ph@Mkb^1=%Gv=#aedz-MdugRRg+!Ueb-4raGe) zlrNtYm90;nSC+YMsUdq`s4_#Y0N$=(Ti0e9QUQ^xEh55}4%M=~Dq4PeFH8fGWE&Jt=4MLG zd_ko-O2EnG{|q5aFOL06R27enS)Gu_v<;u6C00S_?hAnMF8mpPlMmXnZPxzEgvg0d zSQ;Z+>*rG3PkmcqOVnaHw5dpNO#eEmZ8)nD+sPOPsbjgXTNZVrN>aCvU6}$@$3EHV zUX9b-R0n_Br02itf>#1LMQ4{vDP)U#457*Ge(u_qImc_3q!c5;Q(1!6%{m&DIy$?OkyEU zhqKGGvsb9yv`gc)u9KJ@4kcqW)+(&uG9l#i)HxDnt+F@-sb4}`azxH{4=`IBV0HHh zJf%odj8^qrN!V{Xq0j@mG=qCAkRX!Lh;!23k*EO*J)mGO!zcq$?c!Z(sa6d>JlBDnHiQ#BQ@n~EX&RT-U25AQ+$s;$Zrinymz{YfU!ST(Y8%KR za`ayZ|0Lqy3k0lQ7l5=qg%^I?e`u*NBUmO_T6pT_#m@e9UBh=Kdh17EinA}jRuCqQ zJDCE;W|A`%ea(DGeT_L&Z7^KY;3%QiaqRWpcf*|2W3M-F&t?dP>KqP8vRv~bsylN%YccS3dD1ZtQ|QjT-?gUa)NQvLIN?S=n*Q5!y@kb3QOD$e^7<=Gh58}^NY z`LkQChjx2wGIdWbMLeMaz}EndA%n`7T*JBH6;+H3nSt&utO}Yu>10pR{!qNLmgFg`8jc(b$#@JCo9&xK<0DO(ywfQB+{gyxTd3G;OCd+WONcL6aPZz95sxTSv+!Yami|({zo;ayk+9mPF19atKG|) zZiL2INhnrVTu@q%spPj8t&NzEmzSb!ERMSE_XrSk1PpsQ7~6(s6SSPYc<2dU$oKJa zF~z#AIh`kr92)==0oaek$Hd(&!MOyyg> zk-fOR@nV2{&nuR`QQvYmQvFgzf)kq8A{O^3kFIXl{joI-L;#m*SOHIx*!Z}t76`J! zp?pTCXhio7gab*KPa&Z}lkjIX1?m0^AfAbw!&uq;L0_4!v!{2M7UGaEfORp(qi3Ps zH{P7QrFkqIbnbmurR5u5vUT1zQlE(}-!yaov;_O%9h3>FJY?_uh)iVa>qD?zu`tw9;Bjk`b+f9V>JNFXwOG8>mWt+z}8 z6CfSQ;#Ie|O^^KY`o;u{rVuLWWul3Wo-(p9*?u-cK)L!ulUmX7wGJ5#Nb9?-M6}Pe zVdQbpqcf=o!f)agVVqtIFdBmPA}Jdiv@-&{V_;Kd5vP1%tNswa20HGp3)x84GTdPh z*^McU(jA?uZsiVa_dCk_LLD?eAA5CwfBZJX<~)ow48=}{zaE3UYAH48W_)0^7fzV} z?FVb2@SU?|qTQDYiqm;aRY-4e{~6?yp~487^+@96;@_4Gad=}kM>|`z!1izBfhHx* zz@m9Cjjd@0C3~->CS^j0MvpvppA<~w&J>Ji6$eVxZ%mIfsyLQ;`%h#Dp_>hk=?#E- z&;6=0qz}pOX0fg>n?Gr{q-(xoscELYn@@;Zj|H=B#y0p2A_qu&l(aXP* zon3BZApKv`hsO{8QO=i~?@DE}#jRw=-k4m){M3`~`t4b%@<(ZWKeB|=R;VCIWeFx2 z9bMv|_fIGEZnIY`xmQ@Nl<3h1uN;&Kpi0>EypI@j{ScG;m~6 zz#*hyOT=VwH{jW2z**m(o8Q1ND(EAAHlF29l}ZO%)Ck@~1&!)d63qPBX&_sSLMm=s z-_%jgVTEYn$_uRz!2Mh$B$ar2*R44ZPCh1KL(?J=5asXjxy zM9F@)p$yB*3sSsf@07rFVD3&rI||stD&ExIiMv=hG4p*&DW2)03R1|+vgA@aGHVw> z)7lP}USiD~{`{5Tt-6%p6A$TBtJE6b9+?k2$$x{_tuM8tlxi_rnWeHDN*5XZP>4#g z_zH0cu+bjJEkeDLXKsat2Kw7ioxS7IHJtWgPo%+R_t+k7d^TaDCK)g+ zb(%{L2`F*i&9R-$7c-^3e`q<>X3AV_);>1;MreuV<%-lV!F`n(j*$%Mh!%7dFkTkH zd%62k?shejH|e*qPhb+5rTO!4Yff>5^p?o5WK}U$No6SUa!|FT$;U{BCwT@ppKl&5is-S^pnkYq$g`01sIAtia2szi7ECgm&}oJ$vEC-Lr1cGAN3Hc`v(2oQ8rBzL92&USr=LJ&1iPKx}5e zt_6Ul9kG|Janm!`1fwYxf)D%gEo;%?Bu1vhUD~|YIrk+Ii#dh?j~yDekv zvR(IlYnri;jc&0o8_{9W8=rfBFb^hjTgI~_;FBTit}Jc%@AcnIjRqSxH5u(QX(e&Q ze9!%=1F3U?GQ3@Z3c=!_Q{}_*&_8H0{5|q}=}!}dLS6(QKJpT?+c!s?u~E0Q!uO^Y z=-VA%*R11GR}DV%M4GN&D`t_00QnP$BX7$=dxsAj`K6c39>+&i#!IdVp8Nt=4A#c4 zT$63#G?)lKvvf6K?$7-+tbI{Fa5XLyRYM!U9LCq)AzDVg7rttIke`i`pR>)BM+J7T z(iRkon8#4>hUtD{K!H0MyHvW1Yq&v$1b=RMx|T3*C#vkZx}i8d-&n;2RbnOBH6G|% zQ!^Xgu~QOyVd0GZ+0voW+SF@82g39XS!0b2rY_|-^Dt;O@v{RpxsNqsys|`eL5VN3 z+KnGYfN$uU4Xp?*)K=0{AJ71Be`L4iijl1I;=_LHY$92$Eqr0^(fhT^@(`r{t(tb) z(q$uc$+Xc1`#HgS>m|c*K5qT@M_84Q^HOVjAMZo`CM8b+q0S`94W?9Ko>O&BaXyb; z6YJ(d15wk>8!o&)bh85-ZP^2R8EiP$jj3sc1AbEL4v$XjEM_mZ*uNdpVbQO^gAcIG zAJ0-Ulq;y|r(i2XXm3)9*hS)YqiJ4g&;l_Z{;W~leN??k@gS2EuxP&*#~p6@CTRS- z5N>^~hI9&`<+4Ahy8peq$9DTjCtN+d&n54?Ra_K5Z71qL%(z zU^r=`76`+y*82{8i8_RWwrHoiGW`;J&AsXoXY_Iu;K}PHUT>Vfq^bm?uWtz_mDwZ_ zP~I)-(RTWzMVY;eG6R0EkED#>p^jX%#N4d-^fFK7TRS}?-yHj0uw+k52EU2kXi$JD&{({}U(nSQ``J^8nD+G-AQ zhDM0;fqOMt2VHqEL~~B1p8q9n|N0L#v#~v8QzGV{QJ(;oAc=yO<`HbCgV{1s0Ko;{ zrrX%LZzxn~$zO4QuizMv;1~qFvR39b#MKM+%F;0}6D^rNHn6m^VnuWdE?&&h;_Tox zvaP%>jk%fBLu_-Zwyak;kD|A%*Ek=HfZN+v!JN{ejM@xap1GW7kRE2%Oq#jKaR^Kw zm#p_y2~?z;pw7|!n3&QoCoQi_LF^(!hNHiGmS-MI&kefN&C*?l)B}Ox6J2{~HX%G{ ziT)o`RZvl@6 zve2Dv{OmWRZOh|DOBWuN7239WlmG6u?Gi}sb1b)OX(psu9;nU!kI^??-sLJMZag^#D~ryG1k`4w+%mw%fQ`C!P_1fjxr^ktd>J@$7?k$DKY zHY~^~Ac0Yq6O=yLb_BF@Bk@S5JXE5q{A~88b*Jz2M#P955vnrj0;Vc8Xd2B*%RP5U zR|tq1vYuZ2JevS<8Y>j&y1*N+iwpNXNe}-xpyvNBPP=dhb2yWrxZ|@Gs|vu4o&1E| z30rbc29^JEz3$2lD9xO46flq%WuYfdl}}-L26sosA~SKSZ8+yBp@fP7s4Nl%VpWIU z@ry2G@33b-E@rpyvCnByl4snP@`~$tZC9a0z>BTvhLhwZ?$YN!ZK*#P8C4Pm^A{!p zKNPT@W~Yv#7WNzbvs3&1 zBP?Z7@>FNk*@hpI*nZbdt4_D>MPEzg8hCjmlLAVMa%&FZ<97@$FN!s5V=7-%2wM2d@ytN)C2TX{^+I-a3%qC}kG-egX*`BmgQW#nXX8gkAFhWC=?si3 zLk7kF#1`C6ic0j{*As^F;sQ8X_K;Z$Z{CA)b0r?N{2X_gBm@k$_84&TUwc@_o0)W0 zp4jXNGH&gV%plu2JbdzN&HrV55VSu!_$Lj2Uot@R;jMZHKYxVLjFSzY<%5&RrpZ5y z&-(O9+`c|*ALMy+izYf0hQm|FWCFaG9f-hBjd&p*Q-`hDb8b+ zvTnKaRWgMIT1>l@P8mlLoLiE7R$0d#Uj(AuPR`?B&ncFe%MCxyId;)u@|j302;vem zu#){6)v+yU03*4ufTC4&Wcse&lxFb{K$WwpXT zzi|J86I3g#>sI~wZtkhhBh5dLo_{xSs-V$`6UG1Y+by-9wz29l$?2EGUsGNsm}k7p z1w+3)`x-&D9+@q6EPDU`yQbfM;}`6Vt`M|+UaAuR(HZJzfD{RW>N$|3)5nv^(O%5+ zw!K5hQahIx_{f@h4}^&o?g8JcX^}546~X`B64uC2e)m)O%9!zrmjr7HeoJiQ54{c1 zOJaGmZ2BMVZjwK^%UDc?p+z|Eea8wc*8qNUAXm z0P_r38skn#uEwF33Sk+KM7YhTjiHCO?YAkJ?5{d|kb>@7yQ4bL@tOw_!$${q??lh; ze)$b{h;+Z9Ys2o8JD4HrH<*96;u5eEprG_Q51 zKySEK<~Y`uESt1odmLOdg2KVxBKBm5m2X5jQ&7$tyo}1gwn&J1(;Kg2>JH24MZ}oz zi|Oi<#41OX6QtBA&5TWb>+mSuB3S=-WLfaqb-HAI;YQ_6C{SzQOCHa*sL&>(wYZvp zs@8jM!7Z)MzemOGG!*UP6RSJ9L)gFSXnkTG5w(+6Z6#5&K8ch@4#Z#FY-?~a;8Klq z+;s%f;BQPxpK)j?(SvsjNr+x6_0LK}lu|YQEgx#b16x`J>lIaFqc^V087HdbWC0$k zCiMAN#OWHZIXg$E?SS7?0JoPecXyWh8)clU&i#qML*($da9hfw_2#Yh#`xmM zVh6I~a`H&5Alxh9*FeQFE+FVeCrSC2QO0#IUa4%2|Kj0{``n$)BtAN)<698i^ls+g zg-Pwqf%T2Bt+vk%?ExkeG&iQx*8nkXr)8=gJ2yr~8?fg7bUXAe)bGRs_OzSf*%239 z5$aV#{A_Rycbyq^C{AOp<;&n7WU+YN7xUB_wAK1Giafvu)JhP_ZYK~8fr@Gi+Q;VX2P%3 zPH&C*@cQjuN+s5~*G%HxBvMglr!LI4MAm`ySf}e2>V^jIsnwc3or@`cyz0=}U%fp6 ze@X0%huj%tD}u!ol)KI(Aj1(e)>jEB;T!GGxY4VT>q>4t5;Z%!(8dqSlH91UE_x&M zD8-Jw;`V-@Bw{-r?aU7bzz~PE!l#R22EiZ%ADjwgg^o@$P{$1IzaMSf{*}=9VWW#g zsk;t{6h7o`jK22(x0-_n8!d%w=~%UJUWWvJv0DFxfWFb*@Rucy`gSWSS9U<#Hf6_J zsl%7INXl`)to5yxisoKln@8&DpcO2coaw{Q)2wmuZ*4D{@eEo0BDH zusSC@m9_$So;nli2YUyzJJ!xRNYz-b9nK%VBocV|G)?dchV;$aJZW(e-?JkrQ-Cav zy&82j_pG4QU>ZEEsW{(~%5fZjOkFZPd{+vDEbMj|CAKKZwo1S%$ zt~r@eZ{cfLd<3rAe>rVe?r3WXe1>ZBiXZrIYp?^<8{_p1h^5b(I#Xz(! zhCm=h@_6iZ69kt|C;;#|LAd}P13dJf7T^xQ2p~lER-a0{Ig3Fh8UpwnS^*l)DoLMX z1Zdy6xLdrf8wFFN@FG9xFASr4Rp);QKOJxP_oVfP>BlDZHUpx8 zoIRC$2Y>FBJFq*_82#Wi@coVNV|mm=H;(>9+*A0$*!T0-XNBBH|Fgnmbaef@y85qw zkJkS0=Kp{EUv=mIH{6Uv8(2wDP9Z4R`$>D!WBK*23^ z8k{2AYOuw11c|f-qY(6cY0|?#Pxe}W8_4;&|~u~Ms;E0%2Oa>;T^91p^{fdu^az0pr~i0`Yh zR-DrboUYCL-KwO$H~QSjSgO3(EB)t3*a3|Lfs@;fYvZgz4{Ktex2$a@#-=$<q`%=DX(|Pg3&Ltt-^!gw&$8N=pzDo9jxB)ZS1=8i|+~B2;mJ^Ytjh_4^4W$2Ye;#Hm%-R2&?RlruK`e}ui9Hnkp7^J z`b7TOujSc`&6X~XG<|8NEe;vZLpaXb7mt9hv*3zbk5qW^jwJF^+V~7C>)wn)cA4`B ztI!&1Rm-#4>uIB5g>C~5WLr*m$p}vNETeQa)Nlna5Z?~|04mk*G)VgL-I+Pr5Q-{H zD6Pj)Hz3RWV*I=ekKpaF-t%eXm8Op0IL_I*NJNaJ8s7h+=!ABCgQyrlQpNQZNpf=% zFe5O>8bF)v7}?_Gpu}iJL-!YhciypTk#pz6$b+PSeR6eyG4j%}^nR1y)|KJE4P1!8 zM|}`9)2=T*kG|Y z{VVinJ=Ytwif^e;xWu6ew@>@5;H;wW>7yWrM~EdY`++@;#m|eRWX06Ysg_WLB%Nzh+)EJ-ryFt9V63FUA9<2}S@so1X}Yh$3{XUSAaMhTG|(Fao_p)7 z$jSwWXiIbS)coDgJkcKxD=Wlm%y`O))D&9UbIu>jqZ0P_HCwva(IQ?j>ECftgjcZs z>SZN}IgdPtjP!M@T&z0$iFqxz*~Y%@hCE_;gBmEpKBXmO+NPF2l9B$6pvp)b#l>

-2Jo?2O*gkZQ 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

cZ|a-tRJPt=X0Z^z^JZ(WVcly#qXjIUkk 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%0Dp zgnaklWuGB^sCn*=)p^oAwcRsBRGlUWY36=ka*EUt&_) z5nPmI>oUsI#Z7h3Xv%ZdRa=}sYWa!tw{BTBe@_X$PGXC6+7%*_rrG*j-N`O#HLX}M zu0sJywvMm5g_l|bPM4L_rDqxD91fQQnEXjPH672Ol(M=l-fBaE ztmjX$zti4tyKI(D@B43O;SKrkT%ZemdYk>2$y*L7t7)+fb#HpML*rehj>|o+D~Q-E98(}o47#~B9r5Cwrbn2)ko>r6_Fve!AudYFZEC@Oa8rbynkQ4 zD6&IAUplY}FV#HfO#73R)s%7pwM|@+%=JJ@Q;UiH5guV`<)^;U2X!;XWhNE;qnK2* zjzpfB$2Wi}6X=*q^>HWdo%;x-l+}W2DhA;wb6+=_WhB5!=fBUt1K?WmK9(M&0)xKm zC&~Wd_*s?LHvhR#tRgmb7-Q(FBF=Q9`qXqM4JWmYcRtNU@^im!k^_p4$;G2ywTnS; z>AZ)Oy7iMj@JBP{;;)gU+MQ9#GKWutwv%Fp{3e{C^)|6_8N{@MLvj8f9jeWznHSB1^~*Rm zqgtGNN*O8ravXzJvO9yan5zcnAL5w%sw~xj8@0Q%b19-MH`}!oG>jva4!!5*KbG3( z+cI$-o?+wFU2lh;RjG@KOSMn#1u(l94HlV)KNW7HZ%<25QPH*i&RnFbk@3iKMlLEt zaI#Zp_m*5MSIs;N;?hbWSK#$P3T5z zg;dZ&PmXEMO4#g|i}Kkh5^eicZm~+Xpdxsya!dBzVU4wO4@;KyPzLnm4JA)%i*@C*k`y&MA&$d$ zN55?5OMfgsG98k6{Roi`N&|Md79FGl=ieB_92K~3ihYu@x@s1ySYS{|K2B1)bQzip zYB8Oveqy~WIW@fx_hPkuc1f*&OPAHY$V5-6({BDA8rP-rHh*zVYRYPk63QzF zt{JeImtB$#x#CJM#{RV>UCg^qjMnT$8iG;nJtztdNTbmvs}8|XJzR&2`IB3+B}+_C zrIi}j;chz5x?h%7ELuRvs!l$9u&NR+pC@^~A8$%yb8=)+>>t-aR>TfEd>{H-*VW!< zo>hOU$TCGF6W{S`;*Plbi+?eG-16wP*KH`6oeO_JjEFIEQ$>=qF8 zP$Y$db^vt4#Xn*R4r}C{b3bO4ZaTi-%>6d)xKqbHVW$;8Xny0}#7}qsoQ=wV3}J2Y zE=c;Gx4*XiII6?0AnoWx<BerPCl*6ZzFxZ0_>%S&9Tu3{DU#fOmFt?MRA1U+=9 zJVa&QQaZOiEc0LN_|unHYC^fhq?X-L1$%D zP9HtnclFVtS?4S12Ym9XDTw>^4j)(-+DnpTeEt_-ZyglJv&DU5!C6R1f-aT>NJ5a{ zi#tIU2<{f#VR06BC&As9KyU&CSs-X|Slk^JcVBoazkBaGc|giq8CIz0cUoBW;!+e|Zj{-JLzSAE6e%x%h2o4}RnL z^U2xS8H{~lIpI&p!$rh^|FMrQKfEWEe4QjS#z_(@jL*LWH-F6^gJBITe30%VF7^vA znkAa4O86es#{FRKr_FS8vq1f#jmQYjEp++seT9zAWU2bk@|p|meKCF9o%5Z-%d17P z>{FlQnb2euf0Q#KY_w(ndv3t>cEFEI60gc1TGlqC%b3gt%+0^|kj}Csx0std=0wqw zJH5qiOJpMiwH7JcsypMV6ec?;UE z<1c0pzrEV`P?i}YXX$1umO?@5>Xg^*c$vo6y@1w^%f35C#R&9aBkB(W$*+Bb7VPyO zc?@C2&%dv}XUgQ^Q(y{-sLa_ey2}JSiuUT=J0H1#CRY6TXhMnecAq9emO0CiQ&MbW zS@MQ3{*jhX4T6{WAGCgkXxIxVRN6lVYuMc-W-mJWANtW`D8l7jl3T?5n%wd9J?}7@ zzFcO#i{n%?=)@a%zx!_0L)PG%MX!A1?Bu8-ewk)X1Abl{U%wM5w|2eVw&X?#R5=@; zi?u>gI})dCR-W}y`022^-^FJ4M}0lQfx$th#8sFRlf&Za}pd#O<)IkKwW7nmf5NE``*2h;UqMx*WSWiJ0sQjS4!5Behi!D5Jhym#I)Y=QkeWe8mS&3=o6*@lHNIe6{~TEQ;!!30e`=cZ4pw$h5F{?%JF?Y78G^sOnM) zBu`?*?tw{;p#^)A=rEVWSbv?)as}F37;e^aTd_yeQ^}%6S@u)b#KIymS zOip$z1EWDCBn(H04d-Ngyo6t@HM^hI$8R_mQ_gOo=*vdISpaMQ@P`19#C&@#XMwc% zTu4;>LzLJThNG`8A_H*gyY9~n_c7j<^LJtlMCOAW>&q?YpR%7w&r50#QlKVy>`0Bg z!{%J+A7m|_A8679yD_8uf$#Wao%AQP|KHCNoeaL>Flv|n4!tD~Et+Ftq-Dzg}(8Wm*Hsv$=qNg_!u zn*pq=I^>2Qh3-|bN*k4&X(PovumGoH2~K|D5YfJGm-&o@BrY~n+b>FHWSBxb= zz~9rr&5kB^o~@}LYhI$dV&pG&%T{k~@@qCq*^-!o$(~d9Yx+$dMa70`8tk@=5W*z3 zYFVa{@lI_X!sOAIg0!vnfRTXC1DeK^Bo9b0n34bzQ+ss$x#!-pXTqd@74|d&VRrNFp;4$vJJi^!y@7B{}L4SV1dCP&HKu|ZczZHO%^sl#lX*&$V1tj8W+81 zo5eG3g!NZuk*@fciksGm3Z{i10+fQCcIGIQzjB%Em`M8C^YaE_fSLb9Dn1*$@5yut|ANUqW00cc5DMn>rW6UoEKWW4^OwHN?srkKv5aXC13~{+# zd*SARapp-Q7r!_iZ|N?o)4b_3Dsk@1rL3xG)FqM*nvPVod%v{#tkp+U_FsKp_zk0_%zozHXEPg zG7<0nTc=pMbBl3EEis>U-dWWY)yLY41K!r2?^B&xav^O8eNT9BlPUrprj3e;Vxc=m zlKQir#bf0kMgNEnI*K!zgpz~Mjrh@hr)%5sW-GDN_w_#5@uj^zdcWYzFW(T{r*}sk zQrh?g9N|I5No$F$IcYD>bbW`#yJfbxmTpBKcu_*16V} z9QaQh3RmC5Ex!lVo(N{|{s*8GDaW&n}c7vJ6>w)eIPIAhIGHfldV*II@n!Q0AJiP^+wXBKW{gR{!$6upxE_9j@dudhg9-igkcT`H{FH18M zaNFLx@&V!#=Le@xpxO8Z$2O&=z7&%3#EJcP80ZD}{S}aJ1Di%1SpcoeAk58PT_#7% zFmN(LOa?l02`A2pMR#<}TQrUX-0>QUjL7G>gC;#ArW1xJdlplrLhF(!RpztZUcl^tW8SzTnvf}1Reqt7VAV1Lh zy%H=v6O3b99~c(hp-)J?`&bX0e|FP2Dxf!?1$Ma4pB6qXv)j)Cucn3gzYpO;f9WNM zW<>YJuq@NZCs)-ut+E+(lEFAa2g2XW1jaSCGxGBFQ*5|LA@ZmOOam%nKsn?n;i&=8%x)`+8n;u}; zxXnB0u(!BuElw!b!gqiV8+ar3SaAb&d7J&SyMF+&xvG~#b2Kt1dClM0(LGkdse)*H z?Pwta<|^`SunXPXf?T~GcvM|We*${EI%@$%YVF;v!yrTNI8rt&g!pWm#PjIufOgXx z$*s9<%kkYmJ;~i1i_;-{S5JI`o=%@BfPgjgf8B56z)H?xo7+(No3R(wg&qH@bgSj&($>W@{dE0@&(3CV1a$lh9n3Mj@^^VU781F zaqw)$hV;K}h$#a%G0aPBhJ(wp0BCkZV-DfUQ&cIZSK45lCv8tKE0+`!I2_X%oW%#c z9r!1qCg0;J(Cz-C0!@(}Y665A=P1O>6U1dp?TWTCL&s8 z0uTvY)sL&Jjf}sb(EYXlx;eQOVE`X^>Qi(roYZ%om+LGeB{D?j67h&apu?40=_ zkZdt78545jES2-y6Lx+j7z7-aY$vJjlo;hHdKOsm_w< z-+WOwqKPrQQ1WcWr-IbAlKyJos@}@ zXxuG)Un8UzyHi(;Ku=I^Df|T&t`BDILgu~_JTA`b%BHur4SjPQpQYn)-T!Ccy0Kz$ zSpPqQ@P2MsGO-g$U35IkS&3+sH-rh~=*dSJEJ_K)Jp-zk`P!Yy?EBBags00MHOrS} zbcJ_wLu`a|=gHc>4|@jD_(~Irhtf|t;cjbhH`1)Qev!jPA9Owjj~0zo0L5>pWn@)w zS*qAmRbp^%3eeB66_i}3gs{2TK~;YUu+w%X9BJz8*gT)AOGtHo9I(o#axfPTaO5L4 z|GGW2>MF_7G9i>|b7a@aWJ5A!b?mFt0u;q#o-jRc`hZWn5p?JXT5)kt3=46ys=|+B z4HihGYm@NuJHQerA0adAap@8|5i)|UmC}EL1zhl-Y3m?Y8+ZA<3TKED z+a*1;)tLHcaDN&8APX6nNpqcNIfN_?9yM$M<1G}o6{9_b%>P6kc$w2r6VPwm(*MtwaQqiI^T(PB|hV9bX{ zIwpFD-O78Q-Zl= zDx{8pj2@M8SLy}Vs_57|XUphDQFu-G02>)2tCTU7?|9q6c%2=ES%B0c87;wiu(fim z*lSxx@OlX*Q^4O$MEjX{=2~rhIHX?_d#HPlKj~c9 zsXWX%g!D%@oJ*)jl$I5Q1jhDdl$KyegNJLsPhm6TO088w z@X%*6Uv|`|PS6xs_q~}EzxUl2udAl;4Qfa~lDWW~;1z^>5SgpJ?Byi*Wk7;HO>9N% zCg8GIwg;Usc!C=wN+H!ZZwA2=_oJ8OZN4SrVe9;g-p5&PLEr3y`Pyhegf-~vzzl@w zR8+uo2(#uXD#@Z2lQb<#HI8`CIKjRi{!Gk9CPILM zg<^P%(zkzQx2EH%Zvh{oNJlHWC7OC$%--a=2BDZoHOFA1 zl@h!GBTd4W&;VdR>IG_b=V=9#Dh;1mS%?kG^UwC0OZ2W^HS5FrpJq)#Kxi#0MaNrB zGwyj{9Dm`EAy$5n_D?bUlwFXUfYMHCEP$2wJl@S0w)*dicdP#^BF_YOGMYc*(BPUu zsL=;=Nc$9f@nK^RGQBp9Od#VOZ^lVS8j+5@8u?Ms;0`R(?;ke2-(_t&_`|zXQFQct zMEhEBGAjaGDD}*?l#mw}ON`{7>)Pk5qcC0|i9(J$s4j+5fvAN5Me=+8{h`h=23w_n z?doOk^zr=LW6+?dQiXX~*FvwxXls-~F@IdE0`Z4sSwBw`;Nr=IE|*f4%T?euZieh{ zq`#o943VOq(!VT_1j9r4fLQb*&?RJUisnSjk1w#!f{|A6S&o6smCzYL=zQE<=lJwx z(_KW;J>?KiN=300TZ_b%(630|jFuy0!%pS~hU3v`WJO?= zTkw^I%5eHwc5y?>uZE<`h9ntTh7s9+EXVxE>gY!kI_@~ZtSe)G#OmRb0c3WsrgL!T zL0tJ-!{>#cj!%T@Y>5PbG+tgGhWt$4pj>A`P0-bWmMhF;VZ`Sa1UJ^nT0r8P}t!uHY%Zul>PWQ2sghD-wBEJsJ)CC4|4#^XUh{cJ|Q&g%iA zRK%3a*z?Kh{&!iNfBT9AOKgYW+!H1dlyBc?(#2j%WAJG*$wK*}&q+X zjpAW^c-;B3`*`wh=yj>EDZaYq_qxs#>u<(thT3ATonX_jP^i#LY{$f5d5N~!-c335t*abE1HA(hPa!RAY#jrY@z$b<|DX# zv-?r8ezV(H-V@?8{(6_do)~9ewttUlARVrFrtlF2O|bwR_psFH^h$uD-fmu6!2R%x zOy}KE+sF#1uYlJ%vtPyg)+n-Je9pGeQu_NgKAQh_iayJC6=F%v&lTyx2iYN!;j^8s z2>}v%Umb2ft~!b)c7_sBU7Hir2+Gp>-E%;1&sBYBsEM>R0@_>+w499%<^LVeSYjl> z4A3PcTA0M@;OdwKAK8kfKf-u#s{Fpq;4`{KR{$o?42O!o{*WK$fk!)>7(~md^gn~~ z_1qH{^a~5a&ta}EA`74;jBbIM3AnpD+8&v2aM*4I9s~2KS3LYNG5mO28Z*z@vA=CO z6a7yE3x6BH9(Z+pi6;r#pQ(PO0}hCJz3SM$1PFKY$HZt`ee4V)u3Z;%0L>o%c2V)A zcc`??biq-{3&FRU?t)ilfoLWZy|{+jm=aRrLUkPq>!IEeI=bIceXxo9#8P+8cczmA zmv63jN`!SZgeQ}Nz9YxlKHqf^PeNam6cneQRRC$1&lsYTQw*cYu%_=eOyB*`R=n_Q zfX0ECyGb#RAt)QYsZ&0 zC~KH;?>28eng!pXWq5m1pZ(1xbjkVb7aa75zryJ+}y31*fyP1GAN?i^dE0%-8~%#?D!yR`U(z(zbhEJj$b{7+P!8 z5!q;4EKI)Pv~%s-i^SU=k~Cvp^Qi~ttLJvKtaXW!u&myN1Vl6iV`B6(m4=C~nttsq;j(Jn1X)AfCDy!YJ%^uS ziCue-zi7=ULLmCS_Tse`M2qqqCV@j@%bGU=yZH6#%LG}KX?DEt?wpZtg~pP6?#d8( z3!pNgM?JSdtGRl+)d1Ly{-OixMx786f{P3rlF!bKEoQWCyaAPF3C7;3-36c~>b;rN zE$kkaf_Tg+6^R!Hc+Ah%q@+9xZAE7$%XOEc_IF9{1Pkrc583qhPM$2lW;^nQO-Jou z+<3oy`}kf(g=SQ2di5HEfTzgo zZsx{+2bPKFYe9HLm5CW?|U*ELIV4Vha(%ZfIM8ju4*O#r13(}Nu59qL1olJ^2 zg4P`^%Y;m8^ujwY#&&F&vegGQxhwv`qyv9&fJFuMq3I7^hJr+b;kzYSJoE_`lnZ$O zpkCak)aJ0U3BwcJhw{TU3MqOg!^=T6X86Zy5*3-D)Ta^4r{j(T7nw}KB`7LOZ4HPl zm!6;E8ZWJ9wA{BXGo>W6=nWwm60AI4l6?2G-E$Vt%wl);fu372BFX*bCUFf(VRXLnL;(!``OT@^B;2HFxEtYGH}z!icjAb?=!f~ zMRg{WWaJ6Bm)u+!ges=Qdrj{^7xCtWmO;QH)aa&rce2cCw#KZ^=jOC;%)f~8@@M{@0y(K?pB~ZT zla`v};nQES%lf&s>;BVo_cU44wz9`_=`^1*Mt$_ER#b4rH4m1@k6khTf<1TPJ8$w( zJAnqWGi8htyCa+kF80#&94*;^YKjN6w8gu1mK3<1)*iZ1R|MBf zG=`#z#KW3_DYjfY0__kslBhtTeS1Uv@->GE?X~sb}@ffuZD`8ESs0Gwbbl$ z8~pn18T&Wi2QSH%EDaSP0)+a)=);dlUh3-eGpipNg#yCt2=DwAdKA8#jWc<=;n$io zm+>P~nMZb31x5Gxyn;*0V><11|AECXmnXWnwFcgcpT{efW-GhSL6-Hb?~Ih37?qPS zdmxH`;JaW{XKl9iO7N)(NzhpWjm!o_nTJ8Vz}WK4S?0pl$bBb3JyBYSY(Zc*_2NLPp5G!g0?P!+ck+@O!-8r?jHvQiN@OMyC_a#WmSGjY zrN>T)XptX&Bk*OJv8#u0*P_3^lXFEIa$&2QBKO_csqq-GQi0^?LIXXtp}< zPu1bKTP}$G>z}^v9DX?(J)?UTF`Q_(M6p_a?^Lu}zgisbv8Huco!8=jXn2401N7hE@MzGG}m<0#Ez;3y?68t{>!)6LFPA2ho^z61`uBkOlF!AP=xQ&ge z5)bHXI;OyYYi)U4zkN=VD89ZRFw0lc>}WlfI==Vg9ZoGtkT~z&ye8uT(U zO72V@>bW;HlvSg)2b>`_!a7HIOnv{qK$U$o0KOG(TC|6G^;5uGUs>GbfYh2MRWSm z3my#ONMoDCOaLzT)@&cYdzJn6sL#St2WFO;M$jk14dbYZq4eQ9oD~|%M`zMUnvc1| zHn89c&8f4uu;KB)(CilHQg!u$y9G`iB*FJdnbCgzg|Ta*l#WOjwDUySeO5|vMUvKf zzNwpkh7+%zL*h2gn$6DpN_ilXtP#*3^Hs_Zag$`1quIDu>~{MrlbD*l`e+jEh0I)+ z_Rd9Z4+R>}$2ss|Lg)I>$>jjCkv3ATs8E*k^ZvlEP zG<%<;haLPDa}Jsp3yhZ+*nbv^NBDAZu!=!rJHx>Zw>7QBi&qk6!{8ZRrCH=q zwUvzHRkWPvu7`7;#OB=oq{3`O%L>zAs&gqasU~h7p6Dkg%M=D z10ft7gv_y5W_TKK==1K-(kTBPYug!{xhf%Gy*mFSNWRTIIYkE;3D`THdmm+HZ@pHN zYE?yu{S^ON;EQNhFBq@9GJc!%vxTrv&{MeZVW*=x*OIUN$!$^EdOWC~;U{hBo%H{5 z)eatWSrG|f`yW%mAZ5OHnBX7HQNwZ02QDi=GD_*GT}{|#$1mOffvL4U6jnyLaZQ1* zh;r;;5=+kWe0yEF3r>nVsba8@fAdpc(WTsf@l)j#pOGuFy?4Qa>mOqNrnUFrFgBmn zHmGnWK=i2FA4PqPKNy5V?EL)i3Ei!9bLbA$f6q8V#_%q!XqxX5y+&L@*#B7X}|X$nmcKBgH1idnn4zBT7s9d&u_D2O-VlH4x7S)r!@P{ zob=16|AxZDzp<&@H1YQWmhoHqea7>*v65;0F$H2qA`El%Lx-#P;&y}azM&wk1|Fvv z7LpI0n6{>smCgq)@fy7G?&0IBB>|;*-OSHh62vdA>QL{+D|5Jqt43n_gUwhh*NZqL zepg2TtCY=2bJ=2~wk4f0R}bFJ$s>bj*LvQqDRDo*XaNHQ_`@`Ra#jP* zfID2bdbr-W9GoH=Rnph=MrQD4mp06l6P%FEXUWQ^?4m|>YvF<^G$Ahq9tZpLpMJYc zj(w&@i=))K#2j{Xuz4LSk-(v%BVbOIG!xzzZEHDSJ#;6i8uQe{c=F;#hm$cZ>lJR` zC;>8ZX=ohD7~eaZ7vC|;cIn>_Bk=Up&m*Bu*QZ8mYX0N!bN&|H)}|5iT}z!~_4Ic7pBdZei!J!X&bt z=L;tzqT-zt`AxAANPjaCK4sq)R}7iwLz%0PQ5D+y{o_>xM>~x}+TXS0rZvd*iROa< zs$uC6Qe|j^XYqH3t4B`gynS;_MeC&w+us8T>pY4WsYzy{KRbY}whtJ}@=OniDeZUs zCnb*@?c71FCs78bJCbjmE=%6gQ+y>JZ+A)an654*pb>?&gmi>7ke1w&G`)-xR}OOE zy4Tuf4H%WM6)r$*sciWW8Kw#5#;z=yOKF}uhxyxdX6$-F0jm7rPvT#ywHNi-n%N5g zMfYwSJcQmm^c7?$0l`%A879$=!IDs+%BYQxY4o{o|M`@qoATXjAx(H298>P5qn(up z^VQ{iQ98GaF!ytomVp`f)%1XF!Vdu8t-~(Ppmfbr8wXsB%6#pC28;uRE{TW{-P#RK zzi?B3l$3vMZb)%Qld-b8A{+MkHM)6^>Gs|~Kr=V+?APIL7dKZ$3}L|@qytIv|KZNj zB|UbG%Zgs`hk+hKq(v;~xC4O0eeL$ao2Yu^z~wK#tpELQeA(%?B{luW359E#nQ&d6 z&sANVO|YRzNWJTqoFaYe+;6vD`mG|`#;0b!2LeK?xN=*yL@HHx_1_ogpZ>RPu z@_po1L%q(jNPM#VJLSHsem~Qtu1fp*^QCI1%?pnB?2p+Z+bUb_nvA5(lHO$cXkz{W zttcqvn0K5i&yw*`0f@x9tj*=^N8PmMOu&64aB!leiTg}uj*6Za)i0eIwG}^&yl@a@0rMVerS2sm;i^CIbz+mhf*P!hPG#v%#O6d1y|C)3S zPy58`Vk+@N811~Vf|UGZOFEOzD_P$W^p7IrednZwcgXf#NbE8bXo_^1d+_a}YR=7} zTe{L*X7j1^s6iDRE2Hm#TixHYX7Oe@On*t_iXFS#YvK*`ej8ZKW{MMP)G3q*8x?NJ zKITnm^fsj8tYwqOY4Ve154Z5Fov8qjB&lm)c6ZNIen&hL0Q!wdwa<7-NWqc1?14#9 zbP-yadFe6G^SAP6%LHg)=UqYCpG9N|xYu;9-tJW@?XMaIamhxxII^CK8o-NQw8Sdl z(fexyxOh;rOZ0UG74<)|WbL$!#L`N8g6_xsJqrq8a;|YgxN`J~$FkBkka(SK3pB;;4wx<#47AkXX) zh6rd)+x3(XOI@-KCj9-))=Q!KB`N-ko9a<<+zL5U`=$t@6eB?!VwW}Qv$?;e8ez_o z>z{6CNK?dzIBmCgr~o1SWBxpX4sOk=B`HwL@c1w%kr4UseR}NO_+E0B_QuIdbDn`9 zGpf-O_AdGce$=I%9^=&8nR0`yX?-wGN;WebFF);ycP(qrLUDU&+XEVczm~a za*5CF-?75zb@1jz7C5{y$}ha<;)hoR9 zM55~cjtG~18-hT(bIOnB74odudk}&Y!BEz~%--U!c={!P!6p-uPEMnMr%7W!6AgMl zityoA^-vqvZW;Bn5+_r&lgqr;n_nWH@#tQ8Aul%Lp^jO9=nUe!2=;oJYPRvQokyjI z!+iJLCc9bnF&9qY03W_t1*N{-=y={=KAl(~SR%r`GI~pnnVni*n2l%NJ)8Y`T2lX{ zj7`368cg0PPkBO}H*NgNsV)!HM46DLZm6%5Z|7cL9Am|Gh zDq19VUmrCVXL1A`K+rr2|H@Vt2tgdhz_6bH+(+V z>}=oKu@kNzQCG`XCdJ*q;4RGr!CWRW1}`@c=|{i$&D}Eqa{nF*$g`En?7dOy1Je#ZG1XbYsnj_pz{dY5udrVIL`K6uWbR+DWkGTftF$|*QHF<5Fiy-8A}`Nc_WX9xxt*VHdhmZK z52R@bc^twvJ|ngF4IGBqi<0~w1mr8*zz^hFgZ%dq7W#Q3q61KV?X9ZI5sv>tB79<5 z@%qrV`+0ZQ_#-FI=Zh~FkFUFLB2OZ#BRL{DpQ}eEL>gn3NM|i;Xy={sD{`c!zmFXF z@LyylCi{0iY4Qb3rS+B;j00+p9HtbAhx4pXLk0`cBUO>|7PLye3P9QAjF0hfjxCSd z;n}wQM^Ibj;bZ6XQepWlzhV=~gmhy}zDnsNi}@eWM4{R=Z=i9*px9xTqKnz9NcL6dZ_U% z?mQ)`_wxn6L}UUW3A4m;ioLYVe|?oJzx18;b6C)SN4@ZGN2v3Z`Tcc{ua40n`(22g zsBhqWzcdd9sNL?L^GPIZTttx%3>6N5^Itr_-3|V>^H_FE+_Z({ha7x!*%_8+QbC+^ zdZbA$?yP07?Y_sZSvn4};CzSzb4PwX4z?`f&7^;NOawvRQz2uQ6$*E2v0t81R-A$g z0(V1+ikl)4U#Cg`>y`lI9XMS)>RRo#lp#x*4)d3XTeA;aECto$%2rUo(lGk|4qD_W-!>p$ zoZ!V&MFiAPz*VsH?S*B!pArKbEm6agtliz^v!C^!?-G>0-@H{ndId`HeXh}JYZw?8 zyIWwksjAPPnofgy|C9D!c~LU}WL?UCGL!DY*I5`)pda0Cl`vvUy`6AW~*iFL(!GShP@- z{WT{d*zRiTx11p>C{Wj{BwYMEeNyc)Or8{}m`>yCuT*`fr}-%n52wFqw-%XzvyPG^ z2_DJ(O;zc_Ti$FWw|%8QVQd8wBGPrAdA$)iZZ#TIPBkrXVT603sShr9NI5U17uaLX zN|V*)-Sc_Z()1NUXD8!A`tx7`9OJ(HvPeujSGV-(huuaR%lW2|IT29Fettm2^0;N= z;XC-|9P-< z46+-LA7MHj6O~@a1!e^I-$?QcT|yYj*GEx;Y^YA8auI0o82z4duu?%V?P2*$Dc>*K z?HSbU_RqNzsULVbjo%;6b0B$py0MP5;RF{|X8Ylza-2k9Y;gjyaNjMb^CWtaqN6yz z0QiZa$UA!${`^KUvvfq>){l3Gd_b8v$FN!|FQUtk#{XXq+0rN|r|RJX{AstG-e|Ds z!1nGv?LAT643`67(vT-A1dY;Xei+!1CDOl__QpquoU0E9fQ!5I7ej7VfoMPyGNuyu zG-_d1EvT2)cSgkSg-vOQugIj;EsR*&W(BL6&{x51hs)p;>CO++DtpaT&z9YJ-G1p! zqrAznD5ozZWCi!$`@s@>4zlb_k!xN2(bhriK6x#xU8NLMnsfT}DvVE}w~{SVPDRn> z`h{gkf=5C_Gb+p|{5!b}&UUL6q*U@fiw`m~fn^$+-|Q5;k+ z@zplz=J^a_^Zcyk9180UM^_W^B5B)wmH>G4nL0UVtHmBC>wWwRcU^jWe&M2&ORL8o z59hu30&<)CbG{kTi)gSQ%ym!@j(`hoegT<}|2Y@&gR(#^uGx^yLB8Ng3qt0@ryOor zY_+m_N*zJlid3_;_+s1EJFL0)9D7E7M+MMF;dd?dpi5vyoV209$qy5Fsnd(8A99(x zVBsBR;7{&}^Xa=as}(UdnS(mK2tkBpG!s^hI`$`Zq7)# z4frWTsLyqOmz*?^+f@3sFDcgQk^Io?t659Q39^BpuP1XafXSLL3uG+UuRv`cYVz=z zwj%Uibij_%9q-`Q&kDZ`kd97CF;~!Z&DxU+rh9W(ufqHNr#wwEgj-(nwe-2Y-^)Mr z^Cmv*Li)*Uvc4htbLZt$ z!B`QC+3nlf27AZy(AzFs0Y)^ZO6~%19E=zDFVOCkNnbdW`&GMJ_#Q;B=yv9itQcNb zLfg08Gj9(r?7aX@tiVyD9SSgsS?48HaE=hs-<3n?GO}HsUTw3qZLfzYk2aGx@!=|w z6uHbsE48~-dD>LLp{ga zi^B^ef%GjnY!1(qfjF%!ui0Po<&w7W^hq-T#EtqmGh?~nES(6?Ko{}KiZnfr;HBU$ zGm~@f0cvsL;l#MKg7WJ%Q59WDD9p+GJgaiuF}vCAxzKC?a-f5U`oN4(S($y*Q3&FO zyVK)+xUyWwt3t~fu#Pe9&&zq4RazU{G?#kyqE;Swak1aQJCNk2&x4zI+~d*-?I?>r z?P1_mGr%Pds#-N;+l8+XBKn`K2#_n8-;9PjO=Ju3T-?%s5o)eqY}VqNUoMDl8d{;5 zzx0il4f3}4HKFHb^Ge(!7%98RYG^F)^p0I#ZU6l>E4{WX|IEj19L!aR>2vurOig)P z?&PN*B)oOeXZSDMyxN>?a&`GpX<4NZ6%+XJOC+7o(%T;fe>g?8oO@B@_=ul)W5%8k zP?akVp_ort)y!_c*mvhAv5>!;V=*}k*yn79Wrqu$vUlfxA{eD}2+9msXXR259mO}u zZk81GS7diYoSkxP#@dC@SiBLwQZWK-JaWt^-yy@49VwgXdBf@Bz9+x$>fL%tY||f;p`H&+npuCfCn{Jy~>P%L_JHcGDM7A06S%3^4=eAYcm+yu0 z-{~Zas3y`;twWt5^kHlR{oH|!u*i?*M)h{M%W#b6V)2S8N6zs6;tIKk=_fu} zpe}5RUBg*m{zbY(L&``(vj>O9R>QPb%wj#%?!W?#on$gdgIR=}$SvLZEJAs+oWJ(# zZsjesj;BwUjmYDHPoe)aJ`eRl?)YRhtNj%6fKOe*lil9Sq!l^P#Y1fh#>swCYDVm^ z7^12zOFxKbCR2!wg-J-%j-6pjlueMhOf4(UQJq)ty!2OeaDnL*Je^r{&efQNZh}OG zUhD2j2hl71e$tT_RwVY_G_(Bf$0$b+hG78@x_+hsOW9^$TpGXx%Gtl*}p>C6lbb^NRgi3%e1UQh(G~ z4AdI@T_AVBD7Eub_?zTw*01m5TaB1VAg%K2wR)A~cTVexH(bRi4x_<`c*v6^6wFMDr% zhRZOk7J?<3Xd6>D%oOQZ$wy{dUvsiK2t$mvJk zM%DR-H(3ZEYoa{bBZPy6Wb}fBz8O(rd=n}C;9}Wk{hqJVwNqff9f6{>tG7F%iDeWA zCQ?1Y698{()CMg-NJ-83j5yNqTLBR9M8N^Kb)}rTLbG!UA9)e;}!rP{)2E; znXu-Ai|TgHh0=gvf1{-`v)xR|<{zP5LZacn3L_z+8jKC}%hC|* zHPDeV1bSnX!!XYgC$RBPh|uxMVW7ehcbn3q)1m0?@GR448~A}6Wjp2Q6>~XWtqT4> zw7q3iT+6z!iv${NNN~4cf#BLWjfLPOAp{8$+(YB;Zb5^)YjAf+2;R86JB>AV2U%m=V()-8JIA%_SDXzSx zwE%s~0QrwkXT}D60C~KT=N2OZX=={4Ql`q)6h5m>Y-G>mGn4y(m%S@ZACRb~*By)! zXuB1#m$z#*&bD!LIvwtDfB1jFe`Qws8l0BNW-fyh)#kTq7{s^!pnsjRTvb5iU?3H3 z>&1zBP<{yjXFtiM+)jC-l;f0^dP%ec=+!n`S7>E@gIXWbEm>=8&zfZK$j&qF;D(@4%pA`9MLHYNIP3sF z3J+#KRmDo|EO?Cwcd1cCdc-!!JLi`vAj|e0D!EzSkoND|5ua-7;=sx@y(eD$?%%xl z%fMmkW}V$sh(sfZW`beDY!%YcTA9-qtsm`Ts!qb>xU)|&64S&I{LHlso0yC;jk7@=ND zWD4!%{LyJZUc)e8c+DmOgC;gb4b@D47VqVirgH#dIK^wM%6Iz9y1w?v$OLy$6dqZ` zdI$kqIi0Ksd@nm)`3H$>+U|{w0h3Zn0E@mJnPciw5nr=D5+K@jAlU=H&~hSWP})+^ z$S#5eGWZ)99;ezHm`zZg-2ZcBlvhBF1Nprw*6n(wBE25w{?wThs6`QFJ>3Jr{jp>% zMYL%kq!5X9b}U1EKDHPSWu_g_Jm{ERF^ zcQyNsO`f;{^{*JpxnRT@o?Ld^K>7`$&r$h+{Y8|o+b=63m_bOHD25aML}R}*Y5LA8 z{3H~p(}y6l(sMvN8zYdp?XSasVq=YuUmA~7mr?>?3any=F4DnEzv5yE^j(>wfE|{+ zpXa~ceci|h;YLzyS`9@TAS;o7`rKH4;nMw&NSeaY7s^();~5+@BacD4MHmCtEro9q znS%>GQ)imRH^cnsjG|E;RDM7Q5M!SScksdAHC_tJm5_yV>k-*bh)<3h;A1Swb>1(w zdP)Cz4_`K_en;AH{EJEEYp3B_;w6m#fFgR8z(bc%bH$}n9Dkw;Q4B<%yBwJPYgh79 zoI%e%mr!8$E=P15-z7f0|CDiTdRR2Zar8O7cLou%=idn#-%&S}T?fE^zwz7c36mL9 zE=X5ergWpVQZsAwoEq5)GE~maNOSmV=Yql)OJ43jzoR4(C-VU;+us#amp%Y6zHF=# zaBS$a&Z{#SeMYutyWaY^RKCf5E-X5&dmNA2l58oJ+v=0~Y%1_n!OJX`IMFV@d%z0Z zp@8GpFP$(w-?I-XWFn>H2wf5GdhWvY7K5!K#-}bP9><^hnA~kvdaMnIw#qe4KDYT* zhiCxT!O)Y4MB4I%@X>MT$Em_QW_Pw8Q(GM|e^#1bWQj$5&-$@MyTSWH)bB1D-5;j{ zrL>jkqzEfJ8|UZfdd$5zOtlAiN|!7# ze4_jI<5!g*fEjfCJi9DFYMoMNI5kj!LK3DFoQgH})&=6tMs-|Tk^TnDf#q_Ux8NJVn@$%VRt*9-#vpxCpdWMZ$F2JR{g0r9G(k9g@b75HBI;93=_dFYK zpbA~F0NK)+oJnj6fuo zn(R8V1P#5F;J_3<>eDQzhB~3NrR!d@Pi3fO2deKSxn5G``fPKZmanfC5Tv1zR8ue% z;$da$R7C2(0@!Us)9`a0$Olip>IQ0zC5qx`Dgp2&NLm(4ujO@*TVzmC<4=a|A;GR6 z4!k?z4+(^X)*M(jI=}K@PkRau%wQ<>C^smHA~;@lMBuf1l2|jJMW}I?>-cWw9GN7U zp(+|Xn@J}z-UB@@Wti)@**S6QA8_6<=ZBq6f7QNUu5`E670+mFz(MVusLS5pQ4(`t zkCMgSrDRT@!EsK290aGjO@Sl=e~<4nj8c4Dj*!4ItBg4_I)25s7Jaa1$zTULvzRLNPK7XHrsh!A_LZ2A|~VQaOS(?UuG}ydU%fwf&SNdh0jWjR@x5Z z1ZgX=i+uS|#LO~%HMHj%Tix~}ALIWGrR0R@cLk6feN!%Ec)T@MgE zjTlma4)L@5wc6N={?oe^UP7lHOdnHBgY0NnzvVpZi&%@M(azwX z*4p*IJR>&YOB(aJA{WxPH_aT@VitD?(4#0bvg z7Q;VR^$i6-kKlp7m*p$~N8VnF2myuimAbi;J*uZLEu2NlILQ+GSDv+TefO^ckm<57 z%tYIM$?{rh%5wQ(pnicZ`%Loktdxyk-Y3zIR8#pn z$&Xj)bKimLZf2H_N+x!GuRlte>GWgc)2j%bIL{*ZU`vLISP9q_!l{ z8iYx9c;BKR9$Hsm_4gEd^aE!S=?Q=K3mKeD!+z|{j5}j|50CL*Fd#*Kh7y(JGRX}$ zymv$5?lSZ^N+hO@b1M)oPfv221{hl=UzPI!h{8Y0*?czJ~6SXMT|InC&=S=ba zg(N~Xd5aKax4IR~B)R!}He@0Yg%H2VT=*vyb`rnVIQPm&oHiTwiV|O0u1^+uqB%bM z_24gCIUUwLDlNn(k_a8=A*dk^T1Bdu%sUaDneMBrGH48ZWWE|CL6^i9?i7G5EdktO z{BLdA?n(f{VtPLeN)5EnOw6AB=XVCdR8#ztZzNU&Nuw1u^*m8ogRu;Qx(_Cu8Uh3}(wV_MG>FmQI-Vqqog@W}yAk6!^Vo?8qSLZ4n-&paLF zP4`6o_U-3qwA~kz8qt+`guZ&(rBz{*;RjYF^{<2v;E$$D&LKJ&}&_;zs1w)p>Fg0BYZ;SK3A$x1~ zqaR`xpyS#ei-)(|c{Fg|3f%+6Yg9T32i%j?Cx(BtF0WzOh*|+{w`EPk-8%BD3@_-bdY>%DQOtQ1g8X&4#7N zK=d}8pamdvJ{Hu=(@GKk{@2`Ul{P9z&Rz z_D=aP^#z>JJdO`OL&YNC%JA{)$81GsqpgPZ9a(k2s8=d~@P|pO{0toxiS`D_OAm_y zW|$WvxiVRy57g7FXJl8_P$_FK1RNF#5a3kf`{s}IR>(l8%-G-kAMP(V20cA?r3{`t zVf*QAMSNutr(w|cmrXxxZQQNk$Sf#zS4Y81ckwa3daV|F!oX*I*`0%Bhhxu{fWu^m zhg%Z$A6_lNj10&kFIOnLfHZ2jUAVf1;H90sjere}Rr1c;RLqc}#vk6(FM>$e3O}m{ zE)UlH{W_edUb&||X@k&1F6@0q`R6g0ys&ccxt}?EngVd$1!|n;9PV*d+GeugXzBFf zl5W4m=P%1zer2Zxp@+-1a=YmIRi|FYO;Tzf$I6JUU-jig6~iT&_}a%`b10_)P>}^r zNCld;eMd8FNh)YSgOg%@4ov}NLIUjc7S!rhMPDSRijcVo;Nd163io7a8-jci>-B0i zb%eh&%X0u%3`vUq1B`;!hO{9N15fu6(0DJ3$pV_;IX1WNE`R1Gsv;4Vg~?KUZ*GM*A|eyBA+QKL#!;MMk$6u5BZPasfr{P!y?QSaH(?K#u8>zlxbW5RELg@ib`Dj> zX-PIT%N&81PPzZ03At3F8`Q~qFpcDq;J!3)rx|}$-E?H4=+$cT$D4$su0e49@1AN- zv6po$Vdg03?AZs6UyTUIdkQ$9c^Ix0!6xmMax-*=Q`-bDotIS3vec(r3b52IX-Pl>hC#^86{4#S<* zx0M`uS{@&6u|(JFb7Z5=wwuPAomWda&MgW_yB@>V|NS2%aL0Fvl!E$Vz&XJ|;2@x# ze|N%bt(neBr(@j*Dj+~g&~m2I$L4aS(+_sqPX#Sd7VF*a9P>6JxYpVZpeMSl{m=bK zFg;~8*b3kelT&&G+9O7y3Q*KpFAhBJ(-YXrkPFy)Q{YWbPTuj4Mgk6QGtW8C@&9u% z&6^A-P|{oKldF8il$l-cO*~t^j@_p`(1#X}TgRn&#ATWR#7KYu^@&q=*l$4`OAa%( z>3=n)1n#p=#SABqX{9idO@?@GcO->S_9p&}+zTM!;LzLj=`ykhG52c@Axc<&EH=9^ z(I(N^WoVzE6E4B0!b(TQgWI{HbydY8S?HbH3zr+yh6@?<`TE4d+W5IBcljaZB3J$# zuK$(zpNg$u5#i^|=J}bOia!=cPbk?M``u&@Iu2+M9RN^qhv&&^dhl@_A)s9E( z=HnWvSq;?#S#8|q)yl|T^6L@NG`TBHJhk#m930!lndK{n7bC#K)7Yq@N@L#1$JKEu z*Vz0ZsulGE(dqXujJkZj7QroDH#(igoFxJjD2dFx|1q#mD^=mHYu0e|s{HaVbf5Neu4vtK{#>-+-ff0>$un5=p+mUN zNGLg_=-!4(HSEWtMPFKs!hU9fW$?Q|?A$&foA(#>TJiNoGqQ~>y^8z1-!EOzZ5CIq zgdVixynf2+lP%;U#PZQ}u7x8M|f5n<2)mI@zg|ZlIVcyPc<8z;(!I$9L~wQ~^q!Yb6`jqBLL% zzfHcw{?yodl$a9Bhtf>O4EJxGbd0dTZ+yHa@9p|`1zi1wQWr-pWPo|_-(Inqr{(k4 zSyPV>-=xybcouk4Mtl%PT_6+Fs&AROknxwaWv%Ax8Ok-T=EDXC0A64wzM&NGMdFYF zjW_CYoxQB>cGQ`xG5TkmK7unJWF+5uhx2>`!P3Z};nA@f+;+gEKB-N6z?|qzH${>4 zR?QbzqlQNB^?o*W(z-0v)v()oXx^CZZ-)u^QDD#2VuTLcw8JAMs!yN8J?@JU_`ouA zo}HV?{9oGfoZhW0K+~l=FW`;O&_GVI1eSkjiM6aZ8S-*%+-7g zP1F^Ri0PK6U6ca-ePD{ewkjwh!tFg}T>H^C%op2`fYP&u$_sg2S9x6r`sIf`2vhyA z`G^?5u~@Cud>69vd2`dU_D?gn@xK3EEtdLAEtYyxi|4gwJEPw`sl{K^f;}kJ_!X}b z%P+2xj-Us6su`R+b_T8# zb>Hncp-)*uWqqM}hDQAG@J`44DW^m5iOnwUW~M!xfju8Xw`I^n@0F$U=otn`@n3(e zHpYIf(-cR@rY-k2fpt}cHkyhYXh!ztY{dmCb6F}m+DO`jiPeEwQLfZYaV35{=H7|+`3Q5!r? z5&Rf{#=_!S_T<~{CwE8VLCC~E^=+-aa9scN-@;WQdzeSRpJu{;sCgf5^czPHeU+bw zU(W;{QjIe9N0yp8Yf1O;st=P8dRnKP6C#41dTNzU(b_5RPwDBjXolt+{@)Bz|D$Xy z@awa+d2;o4d<~X@?s2?WZvZ zhVT&KFXe$pNV=NNCO6vs$84jsb{!U0o>9XVd@r4?6r*w#O-0#0o)qS!{`9H4a#FwT z4=Mt^R(s}~Nt)hwIOfzA+3j*PrwaQ5$Y%%4t5kO@W@WB$bX|iV8mR?a@dwhOwmVe4BA2r^D1WdH- zsFt$}S3J4Sb--gm&md&Xw~pq+<)Opp@o$92Mu8`@)0El`d&Pgm6U_Fws20+IYQa`&U5!>#GNbF#o!T_3zZKZ(k^c4%7P9Ffi@g3 z3=I7zV#1<5ga0Zz&HR?oe+F0LUSZbU8C5u}JiTnz)9}Ag@j9vhT}O^#s0aT(91to| z8b=#LH~T?0!$%`T!DqGM+5MdLgR9hg@uRQHL$;t5cL9?@Q5&Rxmzs_?R!07t{v_F? zBG?M-Xc+5yTuefSc&D8kZ?;kdUthX^tTBDQ?GqdlEkYr#0@iR@?KI})BZKf+&rEru zA|R`Zmv4r9hFBH$hI34|&2VT|hwibZ4oG6?D=`Vt@=_CLZXkx!Pm>B0F}3ePd<+ce zz|8OLNzi5cOFej1%WL+#sKpCuvL!1oF@4EUvEmrhS;nasLPdVqAFbT3o=BxSoruRN zCyYfq-sApA*U8mpNTcxRmvPPN(D%B=Le8AYXAe#byY(I$6}VF3qdXm)nVH%@c?GEc z=GSR*Df{_*O??t}Q23=@#&09#qLQvXjgM@4f`o~y0Va*@G>UVAzM~m`vu&sU8{4k8 zUR;a%y@IDcIciyj$v)RlX5vcX z4ZRP_)3U!=*d4YkgeWpGEAwxwWCcDC@)$T`?~Zp(LpKP{RycM6N1M0hk5B@4566KW zF2`7M)>5~K{esn|k{jJDWM>sD9ks6@{~b{*2F~c9@}d;pv@4tr5uS%lh6j2Q zBKT^bHUFi{qgQcC?lC=)?_1-4k?)B*hcNp}lNXj?e;D_q?%d^3RssRL?Gx(`dB{I! znHR0FomM=A*$Yw$=ou`RAij#M35og3kGG_*NlT)`UUu7XG;M^QO*QPjl=%*#nPFi4 z@4B*zA;r&-gzdE$VNv(ZXKZet{$9BP^knEeRx9n+Wps_7zt}}!L>XTtKRC@iNB8iP zHU?{SKnGVj66(1zAzaq1+YYX^Jh_8NAg>Wy6H_)dR&crKVLVt+$nKZDWqxOJ=MF-%TFgj&KJd<2) zfbfGVCQ!AFt-$YFS$@kG59tTQoYxf`#DRl-9fJx5*yl~(w+WyQe&id7^bA6OK(<5Y zX1XY|+?Cz;l;j3hV^UT>34f#q;8=tUOvThAKsX~BbiPU!{$-Z3Ox z#|XTtC;NFo?;YNsIGR9A74G9k3&`PG>1k@-xnr6Z1q?S8k#?yvUVeLRrJN`IK0sH@ zA~i-Pe_>eDn#?4PIIaZmY5$B+39x`EWR7)%=;Fs0Q1@*UBCc~Lvi!NU1o!N3dfjdd zLTDvIzO?UP;lQC3{;7&pZ8CD{YYJ%TU4tr%9N5AA$elI3@ad@E4X z_aKT{!QpL}6@ZxV>R|q@t+n2X-(yuyMfz*BAz5TF3fVWkRrKL*$T0N5`Yev|M^lcPuJAQpLrL>>E+nPq{ks z-w-v*;4ldWf&j07<)PZET^Hy4oE*mLm1TT}+b23HXl}9m7h7oB{qb z^q|c@_Xwp^HC9?T#hn2JJD%*W>5T=D_38p5(Iza$YD6hBV+qP z3IY*E)?B<3<)|Ks=&kDJb!4d(@ne`#2_iebzjAz?@qPQW@zS+|XJzsWO8OWH#1|zp;AtqQl1zw}O3TFV0%@9* zgOUwx4GPBmclv}~nQGc3)0O4YZcecOa;E+PoGF{n);azV=iq41twKN6Y<{kf)iW*! z_8N-_Qsy5QuF>0YQu|c>$37Rpz@hMF-J23TA{tN@dCDjR)DhV4 zbGBZFCr|@s{Joo*BWgLj+FfAiZKa&@r{-o0w9~VUJ{8;T@?h12)VleQujz8mqIED$ zC=t3ApKL3x$1UF~n3q-`RvH-TLq}R}BmOOLX?5-h;<`@M+BX`aw)TH;WW)DF2U2n_ zcmbFb=%{1m8vPvcehuflN*LoHrPZP7Fc%VC>CbTCFM<>bDkdk6)oUy+t>>?tvEHqw zZSUY-l+Gafi6DRa^szx7O5v&TmAUn4^{X>5%7X^8#4rXJY>rinU{Y<3ln*6W4kF7& zfhgX&flUorF;;swS&0q1+Mh|Pt15%6C=H`3R#{>J8g8~RA2c}9S87)Bcz1A&cdP~k zeMgt|7;C>N6SMYrWIfo-SC!5G0fIh99dK(b*Xvr3Vshap!3-mUw)>qfJCuhhUp=^L_6b zb;i)2tXmKT!W?P#GVbA*qs4?>hzd28=Y{dWzBXr8=udPJhO-2y{=a)&B8QF=w-o`< z^>BYX`(3Y{7HSO5SG+^TO!a$o@Z8ekbZ;PSLT4GfuwiV&LD@$-&k5Re8nClE-}}i` zcgJ53(fk)GJg{JiwK6AQpcF)Yb?D|u?x>I^LzPIBVx?)}z}u4Wo*BooDPY7UTx5kM z_KlpI?P@WLbGwT=w^2CFXU~Adu}AHvEsmY!k`Of>!3apQ zy!aI_mkx4tb?O8H4XZ^nH|r7-ja^{k3k#U&`?H+X2b=|dG!-yP6!dQ0c(J;%Py9b6 zW;k3!{BK0~GPXc{nIhs>cHha!Uc>?`jUZ|N?@#=J1o>sUzH7DU`D?o5A69=o?>v?7 z0Qav~54irxfH!=E#s3!uT=-IV_`_!^ttSRN`kZn`kH5;~XK?3TAK6c)GJf~XnnN?P zr=?E2El7{Ve+i2C_NC*|!Y^RZenq=z)&FTXemDVf(fcD93y#jfOx%K0{09=N@rtl9 zS((%)oukD_Icy-gCLL9ME%=h?QD17Nu#n%kM#!KrV zPURWAX;EWF|0ZewHR346-3Pkz9Cu5JrTi)T zSBYL!P8O#XGwq$pHw0o-A5r{B?bBN%J6LhK6Tu$Z7=b8h)crN^w_{-eK=^Cr$ zft1Wym!u9`XtVD&@8y7*vgTpug{WC`c`{{F#>l3MWLiCl$`6Upn+3o)T=km+Yv&d5T+1DqZkQx!iARuuj9_t-O*tuJ!H4_=o`Eb^gri&r`(6>dk}9s)Q{WzEAL zt=kvn4%4%@g9n^$#+QQ!BHW}ACswa^taDB`tKvI9w+nWqVw_#L zCw4}3&uN_{AZA&ZLcKQ#a*`hnP;amnDG-)g4l?nrU$ay$;)&6?+xeQlN5$l_^T28jpX1En2R+1`VU1)VN9MK5bYK8uXRw-8aB)S};u^#ddriB&VIHG_#~@M{cgw_w@}*e4g{R8&ZRWVgsBrPsYc$^zb!tBv z2~)4!bact1jn*B6mH5$x690BR9~2rIh81=x|7w#FxG%@BJuYC)Tthi%yj(bg32i=G z04F?So>#1J-$P|r)Rc1a_HQuiFPqvzL@}tWrTbZ@H>14=g6_U8Qtk2bsc>fwg%$;~67^s86k9_av_W{aI0L4g*d6ki= zbwbLni{3C59-tR9tG0)M)N^zFX%|`WJz`-LN-=5|%?+uvB9qJGTm18oR zjWbj9m1gKuU5Ihn92hV0FjG14D0d{`INOZHacsNfYBanzW%u`9T8(2r z`lt4N9*PHdbZLxcRWN%n@LDQAG)JX(x;=HBaP=Qe)AGx0EGvt8cNdq1EmKYv-J|vh zVW>z{4yr+wKfA9yHn_JA+g+pJDKV!S(rJt`emyS%CA7*L0@#cu+!O80Y-4IV2je@^ zkS-|SD`McBH7fk)%TE}OrGs3hv4!z5FqqZUB)Ag}GD%8+(1N!(;|(ayJ2}#~rsF@5 zc}y!|OR|XaZI4 zP`^RV?oXT=$15|C%OPM+$b(XPph-QqA==z64%a^@c}=Mt_8$Z+A@}Vn8?60&G8^n7 zmVCWw3@`mErl{%RYi!jbN5#6(zXVi&g#(2Z)A86Wnq557d~#R;%t2`7ms495fAbyZ z4Bd{5eh*+_Qv3K*{q?wo@W*k8+T*717j$~ZLtBdTY{vy5cO}an>S@k)4qm#9>>hrt zqRpV=kmTgT+N|{Ck+iI)B0TP4t46yt(t1ls@Av0h{Zxf^L&dOT(`7Dmke$M!T+Vi* zqAc*#<#|RC<4}Q;+V6V)_mrp=L1SNUh0L|v`)b9=Y|F~aYU3-a%^r1&T~5vZ)bNvh zP~*4ax-!zg-R!A*ZOq=KWwBAtQW~2nIyfm-)KdzBke8GtpG! zb)&%$WB*j8J7*BLRc5Bi_mO9tBz0SFi3BZ)Z_hkW%i4R>iaeKC&D&h1;}=oQZ;rIg z7b-u@R{pA;@%`Cr+|C~NTKj62@zo=ntqjiZ2)`weg#k_-$b27;J`3ARhhb99L zHupCn@7*E<%ym84=u-DV6#DBnEeBLnKXzTySzOpb6NHYrb87B(*(%t9zs(-tV4fT} zu1AZdm}050lzK@NG!?tRY--Ms$LvNoxp9k0QM)cEzZ@igJhUjsu6*s=r}$ZcJt{@s z##10(tRTdU@Pc5GSp}j(fP`$x!!WTRH75E!BAAFzqO%7J8H|X{8XiAaWpi#r{F-TF zhLn(9E`uyzT^t$D%i#;$>3-q6Wk-)}`(sf->uI*$MZX7aASO+kwr)Ph}F$!b~gF_{_DAm-G#1 z%>6&f9n6D=Oq7f+=|Yn=(wzbvUQ7fv!Wk#|tL(gvSm&{L*+thu{g@isf-r~Kndf2} z<2SiSzflkH{r`@Fo^;aG7}=o$<+BcGW5rgU$x}RVX>?622NoMmeEO_hi`S=WDfhV? z`So;#>Un^D8+%U@xz*)umZ$D`o%P2m|9#eHXjm^(lqi*PiY@x1-b{({j&5_PGpJd# z1d{TXzwO6ku&JR~u7uDeS`mJnu)%5?s#NOA&9ET*{(bo4u#=_I7|rxPFqW|a5G-<0 zoo}~*%OCw{>US@Nt>qSGr@5XS?{0<5#?@8qSX)~jnQeqp-jGeu%NpvmTD;@8QahvPO5YtI*sYwMIM;p}GxK-Qb+4a8X=!^G z&8#ojNcp`)%4WRM`q*aV?fKKQ(J|}C;s~0}rjn8GuBrzXd5ktC2pMG*KS|~ku;&o< zDP%c`ejf@`T{?F>vFTW|Y5P_x%r2b9I$@vR+%?02f(s}%7eaN7!`mmtotaz4p{Pv3$#pv$ja|J4<@X5KFGziQ ztewD5M;>etaqOf-Qmode6Z_AEtB`Sww!nGCeBm4w59l_tGt}>ppPwfY>Du{Jdg$;u z_KXm;yPwhRXo||~QTJ1pBp5c%BrXn!JRXt8XAp}S&P;nh&Oa>owa@6-_&o2Sxw-y zWV`Wc2*>xL5yp2=^;^gvbz~yx2KqIxcS&0; zi8}fpL)7C*;sFFKRSw))Dqnq+(J}P9Ue->KM(6CdT2_y9Cpcv%1?kzHaZ=qpUcbnJ#CA3LUTF6LV;7wP9KB4o0Zp_%tJ3* zoYH51<`t_#jNW$O zMkO>azXYKVFeq-4AC3@rp$jQ5&3x3Q!>pM<4;+&^I7Y$&D#QWUvU*R;iAmkrjSgIs?KkMv5+ zgciSUQ~}pK>{un&9FQe9*mAcD7-L8eyrW_3>uBKaecRHm*C_+0?X;G=jzA5;%vxpp zK2xpkaAr5j)b_jh(_;9@H*8*v7D9YU|1o*C9`9?R3iaHH+qqHZjzugR5spVdJP`#W zsS2?qdEeM-wk=q}y8yZ88B^FyPz?emR?*E{+mTMxys7W`AEGV#TjE;^DCQg1GVOXr zR+BZIuU(<7`w+*o1L^1M=jQ1YeG!NYA(=H(ZDMl{QKZWl1!sk|3|nfpC=$5-cMN27 z_{g7OK3fmesU9C|WNFB@6bqD8crGqVAdmi@M1`I}Kit9k-joW{cFJ;rR@1OHHZmb3 z>&Ck+>$xvSQL_;gb-hFTW^UAjD=$`4DzpvQF=y!Dht#N6&SOYq#l{<^_ZAZ}4 zU+ZB+FLg?{hc<-6+OHVqaanghmTRo1Cr5>4= zR`zHdB)5|Y1S!*)EtR`LW_0=`IR{d1iN;47>qs^9rm`F=+pwA)+_R?EwW*o2m&ot= zPRG@wq(@Pky97=wWNQFEgt0XR;KQI_X0McRFg&~p8GW+-%%e`f)!A9)Ge%K)PNR<- z3}r5r8+u*{Yf!!(%W8<;DqoPaFK*A0caLA|Cu|y%s=2zenrnE(Iuv$^XcKk!DRxTF zB+!Z)-RMm*gN9HQeH|fyyB{Kw3Ryj0txkEP40zlnNTPanL1qKH5asD1u@M>lsh>Xn zt%7S4Qb{kVvx#j%Y_dAwV!Wu&j=sQz>!%~^^#-2@^$I^Xa1#)<$g0W-S$Ag1RXchtRd>AHbC(&*rd znCj}%D2Pktm21Bbv{I7Nr}sq zma2V?N!GqM3+~#p8pIPuJ!xEf7U^zWhV6K1$_)UrIT=o?Of1A*(eeL`GPGzT@REV& zYg>xgqm@;o+nmIc{#COs8Lt3aDf%KRQ#R{XMj+OMctpF`wYDsly2FW#+=oU8h`Dy) ztqVkpr8r0Z3OxIP1VYl*mg27b3=6UlAJH?6H44v^Y;gIsmBA1m;KXvZEH9w-qwmyX zWo4yS(khr2CUX_FI#)XSh|bLF5SJM!=$;{qva;+Bef~6KVi{ff&(#6aEQ+Gm()bZZPJ@}T!S9LK-+qG-Fdx-2!3JH!P70t zARnaQ0aQAyBlALh6_8ySNTDwUCEkmiu-txcX@(ke6=~0CLLV$T;dzq&R9o~JO*=Z5 zWSTfu|G?pn6AfgY{X=j6$^dWtDB_j=0F%j>&b^H*Tct!H{5|m;X^UC6fip+V>X1p_ zu5`+!1EQn9CuXS#5wy^Uq5b8X*8(KQw!bcart6UC*M!xwczWDzZhz~KNW|rUS9OZa z3Cpf0D$hVfzw<>yDH}6j=ZNi{a>Tb>3XN!8B@dEul4%Aw-?sy+0T>5%&O+C-;rf=2 z-d|TfHH-I#MYMnN=1Ab8Ky^MnL73NPxdp=255pRlS!`CiaE@s%Ntq6lVUnFh%njD_ z(-mkbp5<0Al??^G_(Xm>g#giFyB$)TH$za_C96hh*SeE(cRNHsuXa{bs2);{cVZfv zd?cheX&T`oD(KfbO z+Va2uZe!TF)*DOK;c?nU1-YEMh4SK-6+Q$`*$7G5P4-(a*r(^S&Pz12O+sM=LOUf6 zZtut!H6f-uK1fFF(JJA0e8OM+q1aV7GRX2Ie1sH|{+v)J-y4x6#$L>}+@*Ijgz!!x z#>!nmIpd&|h@FnG>WRs`_&0(#+z_ zP*frN1ucK?wyM1XWdLn_U1ZR8F+fh2C$F!H48YTJ!;JaOP$?h{P`K?3-0#<5tTdBg zl!J`wQsJ6w_Y0rw8zQiuR18o|?QlfhO#WF0&;**{2Ix$R*T=Qui+-+(H)fw#GHJ8Q zN@|+gE9*DyP1b?H7p$7Jz%?!AEM?0z8KhbvjufqL!uT?BE0kqTi$Nw!1BYf~G#?fs zvMIBX3DrCO2AIN`R}4ai$yUe9gAKox2PeCwBl$@NblSMj^?#W0DH@n3m8w?f5L&R5 z0(7`|@8Snge6tWE7y2fON)T7E-8~qfpNRku0V+|eiND_hGUTz%pA_4E9DQM)uO9J~ z-A;-9gHy7suq|R)J|C5oZ!}2XlOI*&ZnmwuAl61zy}uRCnAu8V)z^ky(ePt;ziaL} z+^a=;7_C5rg3#kvyHyxG&x(j@46#qBfcHpe+Tmpdy&3q#^~C@x*Xiv=+8l6ro&9r~;;D*#NO z`AI}#$QI{4J(<028IkjZMXEs6W&~cG@&i}k08tJ5jCnfc8b<%_Mzm+LH{Xk!$Ze!% zF=Wd<_WH!glUeQhkk`t#Hl`*tAB_Cj_ja^&#b+F)f+n+(#Wnq|$V5waQ$s14K=?1) zUvy#y3Ti;nQr17@H-!XH*XkJ#rON(FgkKkoDUQHhRatp=k zFxxC_NFwIQetw%{RSb<1S=v6UVF1Q4s`@R2yhpv2q zY0uO6we8@Z!sw}!wUx&@X&3~?1~}cm6z)5{3j8EzH_YBE3`&>XqXA{oacNX+TBs1< zVp=8N^6C-*!}2?HFbS508J?DX{Csp1s0-H5BZ>0u52lfAM6Tv!`osxrM&5}Xx^wSL zik(*R{!;Fr{oq=^N}w_GG;{MkOzo4I)>3k2uw52~V?SW~O*IPe$So&E?Q~c$OiUWj zP$N*{qm@j*v&F^;6}s`<0y=NThL|A>W^CT)X5d_7%UF&;jXno55lPJKu@8Xinl#n9 zuL=nFe_zAjgj!lU-Wk)3RWUJ)Zt8}8sS`dyQV-UATJBS%bcgP`{+oz= z=^HeJkgOkGYac?s+K%wZMN`_$nUq_{&c#a}SJy<{ zcM~#C9qtecJn>&M+dOsd!*Alq_PadkNDS1r2#kZ|=ij?E9!}f`E<2p@hz?scH|%SS z*yoi=1$n`bdwH%V{vXEPGOVqwYt+V}K#=0lU@fJ%lpw*K7Pmt2KyfHgq`145;;zMl zy9cLGEJ)F!#oZy;chSA~^X&IM-?^^yGk-FZHP%>Tu6fUU%;FGbr%;wukFFm%R31!2 z6^n|mwGIj%7g-sW(hD6whaD7IFS@PjlG2u!EIFKip3i|goy@<}sa@k%)TvU=s7Y!s zeHSn<(Fk@~;kRbp{x&sN_;r^e*&cOstMn?ZVBORs8y zWKTWPzZ%#0vK^!JE40hJ{kWDgib675__V2stPzb*oAJ18`sds8@HD=n>s55`fM8D7 zxM}xGC2qR}zsR$R`iPjVj^plqvdl>4QO>1gOaW%)GxsM06}mh}N!6}XH?hxMSHPJ8 zcI{10%Sp;g3RK@c6PpVDxtVG?y5n)EAUhm`?3o+|)<;5jTC$(Kg3ESpU$nf`P1BFS zbCt($aIH6-%6=9gXS+Ff(h*Mif}SShaz$!>idCWGUNb;yuU{;IOsA}suMazpPy0$^ z6Hu<(^3$U%Bln4d=m#o_v!EyKF=Pu9EM0mHYzLffUF*`qONdePno8stJRzb|SwC|- z14BfrME!Gcsk+nhsBc$yUK5jvjwCr8`REP`kihOSVqL(=0b~`dE7yX5A~~INm1M}I zMeTN)vH#rdd7Sv^hT%P&e?Elg{FuTo+#+Dv$_96q6Blnu*DyE0YZE-S;ur)iWX|bQ zTWuH>_1oiIGTXbYg*>a=$ub&e#R_58IkPO6@JUd=Mc246Po5S2@cUy>@61FFOTQ%% zFm*J26&-*0PH8!{7kWebQgpNXAm(bMhM8QYqS4>+8&%&*cObF~281}f=J%l)R0es; zXkA+NS%9~0fQ1XTS%@_e@QR4zHe*$)Pa=U*1H~pe&5F9)iI4~7HfoI}scAerFBpee zi*iaeIYWq&q>+B5{R^4J@2f>MtE_#&wsrt2hmxD$;nYuxM<8>J+Irf`+lJj-M$?&! zafBoW8}@=ya*7iieR7ye_98dz_G@e1qC_~e)e7>pI!nWP>^eM2xnEmC+u2Kje%@s2 zRFHJZXC1;2`{kjy8DH#ZoXbGv58d-9Uc$UEPyxB~q3g|%Te%JH491n7s|@1Q?Bza| zUSW0AQ6hfUq)YF52Vd5+WZo~k?>CbFnpp@dPdv^nYyyj6M-rXcxa;T_3_i>*qvdBf z;5Zvw7k12&1IJleU?-WuNY*d`n~j?h>h$jhf$4${-!w914O75$*WzgO1>GM6IH@_w zG--YJErr&99DhP)ZtfjX+7`h^v#mqO01>M~*tU^tIbu zx%jY$!vaQ{WMXw0pk6J({nVtfoxHv<)n8kG;+#h_zS=o^e>F4cM zO8JVb4IxFn_N0PRp=2R*xO>TV7|O4dwNef|JA!|J+0kha!{h0)sr65R9S_H%_lTn~ zykXOf;zZcTv7n>#a3&nSqciMKKwRR%a)tV`V{%QRow>Mi-|8@r;{a)Dy(`YJ;padR z{rZrXS_g&ichZY-rk|3=25$NCrwukYkN?w@mkve%7bo~s$R>@s0U-jOorR|!Xvyq!xcg@WTd9x-iHH4%Yrx(9(tUq7BbX=ADLeS!mn#q>6i=P3 zJa1dRp*o~Hzjyu$N~}(5TW}5iT)D;RGsT|TX2arD<&LkYQyVnx-NA#K{@M%TJU)?A ziPJx;vU=|x^e^uBW=_WGiV*>e*c>0I*`*PIBWL2N-otRDJ>HG|oRzoO`Krj{b4PdK znq0R^rBms`;UPAp-59;0WvlD~9x7jue*JF0&}}znytX&Z;$|<1nB!19*}#v#cjCX8 zi=fq#3NC)E{J?luy%d6{FKNt)y4Av$Iw}fb{t~$;rJZB3^ui%3`AaO}e6Pkg8N!9a9%NPWr*ViW zjwq$w@eAeN+l8M~m5y)}6m&f;VcAju^=7Q%`garM7Xuz} z-KvANO2Oz#|MsnG#U->`cA=K#L9WWcwTt{=!Q)IyyOWh4{56@O__ z=VfXZ7HyWOYt-%_IhW1JGiWjv&HLX?LQiPhuFfqfTkdc*hoSj$s>&p?pM%2l8lS7e z)C|&}X5u-wwKV?wYWfZMz;kK?S5e*7cRRSl<4GpQ5^lDRdohbAzN$~!p1U#6y2n!M zItPNwnicf5^m9g7l+>nsZ?-bJ2~$0{c*|1jlj+-TRP!Y=3=O2}zWw@YSmqn5YV+pb zy}(~SNQZP8pYt&g$2%3?8}4W4CXf~9@4R%@aZkB7IaWo)d}Az{D4CzEI^lKJ^@qq+R#;-k@Gl2dMp`PC=)jJ(E9c-~5@W8hHFMQtdyKReLcQN2=uB2?Z z##tVE+M8wAXi&R`mcawM?NDaMqw zN+@eA74%Pg%ffUW{Jjm`zTWG2#obpOVD7Z8W4f2_2m$7`l=Gtb;JTQHV>hy}Zv%`U z$NjfYHTBjfwGEWu{?V*LjpH|AmQ8m+P`TmS+{2jqjNgvPO<*dAe)i8`#BVPfZFzXR z=|ScDlbT_oN5bA-l*XI#3N9C>FR0fqw$DhTb~?o(rKmXhX;ap!NWRMt{N^D)dn)M3_MOi%6+cGWvl{@?1Ai$;T8hDE1YT=T)hHfi! zE-sPAC%X>>)w>D0=+&u@EV~|;#)~)!J~De|8)gUOI8Zo0HFE&k*;-^L9=0paCaxb; zlJ3CL`!7wRT73z-ml@!DWTUqCO+lU!<&fpCxbt<3}37%y(j`vu6Tr97&pHW@COl>k zHnD!3Vb-g|H(t}3x&1%&3Skw9L~6s&5%<*_xOZN6@7+Dm84&Z;j+1Wt=^Wh zY2e0wuBh^R*#}+-*PUC}rp9e2Zg~7TgD2eI{W72Obs1(y01whZ2*U04Y=@P0Rp4r# z!Kw^dLgDuB<1s)Ondr38<3i)7=X20_z|Ws8pJ&GED3a^e`YTt^0#a@=n23r&29i-! z(@k9kYx|1{-KooZHpkP3P8oSmb|Q>^*ZrJYjL@R+vsuUzgqF6vEO9%gm=-W-TveNl z_K*dPYke}rk(?7^B=bKg78YOZF$8YU9m?*@t`%)>L8iUwgsKWLYOo3{MZCUZW{!A) zID~&d=GC3B)cdJQ5>>6egr}6qWvl4Cnw0AFU^2sGBMkk>iLMi`=4;mH(^!$R@1<`R z9^@-&yJor|b7h=v>Y{uJKgWagVziA^VO(3h-QXv2-o{JRRw9mrQ%XNuPg+?-IIQ|( z);;?-h=HHl4mjQXJ$z@>MXf3O0S>6wF}yQ&tX~y9en6-wHLk$ni6o7y;qQoRUZHe_ z;sFxm1!7X8Y1Vh6V!Y#a%oHHvzB)RtS)0!7ca&3#X;O-e(F|GtrI|kPoFXVQf5w!d zrt9EfvGFwoaZ>`Fw47>~%-P{4u@RE=(QVCWt^iB-%15hgS9?vu5LlY53vceAcoR$Q zGvcs}s%Y=mEAsBfd${58XWz6T6usEZFQ&s>JA~v=Y0WjHKSoLG1BsYXc%6vL9jlkk zQy3p9)kuf79oQvs$->wd@|sh(T>o3o$bR{$(ThHei%&t9sEb%(cJ<8{f=_lLW@saO z^=^(6qW}^h0q%iaXC)2Z>&|Vec*nSjvOgA#d9K5>M6fbxSo*Ikdn+nbj%y{>25r!Qf4y-TN<^t@J6 zOHsGXvzPtxYbTxT5dfVwy)M6#ljKu-q;&@-$Dd`7>#{rfMyJHe0_Wx`KMAndt6(^c zDuK>7&4?ch%%!Z2m^5NIez-#l767no&$xl?8J}{u+AOm%FBW`COiw^x~(pKgl^$>#%PoxbmlU4WIadzbfP|_NAgjDdE6 z#4q_TY|rX{VGpLwjCl{Z_Qeb+?ADRF!lpsNiZqLK-qa>Y&eUm&%ZfHjgLVhj2A-+i zTjnGe&9)Ah>tST9MYQD*^24T>0Gl~oQeZT2#l4%FRmRm-)5xZOtqTc`yeXM}Oc|FG z69%A3zTf|xk$v6eMk+XT*YP(wP(%k3m*gxjt@C_gDLF@#W%go>{r-1t@^+V{(S<>Fk6}Xz~h(^W}1N z&@NAm+_c0~$l8h`BBG|MT`XR5Z&NzJF_i834hAhk%dF!cD6-N=^F^0&F5C$+erC48F~DVU1z6k zd=*gfX$Gr>R=>?ByA3XWchF``J&no6+mXDzRf%8Y0KxMn(k$SRnk3u_BHgT2s|Yl z=V#eAlCDK==Wf*Yxp<%~uqAL$0FuKIyUZQ7L_qj;UwVVMFq^v{A~a~HonCLxzMsfu zXZ#$)QHa2Z`vQv0T#u_dCO&gUN6TB4C_>kP7oi48H=LaqDB%qM>f^8nfuAr z%I6GPwx75=```_&QO9*c0-#3Uw|klJLCfXU?n&EgO=d%vICpjt$$*jz_}&jLa9;UM z>1y?A>Z)Mx7{zXJ5rY2C>levR<1J^xu#Rl(K>!mQ*wvGpXfR#f5~V0voA&L)Pe6_1 z2tmA*_f@eBpN5bUDpE!pc%$@cuOMvXKH!7-VZO^kOR>q}u^kqT>#kog_jA3H+)1I! zd=@;a1y?@4VhS< zEDM|Si^T##`Dn-dCl^CN)s{muhyVO;tfbIpA||YOjT6h3D$)Q}M{m=JhD#2&stjnS zIT!$oc3qs>3!E~)_K!7FA=J?0=rv{wO-_M&BOWjtHGTB<|YAea)#}G7-d0ilBF6u#05T)#V2p4dWc<}9)t?Yi) zkt$6B@mxvwomkT{jDLVq#H3*;>Xq(d+#qwzgrU~2Y$fPN^(2zbV*6|Mod$PCMPV&T zkEyyWl|4%afAz)M8s|xeb#!-|U!a}(9klb52avQoZejk`SnMiwE@~tp@e6Wt``&T( z;8#OnTuKJ@H{DkGw@0!fBqG$^NMe3LgE-GIVO-z*q{Aoe0FxkAt5w!zl@C=ZeJIRN zc^jVzT;9aaG^9Neo2Da=)}?6d3rF~EGj*?R`^e3 zTiOR^k}}!9RNKz0JNeoNfqM;jMgis=)ULpe`Oeya*Q){MD6OHu0J(ZyO+BT8PV!)LmwOVNbyEP z`|%C-dF#AU4f}g>Y+O@T#-U@u8V6sa7Idb)Ju!l(-T?bXUp?+3)9?d@~QJA zM1gvw-Q@$wyJlK9MANc4Bo?;TI9<6gHM}wCerk&?QT+tXzcex$Go`$R+_w4`38Y&EJGa)29w>#cVH^^W*8@~Th^{Uv|21;cUTyo*?sHR(%VqBAuR(d-oXO5kfyuy z2?^?4!D1_GT?oiVE~83AH6c)<--HV(6>q<=Co`jT;kaW-Ksv7y)n^U^eSpWzDOLLo zh}ZZ_gpCLdnkjiEu?nEBg+XL$6}LO8)XLsQU9`2bct{RMcMdf1^>KRsCod-r139BK z+Eh}fCq)^Pp*WHghf&2uXVL^$Tw5!n7a77Co)M|w19O5^MLOQJD!XnDcE-O0RP4S;)k0QZnZ(CND%NxN z0hd6QuFn^zH?ADu8L}z!Hj+!c zeXYqzAr6`MJZWBD_R6Mwz9*5fk*~If0LtA(=6uG+L2Kgy?Y4p=XP2%pu!=yp^_)ai zoLLIH1MlX=)nf7bWKM9aQ9TSuKga(=Y6w{*~*mX+Cwl zPrRLyZa~Pim7LxT$;Z@^uu;K07jY%cjvbb9!UD$hA}uSIEPGUF{@}(2TWFs#v@p$z z0P{E9o0(I&zut-f*U+_UO=M@rd~sC!5F{pxt2e&8X>OS`Ha!BQFHl@f{1vIV>i@hi zQv+-;ULL}nI@d2EEBKAXo|#2qu*&pP`zM<4rh5^>gymmwFXAF70ud7q^$Cl%SH0^m zY((v9R9$_<9>T@*n#P5em3Q`MQxst3yplpl+7WLHH&g1Rov^AgwVhO4LMf8I2tE?t zn%B~pxK8OfxdBdYFnl<2#0mtO1_C+ySXGH^lBx0B&PpkOl$sjTj&!VD-S}!nAMn&S zY}}Tm$#wbXU4A6;A?-G#SodbLuelFbQXHe_$B?DV#gH931;W*vT7Oz~XVXvvl+Gwo zli%i?3Qh0282=#JN6wp$8{1+sa#vNQdaRf~1xN$MR|~FN79XnWk*S4v4Up?=BkEK?@ebvzRZ$?RRCr%yQlS-s2g-%) zmr_Of1oXS#?4*?sXnv!*dY#t#b?-Z2D>?3{_3Nn)q?xGdrZ7>#KxN!-F~#A2{*iA( z`{tyyNE>U#x1E^Xn>#}!u#;YlkWJC%qC6LMBG<}%T-|rW8C_C3rxWrTgTuBGnr1ut zsaQ>IAfmV;29slO(OCpg(OQuen$SJmjukOQ=e2*{kCDSo@ERdDrM%`&fR{DIyLQ$! z+Q{={Vszeyc#&odb|QxA*6NB33+nMjL*;AT8~b>;H;yxknLv{)KZHu|9PKFl#Cnc8 zHy}&c_Z*!7qrVHA-(U2fJEV2Rw#|d_J;zkX6Vpu5the{MlF8uc3bSl#qh^fJ2_NSd z)8_HWo0}UTOZK5(15>&QL zfJu{1_O2rN(@rX|Si`GN`2DBt4`eT|L=5beE3p0&vYsT7oqO(zW({{?^eMQ$)Q&+J zU2JVX1DV1XQ*#3@B>Jzu3zX4CZXsRWPhrrZ8yu`-bAcjtaZF!(!m>uTW|UjdRwCCpyV zl6OK7f66l3MeK7JW134dSG0sJ5@?* zfC>19_=EP2sUl}GGc4!(Ff@*MjN+X=NvX>>_Hv-ScP{fX$zVKX%1PCDrkRn-fa64J zmqH2}3lYa~G7-?FV5bxIJ-saC1P4{zbR-dzw`;D8w&)jj8lQFy%0B*%Q@s-=@yboVdV^i2Mo&neO>LFNur|`O&)?%j}JlTIN0)!vuE5}LLgbj%nDHs zsWvrK4^d>?im@I!LWxC(epGERoh~xk|9s}UF757lEwEF2fPLpYMS<9z!#UGFXLBz- z;U>|{Dip!_teS6=Tw)=tsrQYT>4_b|ZGO?)o+$s2mYLBMPK=m8!09?_2DM8$DqcYR zdqyi6ke(sCCO48^7*p+fFym~xE@T_uT4~(yr~bEc=tq@?!ChAVTa$D2ol1m|aQz9f zaQy-9o!2jEcjI$ScjH+BW*vuk43611vDMP>dbF*H~&1?fnr^ zTp+Z7{Zo`g$dK6jRk}dJO6uf0BQWNMCkDj3yofCp!|)H_tHKP-qGWRP{~~zJ0VZY% zr^RzBl)Lns^t#vCsdg82Uh)oVE)$Vwz)@C#N(B6`W=4l|V&GJyuJWD`RQXu~ zT^b=Q9lKJY@?jZDy#0V7&AgZ|H>$ehbKY?HgLpfSJUjZ_O*KgK0bipZqX;Hxs0ImE z%O}r@+mTQd#?k)Yl<)u9h;$_{VmgS|i|ef7Fc?qKxp7i{__(L~-N(7n0)lDvievd9 zjX7KZ@3q0d@Zdr0Wp04_vutGH?Kwo9)9sZ*v->%-H?{TeUKryfP4QCIs(a#{UD`(piP6rDDq?GIit>2gVqJOn{ zB>7C|xA)>ybx|1FT9Vzfbp7kxTGvy#P(0^fEd|2VAAdFXQsXfyXMXTo8BAcgCG$sZ zeTGLPGQ{U`x}k`;zd79Q*G%xF4#ZG^c07RD6`D9F{v}(|y;+RFBY5^yIAR<|$1Y~! zyJf#K$#f4b)DVko^u7b*5XH&`K49v&b~NLIsm;^>bDQ|nHa;4)0_Z3YG=eUX(wGWa zzB5ShmAN|W+nb@3*RA!a7o9(lyHL@vZVg);fc<{xFEb`U|Gfs{m2sE30T>g{kItXC zg42aPc!e`iaNbDRcg*1(x%eXanOu3?T-cIQpXJ8YQT;4f!#O<_^g zZDks7N-<3#-Xg!J99V7=yE>vFYDWq(Y?CMh047gF0qaZR*d*|4SH$9n4<$Q53As7vS=%~h{M0mbY*q;!`9YVLN4q2`0VUGPx>c6oyu@iC%n76ZSn+|@yBJK z5zW_sAPt@TN!hd;{sX^)_kXK?LI&M!JqYvib#vqYKhuw#%Gg@Fea3l6X6E?Y|1$ex zBDb>rl96ICu<$AOCUE4f;43|0M78Fl)H=;hOty=yDTy40BmBaQXZ~M#DVdW_P_4k; z@htM5XK5OICfK5!k9OFGfW+6im_F4Bcz5|-3=00Z@5E#@4OA!bB|FTlJBv*;2$>#B z;(lccPue4)8Zzg8iAPn-D_NamMN#*2T75szftYGMDGHjnJ6&|$B@lkaiu8+g|FC<` zr|zFCjfR?Y1%0l6bLXm^HQKGPSKLYLvpdD}KQuetgx6I2?=LApp|;l-FL978JaWCb zG4J=q?^;u=J}kZkuq3K@PRg^28PU!UJ1~MOgbu?;asEW%-;N!58r?(MXvR4SNTpAA*Xs2_ zoy&sYWTP2_Ayr^RWF-K=>m121X34+}519^h&jQ%SDurf3sufg;OX-Ro`K}9sj z`RQf%NH@aMTgiwvq_e4srdCs+2A=6m)3fBsKyeUM7>5cMn9zsJ5rc|sqonn(gT(20 zLtkF~`n1o?;PP=4H}3=`V1A~D7)T5`VE-%1aqyuIgChe zCDs5+xzMoCOz{f*L9qR-MJbebrq#gz=CAF^$o>HaNKXyZe3N~dNZgOVe_rz9yDJ`Y zSnK;X?c7laa`4=lEM^s2Hdx-yUJLSFIUi7X6<;KziVr~vqT}^kZu4TMZd_Ylkyw{R ze&bmK(oaDKUj&;*6hQ{G_S8Zprkw0WwKR&n`SD1~EFTQ&DtNr8CxwgR04zy0#^?-y z1P)0r+_d}gAdQD>8&uzzS&T5oqXUCJzG4uzO_Us_O8Y;Cv9-M-A6I$(NjXi}u@+EO_ zfjVQ+^#aB8Jz{nuE~C#k{H(p_qO3IYXX_QurskI|-;t*6?{w_1zhgQnIZrSa#?&C^ zf^m568~Nfn0tYVk<7u&C@Vxg48nlY}RCpzyc6{ks9&f_8%Nc4^XuQ+h7rj(2*$-i1 zZh&(zE*)h1tnwA~xe3Xs*fKRZM6>Z|{AHkm@4QW)WiQ)E{$7<%S7mr`T zPeZz+r^!0mZsTc(4ZEPi5;Qh zLHqA7k@pO2Syrf1EA(7~o-mtqKwFztE}v4(ErAl~?+=Q8pO?6!3O=I}a!Q97*?po= z0+0usyyUGl8;k zt?e_-6}4p4evx+>cbT1;g@<#DdLAsS9eH$A(!n3lPl}u?S-&O^+eI5D8>yLr9AG|f zO*=7gLL$IIYX6W^s9}Ua>%qVR965EQ0_XO&`b8f&i%O4^8wY$X=B)2xrVODXFA#~;s^2|5~ch{ zo;$GRxs7(Vnp?0?hnxLz*ZI$O(bVpv)Aqkmk=|=3VonQH40^hs(u8O$aQZZt??1js zwS;xb4ns$4;1v7Q0jbIvwUnMpWB0ikGU?<}Vz?ncnCAqr#@&qqFGk#`FW;BYobJF- z=8p+%i#g~<@Fz$y4H#Dk-Z^18*pg?jprb9+TgyZ*3taOXTy9@|pd2K%Z2uHS$!E80 zJ#9yz2&XHGId>P4aJd4=bj8=`NnR+n9<1C~xC4i|uG?l}y6l5B+x%(hOgVx$A z1X=h%{OLo?wJ#y_%#MXOe z_aa=^niVN@-0Oz!}GXFRLd*bJ|_DZSh()+?^*_KL51347UY61tRDQ!{8E?;JW`mRZ77)p zOP;5SIvrwqBd#C|&MFArSGOSyuy|&_3C}Z5m&(or3>f^2T@pH(CLo6428(4<9ScbGj{1+4qFeJ2NaD)n!s9*EOh|Eo@>r zIC+ofZLVy$WR`fskKd_qbajtXU9WN;?7Z~q*}N|P?oTV^{$U=^jq+;=urE89&omzr z(4UkfULt;j!>5J&@~qv-@Ctr2fLyzSlimlK15=Cne6hhCzGqPoq%L4Pe?D|AZtIY| z``fje80cRfHBnZvDKhK!%yD5w;JfAW+_7<2Ws_d6WT?nbPmw?9(tnV`yP ziBK}i>Qe;r0_-+h43yU3x|ncOg2A*U2A3~x4?L;QccaFni$%Z^C|M6|35>HM(< zt}E!7BFBi`iiv(2pP@`V%C@2xQkbDn34qJMoHgz><-$Ci-q!c!CcL$&*xxwTlC3J? zM`Croc09%-L2rD^PJ8A9H%`qbV5*_|r={`Yz0-}$r+edk@uH=f;bmsO)k`-%2?ay^ z-i87W-a=M8?dHAE33FL*{nhZ*exq z{n*I#m)o0H95z=f^vTQFxVC2^V{>8XsVf+)hpsf_P|p6=?RcdOT4CbGGXdHg>?2;9 z7|uC!p0}cl6NuICe@UVX>tx0i^>(~pu=h5J;frxyv#eKDYK-EYWBHf|Cu7(D4ucTq z4o@5#rBX(W7cZF^5|jY(;faW+tGC(p{FBb~nXJ+w+13*Wlk8MI$c8tW`UiKUkGT%Y ziuoe!9T1!SDR^n03H)29di}^Rq?E9TaUGZEMCzNOgD91>GQ$LZG#6@=u zwBh2&WZpAgdmxoL&~}hNhuW)~pMO|Z9zaSjxf)HJ(C2uappdaDiqqDcecE<4fswM+ zzDFV=6u;hQ!q2O{3l-z^r{Xz@945z2I^?}m$HP(iPwG|d&;<*!N03GE$@2+{bcnLZ zZ+_d0#=il`PL#BaQl`+GCGQ(H4CMso&0)=q z@52gm&f4+q2eY>clG2}mHQAU86xPr4jqn2}sYrN?&C(a#C_i2ZjkVd^jaXKzHeMEw zIxSd@0YDtkvxX1sE^(wd8qaecHWSQ=!W1Uo!R)<@T#p3F@@Q=kxWv-V!1Rp?$%B0@ z01_oP&sPhJoIw+B@`9}7TuBe12&d$D}EsKpRCq3fDOADBy*en2%sG|{J^ZA(p70x?hP z9NHIoMga}jtV(d?3Gd1k#PQS<8=bKyPl44yLw{O0G78!M(BQ=LV7z|P^mNo6^T?UF z1SCgPeEi7{JHZVGJyy8BB4MMLYtgbceYDEhK|)#91=OR||Lxt=Tr>PbTch zvir;eCo(Z2+J7%yz8(W0|Lm>$5%{JwG>YQ<*_CNgC3or2c`^2NPmIh3jlnx3=gUq*w@P za#^$^1o|ViPp`3N|6oa$n$ZTfi%|3@Rli~$Lnk{Qa5F$IR?tEGp4GmnJDAC&Ug#(Q z9TRl*Q=)(!{N&w@;ICM z+kX(3>j$yYK`g^bctfjic4sTay9hiaQvk=^GS|M|Z($XuSKmK+hAsVVyQNdlD&6k5 zmH%$r^6h@SR}`!?5n^cr9(8B?t%a)^x#Fe|?g#Agznofy z!y5ynP>U|>rfbF^Lm;640Tb)OQL$%GPXB45x+xKWL&KEOJ(FxWK>U; zJX90RhL7!|-6?MIZ*D!aMinpV4CUS2> zA%qM~G$oJg*n@S|u0iJ1M7z=-W80(@%_tA2+nVFoH^mp|MMdI}_iC&Elal{^;u6l+ zaNl_1I;BTAqTUtv+za_Dp1KQjVw zIW}XobEB?|+@7F^H2em1kS!=wm`&>cBfHVH(+eB4P7un#CMS2*lLKu}9os%K)(gR@ zIo)xy;p**Yxw*Wan5T)ABi<+mCPH3<)SJ@I=l7hslDup38THf7xesqQ>hzD!{~}!h z+fhgr7dxXkr3)mgFC*jcP3 z#rt!D+egxPxf_1z=4T@OF<|ZKh(O#w%8Z*j6-cYCf!D#xz?VzF`Z<~>m@ zc47W=$DFpsG>|`&aDB%9xNlno8*?)T{+j_iFQ24!;hhyRb;2}s zg0~pY>&;CQU;mB03=^X8_#E%`n6D%7_Ej$@s7bAmtf*00-}3h~a+(e$V!oTCCA{8h z#b<2xtmgCs=VOG;#P~6DwC_}|b^QjAhE2Hz>~6RhuAb{EGiV^JSn~^CcAwI<6`;FcAbgPi zlR(A^X*QDM8oXJRgI7c6Rw~*{Gun72r zdtY*$qx7$!J6s*D)T;P3D$sS~@YHHY1}?>$tVlSGlpu9zay>5%$G6K;{SH6w>JVpe zY#v=06-$B%Mqg=SM(z5tD9WHx@!t7H2d<^?#j)@)6Jdij_%=6tyL!5_qMHH^X&7g& z?1Rr4Xzvi$j!h1bOV)k?0#a=wrh`(-s)o4DwfP@b_R)j5COA-XN7HveZ4VKgBxEvs z<@d2VwZW(0Wl!C1yBj=iO83T)98`(L+_e?yk7~{@hE7S*#491zA!9$?ZQU6hTZKa) z!7fy`Zq|yCOOs6q1Jrx&Aa2Cb!0Us6F_|nuYg;HK6v}VFYO}Fmw-1x3T@$ypBoN;W zv5Jt?E1Z>0f!U(zQz2fqTAI&W+Oq6jZ)DA zG4`@}Z7G5L_P*#?Sa{m=kimGSJ;LK(pO+l?vG7Jl%|!MBxv&DWFx*HV@v|?t#_Z9B z{QxO7?sz};epEcyU+{{ShaYC-cm9l)Sxm)u%$I7y0B~g(L3k9}VdyHboNTa$>|msb z2^%#NQIJEuKB66!AV6E$#NoIXI$^q}7GC@`_l}v2`q_WK^M(+3pT@*56q$=^?=HB| z>>M%e+@S+V;xOD;A|PAt^#xJUiizoUP~u^QEDz&(H44YjM7TEe2s*U#m3ozBT=!2R9W;QnhsB)%J)(#*F2U*I46o}f6x)? zU&%%ge<`>4AN%f$qiAlo4+uRZMAgZDe7q(8W10RiAF3ZRj+}&%Z$GN{S_LUNt%6v* zZz1ZvMEsS*1cud~s$5+$iPgW9t)mTZsgQ?Z;%C${aAbog+CH7vy-z|hboj^mk6}w- zz)|wp17E&K#=0KMU(G=O0GvRD16ijlMs@qju>Z4V=7Fq}{S!QT@ISwl7Rx`|^6$Qx z#ViVHqcB0W{CrVqcM-|h>cX!+ECw16qRO!+NlfF1n&HG+D)~i$^uK;+&K&G~&H)=p zRee<=)^y-WWDeIz51s#-`EQTzk$tK5sPkOzOLq@u2H8rkx#nEq#ND zTyx!B54<_ktvfspH!s?(OtM(nHDMahTUjf>E_sX+!-P+I@e#jZCy{7^3ja5HCv-_KZ8_e$0pGuKKrtyUDSLyGx%trLY~F*TurC@UxvbV(PbF zvj!AAl>Zf8BZdcQ%uuvmeK&Wh{Cxj=ekY+jdfshrJuZQ)te_R#wPJz7GXY z%Dv+Z8sbOg<#riK|Mu{@>{bAYhvnIVCXd}D|65$D&Rsz%Y{5?pb>A}n$KUAq4cqeN zcqjJal|ne)gUD}5#4q)l?S}3`ctwa(j%Z}E49v&s<=v?-(;3H|XpSf@xjbz5hBTqg z@XhGRlKiNWu54EMf^vmVeey>8?Z;1$H$A<_sg|ZseawkLz!~{6IF_n9QQhs4FoTOt zVQNyAV-Sfq_(<>R&4r4!lyK69nN=C|TLDpj(M25o>n_m8+0fO!7LZ{xIkQdoNpJbC ztM-4?F%B&Mqnd)hAeL1Fhl;hNS9RHZWn!+^j|B+ZI(7G?de=>q4nGLg+>qJB(SRmpP~ z;$U8q#TSuUVW8^V>Zj9w!>if<;}?W&(nlcXu%Gg?2SK%>zgM`&D%k50p6QvDO|-iO zti_2IB&P9wJua%<*&JQB=Il;E`<69R&rl~4=lw?1{yL)hbU^6$e z`M0B6z~iD?0$Ey3O{6d=86c{7x*fML1HPPUJ!1{&btB+N?@#XuKL4!$qdVO4Rm0_L zLNxI!rlKsqILwQ`ftbx+w}my>ZDHCs>VnzSr1AU!$eUZ%2Su-81HHMV+R-65MXPr3 zIVi0@NG;mvHP_p8T?v<06+8ffvJD0HE3P$iv5Vd30WNllsx9pVY$OA)4Q1igC|Y{(aAQ(wF>*Lv+9MoY z@{ZamP+TP|yH(ICmkSv#_^VCT)i@fdXDQRZLhR}%gg)%@N}j}r92|Sk|NA*&e(cHQ z{UZ z7L2WTx!0_9j&oj(sKOi7Znm*P?e9jH$6VxHRuS*w8>43{>#p|&l5d+JKeA+>i0T#z z|9F$^9*S(T);vXVff+Um#Z0XUJP+E zb8t3B0rnE^_tW^~pu7j}^NZU0y_b}1^5t6Q&lM2lJuh8s95bjAEe;O`%p1%!ciw-K z3b|=K$QJTL^1ZEiFjm@dJBk#$$ER5iSC3Qlh^YKd6M6GLG_r#KkFK{2i>v9nbs@Mz zaA`Eb-Dx~naF^f`f_vlc4k0)McL?t85(w_@?hXwN=OWK1&wKXXfBVm>)wO0-&3Vr; zYX3nz{`9SIPO)To?SXWrIqvlFufH-A?ctC-8JEUQq7wmoBc-YuKK3$ZE zVE!5_&M`+;#D4^y?c}uXF$RxgkxjFBw9CHgg6SbO4`09%MLsxm=VEa`RB(AZ!i?|% z*-E)r;v=gOcp^q&Xk>172Fg+{gWbKs!=dkfJbbfiVTU1LQF=TQ&MNO&-5Q?rx_sAf z;LFBAs_t%25@^PWN-F`mvpL1+LK~50R1=gz zu-Zsc+RxlQys`X-Als5-Y*^7DqFJATkUQ6AronYUzYXyc=R6;sF%12bUAy%_8Ghk` zUkBOK#ut3LvzhwMR?>+TQ7H&2HTQ^=+ z{^0P@MN;$k%Z*p*PigpBd#vCu!T;iWBZFdmZ_Uo1o<-V?Fz~1Z+UQyFwi?((KtnEG zhySOz3=K|tlS2O&vc9q_cx0pc=De4BveKhX;+23s33%%pEu>c!+>qHKwydyPsEuRX zUw7m^^B5d{^DtC$bKH@4$g|5bUD<+~`#HA5ViG!Qi*q_M!DScPd3#B&U>2jPvFaVS z4LiQ03xX<|>&WQwp}Xia@pUmC%Z4Zi{Gd|Zgpp-38>izz*Ctqv!x47eDiBNg{?JVb z9rt}OE*cR|+XH_k4Z@3o-PSg3-+>bJiZ^KKbG%;a-slcI`^#Fo7b&qqi6^3y_i3sR zW)pQ2Al1@>`$4@cJ0b(k?QB$&S$TU8O+Z+-tib;<`zkV8AaR^)9DTb6Hksk4>eGuk zI(A{LE79>uRMYRWZr%X4kO1f+ z+rU32+%;_a97|KA!PY4}8NfINhE+QpSDD-;jk?nmyGR~`NgqL72anBpghL)}f)&{M z+Bxn{^4URyPRa09{w9NfNepNbh>(G&=<*^v^QRj=(Ysj9PRj^%QAmR3i-63-;wPhF zX#)Nah?O2;j&Of{FXLH$r~xd6oTq>bPCcItD7$wNIw>ga1=$LD;Sw>>x0UC5wyfh> zixu=kb#VHfyJpu`>_*ZT!n#Q?U{j(XmVObV#|6p@HxzeV|7g#gaZPEKh)rk*U)by% zTKzqu|1aXRY!BUlzv8onJB?5Y&z$!13{o8Mi<06yiBOV(r?<6e>v*C}WqLxI>qbKY#QNgxB7&vD2K z-yq^J6+T`fHPH5tiIr9ZEfr~#nehwuOQ>LYxnCN!#Z@1!+MTn&O4M$F9nEM-esyi80e7DK%a0NHBlml8vrJ zd3yG`$fhN3a(Rt_p4X>8ALV-TO<*q5B1+E;wfaMhN`?b!w~cvB2$IO$A_?E>%UyON zY^)h+B<4XB6K>AmZDlwAvBuo>w>;tnqbI|X3wz6FbV8=nIsEj7d9&!N_WxOC)D$lGqX6%N%mmfO z@g1%U;msGc4z3BJELn@lxbXxWZ-o+6ojlZ1t~S-@dJG$+X|I2>D1KWSgL?OQJLJzX z%v>AYX^%e5|3kR8FhaNCZk!$4)-%HS%qqyO3NVnw}Sxl12Dgc^vj&(UpL*ihCQ(BJu-N^i|r;I8oPL#1KVOg5mrJc z{A>^ybzd}$M!2luGB2sgj>Gs|nWpbOUXu9*>JrIcMA&<+*RZLHx-%{fl5*QE4 zN#PlB{u831nsZ}HqKd{%L|WYN5H0yfZLP|Kt|2W>u|V&K?j^6^QOG;=UIb=i+At-2 z<=-HJT8?0ukxQZsL3(`dCW=khiQ9Ttu;_{>b84dcxvQ=IK#&344Lj+r##6Uvg;U!` z+e$5i$@=T~TDsI1<(;RF)gr|#*H_;C71w!hyNuT}z5DXkHE-8;=O^dJ)$#@tE6)=r zZ5xSf+CBG79B~O)(@aruSaCILVj2?rOdTxT1U&In96~tpI6bG?HT7H1OUQ1_2bZs3 zzn$o*YiU3n%g0NX_{1e82QDJ*UMPDQ0BQw;7AW^UG-PN|b2S`j!WR}N)8YtOPfa3C zacsUvKx={JN^mqX{^rre5or?(W`RHtKCI{koI%%O%IbyIj@EmNfik4|f??Y64hZ$D zo#&f1=U;K1mqqVaw=m+4y=9{TtYvsQ{&$!C_+PwjwFQYwu3Pt(3+~sM7VumAd*LlU z>J)Bh%gdy1o4htHsjr=50;ZPeG{GS1AJ#c_UIFVuE}w}Ub}=cjhjBdH zjbc9l-I+)iEnL93g9%E;X_R3a-@e^?PF-ge<04^$&V{G#DR}1R3wYy7|0`yHd}NJ$ zC2qHsXWWi^DTsd+>k6VV`HS%`CZbZ|gk^89R>uOq%N12F%orWT8n=T*Znu=OTwU13 zgz#^hCst)Q+QJSr354g$DTbRPm99KAXQCMQNc2pI?00$~qfVbu%h6iCqdq-AALO^; z7yiM$Abbtx(3J{r3XUpS_3;#ALK;`|GiqYJIELUAj^OhJ)lE!^*kf&O zwJT;NT22?m-^+Mjrz+_4OzINv^mBY{68F`hZzRs3qw z@DzK;qL8!WwA1&j6Niq3&lb18%ElBeliyW;c<3x>i1IF{E*X`s_ccBnc>?5$Y4h*O zWQ~dcVA_!}dxC%$C@h+WDX39{Tw%mHorJ&b4t`^atmxKU%O7nUqw#H;B9CqYB8eqb zE%pjP9pNQ=@5m5C*?mBy_UNrOgyZoUXvLEpLnv4=2n^@1UL3~>i4Nyyb8ltqE|LY& zetetZt#_HdBn@1#!P0EE<#a&91q|*!vN8q3=>Uba110O%_aExnpx)tM0rn26Vm~Hc zs~leB!e~@(Jd&`IqCl1i$7%(aonEs zMA*!Vzk2jKws;L?fJRx}fHxZCswE*6Wy{XUsgcQ&;a_YK07|qvN`&q!X66jidkpYU#_+O1h+w1$g%GU&i`&Hpm0rOV}gO5?5$LmFd zd-Wa3e8m@;&a1DY*bOm$W5J5j;&PuQ=I9)KFE@_ToN*^uk5<57SuO(Jd+73iw&b}e zz)T-maE-%Bip=+zQ{Qi0D(Kk}-(DeVF%N)UG!_SRnfdT~Evq4Ch zmjZBrAprusU?lY0W}(O4M0n{Bv(g?PiCdk@Y20R|ZhS`2~2cjHA$|0OxSte($PEI&}?*_VKaph&9tT7L~?7{i5gXeBug!gu_u? zPs@c7(GR>QPMV#;PQH5KoXoLufXF^8L=|}`pyC=UVn1ok@BCNb7Kw@3&Hg@d$*_Ee zpXe9cpZsW|IrRwhZE}xFoDg>%Va{&Ho#cqEBeyxcK2-I{*Ewa*_A!Z>v_6WN7?@r` zU~k15_m$=AgjGq4CrAMy8@K7Cuv2mnR07X?KdGUCsBG^3J1Hb2OdGMEl(?tIPV?h8 zjU9nPu>@;H1kp?>J>j=LT zBcsh0>epp8app3u3H}B#YqcSMI0KXS6m)dGU@wcvN4V`Dy&AYtnN6yB$+R*!fGF23 zCo+6%KjL_4=!|iBlelEqp5*FiMO?L+0CGeo=(BrsJ4(Pdr9EM#Ly9w;0^Z7w^>0Who zHbT;drTQ}D`+b^Y4o!|p`wsOC-qS7H-s@YDhHe_ zTx--7oRg%icU4w`y0VJ&N4Y8BIXu8d>L0N`Wo0NK6OUo&{WmPP?b}8Upg`Z+ZWwefBk;A?L9y$NbV?4Ml$viS zV;LWk>whwvtK--&l}t19>M*0zOcU6?uC8<=q!TP0QV(CmHtF|E_rV&Y8RfiW>LC*rDL#XIX@bjhr!|>daXK zPFQnR_x8iKR*Hn#z3Fv0j@eRVlrz1yK7#&8^gI5`W{efA9F=s-U$(y}z+D+p*M63N zzVEr+Z`OYDhTIX4jWo0{BL*nFA0`)rplxGhz!I;nH61aN5@!lyWTJc{sQA*!<)RnS zKZYyZ6GB1RYn=b-G&p0v~Ju4TN0&JmNloE_vbS8-iEKFcg&{avHR)Y@z5=Z7bn zvyL`lNziA@BHhF3)Xz1+x`)=C24wtw!HRr+rG&HyRmW~Wg+fM4ucGb?lFfLK1R2#3 zW`y9i5?F;E9^O7H-plfMayjzXG6l-Jyu4xTA|cPh*xh*UlrY^Qw5@Wz)jJ&$(+XNf*IY{wm!R)|_a&&Xg%*kY*)VJ@=PIC-1xWiE_}MC9+!4^}?R_ypwiFkOI-4PEua ztED;m_`JzJOemb10QB^{_q7a;oJUGli{FR7J(hW&rg`>WTkVZ)1PmS{lL3baaWm9^ z4ie&CV;C+bombu2ClQ~r`W&BORHz5T5)xRZHSZ)TJ}+Ip^!r7?8AweWIJl`NGWumt zO(y0==D*XDgG&fuU?PkKiS(n0!lAvRSK)*eIF!@J>Tl_{FAJ`T-Id+k>NjYc`9}X( zm~-MmV{z|Lp898#o+|CSh5bf}dShpiHh{h^<78{VFtm=yCl}QRCziZC0)Ve(rdlbAFBh6X-wPX<)hNI zzPk6j5cElk@(jlUMKj9Zc#Z|N5FhUoOnjkTOnsJvgiT2AocPOtCOB+0qsZahHZy-_ z%`RXQr;Spo(JHx&RzGeB+ zG0x>Rg2LOq!e3)hl0uic zR*KJ)?%84GeT&I6>TcT#hZsMP#NPxA~={S8y7b5ftUsd*SLd(fjq8mvG%&C{^T$0ZKrX zaq9Rv1*8n(-(&$wK!5>=wv`?e@hZ2sAkggU8Fe3BUv9rU&}c)T#cN2n#pC8(Oa8eH z=rG&j#%?=#!Y=er&UNT$-nA5C&NcjaP9(fSo-k_9(nLG%YH{g_;@L-z;9BI6uZ9YN zoF^X>#<+zO+!{VwM03Tu+Wx6-%{$blK@1?TL;wGcLLXFoeoNB>925AEJN~()>ilbq zNI2y2XNR#<=^UiDMLY;~nyp^z4J=@9HF6HLDlS}BS6gQC5dQB0!-`_QThayb zf?KcuB{e$;3Oo4M^FF0d?BxcYYCAM^VyilXhF;qU}bUb*uc`bo{p>PW<2^S4@50ut#cw zw^%s(OfZxA#FbwUXb993*ig`K-ZB_mlSqzk5A`X#gLrllmz*Ey99EZH(@vXVntI&j z%H1EA)a>6T9O4BbRQr2G{(H>QAh*e!LaC}L*h=HcR(wdsdO0JzE}JDC#CG8m(6@`R z#c;tGXxHZmbe+&`@mNqh^6mw-c<;h%yN?JAqmsy^*02wQI%6z7oRKukvtRUz8$54( z{w3#w1-VT^i_z1MROCgR&8rl8Dz;cpfPk(OUO>BxcP;i0?_0c{>A|B_1vh1z_fx?p z8WXsI=h-O30~31VkZ3&NTcPp{_E`GRXvB~&3C=l%(58$6Ga!sM(%k!hIj};5ye4y& z>(!Lk66rl$isZf+v>4w|f=8=NK`%p|2UEmz6LulYMe9+z5}l;iDetF4hNhSloY8 zhIK!|0>3UHOjeh`=Q?8v?k|2iOzzd3IG19{VUT3WJ{m9Py0(lT>XCb_86Y87#W4C>ngpn z<5G7hX7+nbR#pNRAG18UucS|paK#tlhdVm?92r$zm}bj$WTQhdl%2cEUl%O#^rM5Y z*EDZ2s%M2E;yWoQH`9*G4Ju9&h1s!RxZI7q-Q(P-Z=|U9f!umyvIW>-=n-d{2y5t& zkjcuY@oWS1_D~7wWd@r|?R*Qs;jhYss zslV}%k}C#rQoI%-5TxCitv%0P@=S8v8fkV^iSN&Zrn&b^T22dxnjK~s zGm982Ng6{fLP}x}lnfbYslG=)jo)7imfAM6Im(m7RpD@5o0X#9Ix&9BRy8!hmKvRU zOnCb0+1*h)nffdw;-RUSinEv%#NZ8NPu!NO8ZEY1sg2~%-0LXSp}AIykq&hoO9`guEj5<53)qWLHk0I$ZEj>KIvRrv>K0;}-xx<_dw*fjt!9gW-M)(H< zUK_G)S0TDW$64+_Mi^lcK_8r2h0yqCxgz)By%A<7_nkDDi}sG_E!`lAtRz`=C7!gt zm1waJnP&bHkP6S6@i-@Wue0?eXRDISJ8A5!r&ij+j$NnY9f?lTI1}b012^ue65Eln9SpR$TH-{U*#62I#u9s0wpiwJb6`6jIb{!^zmp+0s#u`3fk@}%aJ$)^1+|8#VOk#2DXIr3SO3k?q zy?|5!9I$c8M^T=5rK}KmRo}kZAN~9bw>{wTNcUl-bM$BquaBQg-s_A^jO~_bOajcw z!>M$7^)c>xGko$F@Lql}w*Rh^lk57M{Q??`breZpvf|mcjaL@(Y{-GaGKhf zY{9K~Xx5Z3-~P%S4RD6eQY6-DL3Y!%cYjhMPjkW!VZ103{!jLL(yF+taBH*>P@-;c zR`HM@*Y}nsTK@_b;kKqyWaE$YmR$UNKsw5dqHK|~v&B)-W7orpRf^sW+D5l2WPqx`rjSK=eL zvEfe2-=Ku`>gMbm!($ax8IH>Aou8Qr) z!pAHA(n20qc_dd*-x-$GY(bUEA3uB%N-@4qs{`902 z+vXYon7tX5?qFFHu9)xDJlVt*x{GA+24YKRU}bp)xFT*2w4rArE&Mp?9L|CCRK7Z7 zdsPKo{;M?S4ZAKKc08; z23FnCfxmygUI7N`>PkqscoEGmS9&~GeK^izBlFH7-bWeK-C>y!m6r;`ae7AtlzBA+{ zKa*w3!qJ5v&u7m4@0YR;l-9X0NlQo629DR_D+t(PnF+lyGM3GN5QiNB@bvfP!?Rnv z$>rA0JXe>je4?+${YUu1`BrxN3a>&IxEVa=+!^bh>=~Y`_QN-XI1%Vt5z`%HpFMvY zZ4wBPhvk+2oVe&QEwP;9C5;Uk=)61Y@4np6M8c_=Whi#M`QD``r+y+o7!$G`^1w6j zMX)+k0wxSbscj;ApgAEm7pB5rC#IY_=^g#b-qBIlZOMr?cedm5>%f^-Q>?9SDRmTc z6M8h?mUZacIUJD*4lo7YmnB});&25v_L>J8$vF}y8K

ib-VITBq#0_~Icy<&-Pk z6+z8r=3xh1HauLZvo$Gx_{00-1RWxQl966_hd;phTIsiJ=O68GgJ>$e@Mk;3=!S<> zpvwheu-$5Tk-jMjE^74Lz730eCESQ+mN5me!rveBiG&CPkR8Hfu>Ejc`Mu%b`?t=% zx4f~0V=G=!1{WZ=1&kZg#3U^(T*2|8RW&VkxMwyq8xIQZuui(h@DUT=a5P49kQpKK zQjpWXhI>>F4OMW)jLn9z3UKS1U0XYsNgsBg;w3?3g?my*z}4~hGu!a=&1%6l#dR+- zh5{=Myact(@~k-+S?OAAIlc0F9qV{Ak4GloQ&*C3a0+M&lMPFk9w@B^?=M=pHBZFT zgy*}xYZbQq@wPsE% zt5$l8SK6*hRknA=-;q5>5Y2G>={T1LmcB5%Ik4z)-`Tblzp8=tSkxaAZdEsnLkf?b zOFubP>c`#v5Yw#Gp|KB)yfnL26x6pzU!iBSMM5Kqy{@Lm^TO?d*Cc+P!)@oQMoy3( zlVeM4q62P_ST~t) zmaR7iIi-3zf=$)~1wF`m$q|>79Ow*Ws77@T*ctS4;s7@8TDDC{okjq&&khU76=>Mr z1>TR1;fMstAeV{4tuJDM%XyIg324s;sAU3r{ckkH*MdfY)oV!&5od0JrwM0g%JoLK<cU zjC+c#rQSTRD=A(5YyWn3@}zR)K8ziAh2(0p4t*gm?f_0yXKU5XjRso5~e0u#9{2x z;E!SVk~(pa)?MgphL1Hey6-*9sVb;=w$t-2Pd0S4;5w8!$I4b$;hbz(MS^4U5SSYQ zug+G|WM;K_EK&y!$3JKSKS^Uxb}F{SG84KX=m|c%Bvyk}3O#vBPn`$stE9bukKnj=DNow!3<5*nhW-JS-yNmUfh?>dr1eu=J2-7fLAg)2}-|jShyu;OlL( z#c5@k>L~ZX(>dM=%4(Ovk|7uWU)?=_vdmx@G7FqR&Vo>Ojin+1?x{~C~ z(9Vr!795=b|W|dmo6>Mc)#+Z-B)L>yr6HHnp^wIG z%#8!M=#;6PD3gVb<({$N-D3j&(jn%@U%!T-3%~3e)C*5S z2f$GO*h!@Jz{p>Z*7}SerK_;pC@eywu1mqDHuqleW=QqsqBnK|MX{o&{=Pgrna3^< z=1VTj(StfqW#I_?y6AjtCTSS@YKyYoID4u63PyhWS2fz96awr5y=2z1VsFxk=<4G# z1Yh+b-*S6Xf2qd~;dWW|D@cN-2S65^5!G>YQsXxk)_ZJ^MQ6gSG`g=?5KX?BMRz z<$12)8wl1Rv&l4w2?~0w}TZME_=QO@cmEi*EtyZXpvot?( zouu^-r-7s8BFewL{5ojn6>>NJF1o++#ZAsv(CwM!d0G8;Dz0D<9O?Eql0k8Wg*wVm z$%Iaq52#sPuv!+;<+4b7d{o8u50Yowv9ztb?S{Dow~Tu`Z|<1^6MLXm;6qEwIqQO< zBWIoBL#YN7_booa<%tMw=~L9XWKn4HX>aqR!zqbNK)D}F@QM$AlsCS#QS)a@U%iYY zPU5_J>%;&n6F@0UA&zGh3#H?+o?Z=|@&PwD(-DFzeNuA0M!BI5DB)oZG5bMAQilx}0za{a#1} zz4(2pdqh;0?7#QFC3Ytb^@yr8w>3W9OaL1I3hQ+`3L>SL@0QkXZnWpcBfUOZ1ibh=Ny;>YKN>>$c+6uP(FAp3umif zYCWukyX*s(FSx;L4{CAJ8nOPIBGTcmi;@oHJ@N9A&+|+6>Bh%Qr2gjrc0Xd!9BhUa zK}N$v1^F`s|l=nvr2?8o}hS6e)_YHwsi_%{vu1o&7s@}XUV^u1O#%U z4RlaQS=S*48nO#m*IQ}go{cNcX;#tel8!Z&Vi)PH*tm6Ig*iStp2Z96T3{lCz~%%J zV;!TiLYE8b=ACtOF}5r+7+gHY)IoEh?28M;DG5__+%>~(7OZrZAJ3_5+ib~Tum8<0 z>m@>421z&7l{U&v(Q~ffY%&qRc5y!1u~u~VlNuE$&aH7cimk$y@&9#R$w?lZd|h1= z1k~tVI{`&N2f|Uz2mHazBrV^4gkAWY+fC8RJ$w+DAhky;Wo~2@A6i@?*P!$5%88*x ztApX{$OFyZ;V2lSXr^y|r--1|qP1i; z&OBx)&{|r0a5Im9<}0W~Jj2776I|_P?-^J|gN%rbJoD9CXk{!LKCLvpB7s7`%LegY zsvy{ElN4tSgMPVj{i1f6zVvUVLzIHQaY140bm7cQ;`+-cZ?xy=J@5Ez;bOM@b^}*G z+&m5dYRRqc6!YPd-(w7jNZe;#_)xz^6}7k!+9Vz4gf-?g|zO9#)AOWIkl- zU1#8XmG~G7`YwvoAY_O}UC&kAShyq{|HI5`4E{2+qo}5-MW4=xo@Fm^tKopxtiz|w z{Q?ELFQ5%RqN`n4Qt_&iTRXugA&pTHKEKrnub$ojb@zd%o_v3ol$_B12dp>~KZ$TK zctW=4t>2<6{OAKEV052#(mgU5X~%a~y3Yrs=Dsy!Hhxp>H3eU0aZtAz8|OX`&Tm#~ zJ3H5DWd5vg6p+=c+z9Sl#%)kcTWI>bf6n0n>RbuiME)3|3FX3U>}wJS;rv>Ih9>+( zoK(2`QCq!pw9S zvQ=Y)eHUDnop)Zma}q(ioviejn%%z^H#dwc4=0Hbz0t*MNgHW{xf0*|b|2afjz}y)mTPQp|KX_B4y)@DY`5i1K&W5E zKOpw9-9iSF(Ajdk4c?y#N`nN39#vKc$M)m6smp~ezyH@_v9aKbO?S`cah*PP~i8%z%}OViW35L-TRyB|6W@)0sr~wxNq49 z3;6MeFl-J;n-chZ9m~|6BN&0c>6j`wyePXFyPY)APj#Lf`S#@vR^*R_u;em=3mmHjc?%_FI{U8G#0&sAxfK(6o!t~oue0lZmJ3QPE;S%1iFyR z%-US(jyx1_V@3Tbm5h-ps~M{=l6=!1%?#j-ezAFe4?g|Q2YRV;2fc)S1g&lGfhM~w zZbC&HcQh*xB-KrQBlOs7YvVQOuAAltNLuR)npyvOf8gh*bh$JLCCK)_v0zTed=}y{ z@AdaEA*#ckj`+i22iMx=7rC1BeDrW=*6Sn8Q+0wH^n?SU_c9=knI z4+w(Rp5123e=#ciDLV1c(yO*2m^~9(GU-$yY`W>EBtM~tH!KyCC)bITKq?%#pp7o*wfo;RSradir^85=j_mDN zNN{C!KN8W*Nb^6=rhkVK^a4w%v zUv9M94;6GdA@IH)qs*=p-!C8-KD+t$Hk9;4h>cET4j^G)b$p#%Frtp5_ChP`!AI3dEmtT#K+M4}T2 zL03cP_Qp|3J>0Lgd%D{qoCGGr1R)?|K6LKgYVxAWv09+d|L>DwyX8ai0h|P+{3i~_R_0aePlB$jEQiJ|F1>%O zf}v}0)K_`w9e)v|bpU11?Al2eS>CXM;*X=(rCEls8ngs&U#A_d!V~RMoyH_046@uk zu!kiW49it~*J`YEe$WhmTCi$`qFshoH$C*?&20g^W#VeP@%q|1(L%nSZxfBsvE!t} zko9pA&(uKmKH2$MV6196z*bZBw0%Ske5!d_jxvlr$dgj1uUc!3C5*l6ICHZ~SL&;A zTZwvZC2zd6@et8ke7K+~%6p{m94pZ0P&HmF-RgUn(TL0;?(;^ff)d4bGYtNN@Q~Zm zzs{HYHj&%hG^5$I5h2mEo$tweDL|$b#bcU_Gx?(bK|Rz>=Z)+31nTiLct7#OiyUlk z0rBzU&eknIlVysq0GycE8So11Axj>7$* zOr;vCD{rFrX=(k}YUtw*l8R+eQ@q4zId7Q_uy6Ji7c#QQYApl-5Z5t_)%a|y&gg1N zamntf?hc7s>v91EKSe(Y7s>U&PLxlc%`#>vHY+wr-TAK9X%L$i#X+8|17ehJ6QtuH z(slFq)0rhC!U3g4ib($fX37)Cb?ZzQ&D3Zb4*S^fpp@>_P#I4i8sVIe&ol+Ezm@v# zNtb52FrZ)_eBN{MCUPmY!W-Z9zyx>;ne94SR#fDMv>|X`NT;`iUfnNU5F``hY0aFs zNWGHq&G+rUEMhb&ZLh6*t>hmyq*HG8V`=Uu6WL{PUN(24>|E|Gr3ILkrwYdt>3hU% z!($b0tbje7eVEj5j);)Tat#P0DZ8XV#l9{ugKYPQG>ijk;~nvq^S{1|`lY408CVOL zttix&o#(8W@dvtsS2#AC`xCBJ4smh=@sKw%pzPq?cty0JE*!h;Q3S(3h$F~RmW+EI zmp2~t;~V5lk$ETR`$FU-kSmd%gaF~^)8CR3I36 z0*y`xzRluNJ*J

MPrns$$V((5*l_Uh-CTp0_Ll%gp@s<+Jch7GGa&&+F#zuf^U0 z_&{T)knH-a)W` zQGzB8gD-@Ocox~%v0nj~gV$`S`etp{v}h;_G?mM5Ip?evgn6ayZW#X-XE6U5Ij(z7?zc@6 zpGl?Y8!n|5t#Hq$(GAzEGhK%*ZA<`LIY%-Z^{3(9V|y~%q}y@9QF^=?E}YM*aZv>C>Be`&Z12rx9v;_*URn^& zQ0OajAU)oT@^-Zmn$9C=KQ%0Hp@_m)Vq%-^DF8~+b8C&10%K@7rFBY3n~T}swtgCS z{&?G{Y-Cj+;D26{NkiFaK|VP0+~wUoZu$Bs*v;EW_{q5D{>5)Ok}kSJz| zhc8$+jEt7&q}w=S{ozsQY~3M?Spw8`iz&4Q*2g5KA4Em*rRm4!JbMl3NB0!|{MN+x zEmzF*3gjmORrMp7RKUl_W+bF1UHGPghZ7yY^)h`kkDrVSoVHHvvRU3;xqF8MIY9v=2wc};Sz zN=P^oO3f6|fzX`aoK6=|$MOxl~2+#0Lqu1{{P9PIRcZ(M~-Is*nj zf90;Tx-}st*5>nrfGSaaSrS5Gz-%$+*>W#@_=_HgD^PPLF)!3UN4^}&Lw6(?*&>9q z%h{gmlb03VpFOAV)b`aQK2@oM0y#YaM!}L))7|^~n6RP`IZAR6GPBRQ?VtAZEQjT- zK^mxMV$rRxd}u=0b)M#ASkyqQSyeluWc50h2h41KNprJ5#}ldj_|yae&z%9wSI-Es zGk4Q@XtI6V9$DP1T$zYPT9e&Wwg=gpWgk}>%BZ8a*&ccIJ@2wS*VUG?(FQ2}OFT8nf26Pw*8 zoHKSG?W(&#r1?hVV)Dn@?#L&Mf82qJzu=&%ie@Qfm1SYY> zIqK)=VZc$YJ9?SM@aKsmQosAa#S*jLVU-4u=(J_7#peehRU+LIo;^3Oq_t3Z_;haO zjo=IiGI_Q4e>wjIP5r|_5s%! zNk8aj&B25F;(O^-K%XOt*BdKhY$&dI2by|K;?Mn?%Djx0xZ2k700P#;PY}fZ_&3mE z_6AzSN=!R#Pc6q@G4XGO!f0I9?tYs%JkBEA4f}00&|?ZK+4AZQ;N2lW!D4z<)!p+? z7d`_UI+ZJs&yvYJ0>+8}=w$b8!fSN*TrOuDo0xAGp#8WLQayftziqQE7hgeoA4_ra zCr>y9Ve9=8v_Pjj3lnhTi&in)5%A{t`(N&Yuxh~mq-2pFj=niTHK>awz1ya?BnL8Q z>1E)&Q0Q{}>mJEy(DBo@%z2X9!+A<0hIE)T$na0ke15>QE}SB z2|QjZ7P0QwjgZ_yH%E9T@0f`n@)+4nBnOqR>F=L=axfob($adIl&VwX6QMK%BUn(Q z4Nmx-GKLr8sx^m)w*H`Egg^7O)G+O(P7V1yKy#g~V!ucRcW>8RReU;`3TZlW=k=n8 zQeOzHRK^vUftAd);C!c0_K$|DN}h-eO%)SXl(!5==XH?q$HA|ji*1&D?7<6sPcQdA ze8pB9*3E`VOPVGdYjkS1UOR$db1M)p0qGDK%vI+p_d*%u#=Q6aWs^`j+D!ya&)@k> zcQG579~i0!lZHJd-RHeYbkb~0I>~a}egLT~9#K1&RY0`$C$(np1j3^gJ}ei}GoE%s zd0lDg`pCnOtv3Z`R9cA`7m=BcYl4)zg30ch#wI(lV4h_=%3(F;Bmb&2G|Yb!n)Y zS4AS!G?G_NQ<(O@cJtHz>722&uV3dY^gvsENOx{s7vV_Q)Ir!%3RyxK$-h_HJ$WKg zQ|^tr1K=3BH+8b?`2$J$Yxc-bBCorQ*lpnYgS9#RaM5qme@~OQRrPq;r?B40B46(< z5(lR72v63Te{2=5HnP>Wc;*JG6gq%*MQTWf5}8{PwCn4TVn z)9X^_A9vU^iSn^3h77&?2abprPK-#Q%HA)KLUko_Ly_H2kWCP07I@qNx;fVBSsjIF zcVCERb{9^}kbCcbUCV|yMl;BJou3ErUvtfR`3&{3Dfsu}09a2Dh__BE&9E506w1*o18EK+e?p6T{dDpOxp8Xd-UF-)@MM@9CNd^jKSa0} za@v#qVS{#7Y1Ql5h8bi_20t!qs$HyW%$~8wEu}QW$zclJ|_DTV??I zS5j2@0oXvWZkE8FOyCDCd!-Bmrmtxi7fcZ@6}Pal9_BUS3^sB~N$#eoiOiVTRk&Uc zoad@N5V7xP(Pn)F>Bh&;|Dr20W@|#4k?2tFXk>sAx)d~8@c4h2CR9Md81Z#?ZiDq;xcYzK(Rq*q7vw{*(`Bp4jP@U zGz;YH{P-yA784qbf?qS?M}bFR3Ed4{rfo>pGu6ugTA=pO{hIHnde599@b#q1@DWFS zGWW;suKSfq#0`N8ZIn@ycZ-umbU^lfy*Q|fMyXE|-nwOz2MuZ6>?#;#V+>$zfAO%` zwh%Ckc9a`VY6sg$FK2BU+CN`%Q)|`$*A^7Zj(XWyhE+xU>1`K#%1HpPn|?O_#Q5Ks zW5Ki{!m!tdY9NnTjJB5#pr(5xq~CyQRchx|+LZ#k0$+9~|9WR3?7dX=!K*^i3dVcu z_a+Vj;uz{i&p=jI}5*cckI8N5Ec#ZsTYkwn!o8)~0WVfTv7ojuyGH&;ge$AEFye6+4% zcY(Iw3!ycU4@>)aLCKE3VU_YCLd+!+awW_PuTx(U={LSZ?b=2|;rYYHh z7TecM7SP?>f9Q(j-hjXm*DMAk{J89T$1F`n{qXWPUm>Os8X(KMsn;mRJ1@9kkPl&; zVc}Suc^Y@BWXds`*$m;IUO+!G8)4QEQAyx124dlp%CWg!SX?-?;b9BiB0Z$@JBEO- z*9gF$1BiG!=@NqL)8a>0ekm}9uVSb|ET%IS+K({IyU=6|ka@)OoowE9c1k~|>E+GO zXTwEe$K_6YS99Ay912vprtz@3DpV4s6{)+S9FLN8XIS+xEfX*@jEJZ27!$j&CFl%K zzwYKJk+X3WyD`m)WaiGFmjAwaCWaam;NzbHK;jWl|Fibqz}r-J@_j%TT_ztM zJyOu|9y+q^RDiA~e0x0L*|L4JJVgSrJTOmkw4KpvZv|@@Ua=0 zPdZB5S7X~uoyi-+|F}LkIiSmy;Jc3sI=?LzbzaBCybG*(4*v&>V2FjC_8FFN+GOzu zOG=#b$vE79(nm6qbbL}y4N^^mPL`#+kDw;i95tGe>3IFP zU&{V?Up17ZW@8Q(De=&X$a=XT)U8Y>( ztcp-_4pCfglf@vS9U~^9k*|sIR4);4vqDD|#q+!HExMPWAgSF>95_Cw3?Q3%UzIti z8h4umgrV%YB^>n=_HV&rjJGswX0NWn#uTGRE8;*Bg5*TF%QlC0@}S*j;-yDCJzCNcKD^5SG zk9Y{a#h^mdAb)HTCiJc5Tj>u=#S4ndgNcd}~Auv*|-BZ!5>^smk%!U1( z>X#2B0WHOOU6TwDG18EmEQ?V0JV>2#wi&*8&`sCn|B>=v91!39ck-C3w+>hG!rYw! zt?*%ogOO+d#RL&=hBd4&(sNk0xUt@s{}&_J)%l>dtwkq1 ze*!O)VPJ^w>?iJ_hGXd(h7xe*$J@95^T;&l{#9=sAcq(BTY0XKuEhtekE{+>Z~~AQ z-|}h%NI>J$bfqzFsWxIJBC|TeZFl*2p8V-y;jLy99`nG_+0!p{f`5-54f-3wVtW2t z0-*blf>M|!W5O#_(zcx3&MJB>Y3%shl2EQ zI9DJ04uJhv$F1II`dhcdg=WFp|LC}Ndc#bK#*n}nX#VfDe3o)m-v&}YV4XuC)S!F4 z4{(D26Y#)ddL9x`t0TeQX>~3yj9aM9-m^&7p-0-@^zIM z<}zV9chwrvbZkl$zc{Q6o@O%+hRp8MHvELHXH*VM$F5lA?aW3MJ-c2dRd zkUh==t_t1tIq5vcVJM!Oc&XJn{I;Hw%iTF-CtdZ983xykP2lEjS$S>7f1!#O(V#w0 zk84Z0cWNU`En?kr%^-AlHXgRkm&y30sy)=aq&RbDTRBA~g6c_q?yG_i{ONY-7A$jlFQRss zV(B(9J)r3UUvobn3#uZo)zL{7(Twv_1UzmGEVk!b?;h;9v6JOJd(eu1M15bpBIKHy zR2+=CR^hY5qfnQXh*Vg;A7+YWMRYKq*e$uJ5&CDyrI?&#+}wrt6Z?xl5wQm8%fnB=g|y)jPvwqsgbf#4nS z$!aQ3Kd<5Qv33by^j~2}ubUq7zq*im{r}X3q~F(VW3w1+7b}%oay@`?3xrZxEXZmIe`U z0q9r=IzUpZOvY%xEib93=PuUG=furdE1_pw*^y(rrRfEd%Ut@45-^tf3igTzc-FnY zaZa?QQH#77mJ0S(9}Ypw$(2f!X;sc6KvKY#I;RLbnHvJ#u0H``#MAaowVb?Z2XjB? z`#u_d%2ljbT03=7Q@sNb2;W=WPrbPD@Q}=)4;-p*rmj*0+mC)VqE=aS(Xv?>fqC)8W|!$@8~zYnr+S zySM*nK$L_d{Q=dgXS?`mp=YL6CK)s9@98#S1lb=P50WFO-xGn%HU^i z=Xz$Zz(is`swA;17^7&(OiBrl|Lq^&-Y5Ve#HVVH9k^(TTu*vGRDSkELf%=Y-hA`(YTctS z&Gkp(u8QE!{Vff3pi%&4mecw?RHo>I>o^&Bz)SBet%tes?~+0H?YLtJqScC($*I_XCm|+}fo@PX4pJ zleuj~al7|@?NgwtyxXpch6n+S!ibHA@##0n?IxCJQo8K14jtixO~S7uS}p^fgSM}ikc=pkf0d5>Pi!My{l8}$tv2b; z{$?A*{|mOU{0@NNjiC1oOXwRCjFE<0#KbEPdBY-s%@FN(=PiwTgN=bi=mLNmDnh|y z^(j*{6ek$Q{6wdsJ8$J3>d6lO+cEb2JET>%WyF!)VC)7YAJ_ zY@;Jc4s++c^o`{Kp*Tf0Me0XKxK2{A=17o`eYk`+wC#M4y!ybS#HMI-t`Ci>n{nH| zBKf{Q5p>yp7%-)?Vt++u13eYcK2qRQk06ttO`@vG`w`VKS- zTWsn^Q+EDn%k3|>OjwhOijb#XIRdq-eoIe2@q=qJ*H2|kCrUJRjt;oO;TL7?xt>!4 zsY8dDhZu31W~c=V)S;3u2BXmGfF&A1)`LF3pupDIY>DUa_RmxV0hpiw#sy~v{re}6 zHJ#rQZe9&Vy>$;8l9>FGJiYaubS{wG`OuCW%8);$_&_h?Ku41gGa@=?^s|}=XH#*N zu5znY``hkYn!%S8B^Xz1o8>|2C`cZBTJAn>vR@I|^yb&gP0?HN>&*&}AK|E*IqPg- zMuyfKAHianSRQ|n#E3VSsNj;B^`Uc)?0OwOB@iXS=dRE<}GSgZl_Vi zMPh+X_~iKBkALw$q$n{rE;GI&p;9yBnV%I|Wl-IT-Ag>cUt(28Gn=q3^~rT!pRGyJ zF{RNEng`$pQNI7@i(MidR zv9s~8g#wcl{Rj5c+tyEud1r9XlMitu*sm>YHjjftT`Van7jIlk!UpdeSk+`HDN^#Vkvj2*yW(2eMP!~4 z8+aFNAa=I$#bS8UwVLJbEV|SGi(BXTyoCMGr|Xb-+kjNR`ts%a?$8D0Qy&@!xsc*T z0~{&U)@;jlSu)e8Ee&9Jd#L#ay@6iEHzB>#e%U4Bbb-??+zszKKPQA?>xK8BKnO9hSy%(`j(Ck}Esk?k z^b#-tenW1WCB}Q!%cd^&$G5^{Db;KJH7$dPhDHmNZytI&C`?bzjM4yfjoYyY;(;QZ~pEZSSQ+gzcQiStKNYw5z z+!afeUZTVM^ivYTX!;t{!>owDShP>Jh!+_!s<;aG|Fsn_J!a3C7a&@MXY6 zowNKE1<{L0tsjj_0ie?C;Pt~??6Fi zte-G^=pG&K#>Ia5%ctr}H(45tcdp*QHh{Yn7Pq+{;g1T&zXROjmRjzEO1yf*UGaOG z-UT|E)Ay`M5`n(HT4DX@3k>Qh3{`a7n>z`W=2YE4|y}d8h1&jn0Rk zqY+QRFEz@%y3lTManV6?Gck$z`K$qh{%YFpFLYFN(1!&X_qK{UGC!uXG8cew!;7N1 zD9k}==2mDIUcH`^QlX*l#aQm(VZ7u);;fp69x6V2@E2i6dEi4pwDCoePY5O;j_k$T z{7upxe_FblEicTjCgD8)znRQ78qs#*y5b{~iC__Av^F97&1BjKjTtuEQ^;JYu+r8f zn{n;gpDtoP383%H&dmei*BCjVHBonY@8W0epFaqXA^nR2e0%? zL2a9vXTKgjF6F_B$kHaMWS3NVD*GH!^5qchpXwIaj@^&47mc{K3j~CcD#R-Ys++ns ztlH>EEGuIJcGgz><2-x20++FRNAZs zmsYw$w~IE6vZL^4U{$!tLjxgO?!_7M=WcoW2N0c2z7=9bnJ%xrB zMZY?7==EIoqSLl1zHortvb1wC*_I#fB4Iw~P7^SgJ3`-h^6nN@ij0vovz6ZM*
$-!*GpA*b{q3j+a@0TmcE_y3 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 z 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
p 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%0AZ-~2k#78uy+LV0eHf`# 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%0DUrJ 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