annotate CorrTable/Corr_Script_samples_row.R @ 3:2cc6a8076e0a draft

Uploaded
author melpetera
date Mon, 01 Oct 2018 10:00:11 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
1 #################################################################################################
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
2 # CORRELATION TABLE #
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
3 # #
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
4 # #
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
5 # Input : 2 tables with common samples #
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
6 # Output : Correlation table ; Heatmap (pdf) #
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
7 # #
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
8 # Dependencies : Libraries "ggplot2" and "reshape2" #
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
9 # #
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
10 #################################################################################################
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
11
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
12
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
13 # Parameters (for dev)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
14 if(FALSE){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
15
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
16 rm(list = ls())
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
17 getwd()
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
18 setwd(dir = "Y:/Developpement")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
19
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
20 tab1.name <- "Test/Ressources/Inputs/CT2_DM.tabular"
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
21 tab2.name <- "Test/Ressources/Inputs/CT2_base_Diapason_14ClinCES_PRIN.txt"
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
22 param1.samples <- "column"
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
23 param2.samples <- "row"
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
24 corr.method <- "pearson"
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
25 test.corr <- "yes"
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
26 alpha <- 0.05
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
27 multi.name <- "none"
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
28 filter <- "yes"
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
29 filters.choice <- "filters_0_thr"
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
30 threshold <- 0.2
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
31 reorder.var <- "yes"
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
32 color.heatmap <- "yes"
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
33 type.classes <-"irregular"
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
34 reg.value <- 1/3
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
35 irreg.vect <- c(-0.3, -0.2, -0.1, 0, 0.3, 0.4)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
36 output1 <- "Correlation_table.txt"
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
37 output2 <- "Heatmap.pdf"
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
38
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
39 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
40
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
41
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
42
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
43 correlation.tab <- function(tab1.name, tab2.name, param1.samples, param2.samples, corr.method, test.corr, alpha,
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
44 multi.name, filter, filters.choice, threshold, reorder.var, color.heatmap, type.classes,
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
45 reg.value, irreg.vect, output1, output2){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
46
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
47 # This function allows to visualize the correlation between two tables
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
48 #
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
49 # Parameters:
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
50 # - tab1.name: table 1 file's access
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
51 # - tab2.name: table 2 file's access
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
52 # - param1.samples ("row" or "column"): where the samples are in tab1
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
53 # - param2.samples ("row" or "column"): where the samples are in tab2
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
54 # - corr.method ("pearson", "spearman", "kendall"):
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
55 # - test.corr ("yes" or "no"): test the significance of a correlation coefficient
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
56 # - alpha (value between 0 and 1): risk for the correlation significance test
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
57 # - multi.name ("holm", "hochberg", "hommel", "bonferroni", "BH", "BY", "fdr", "none"): correction of multiple tests
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
58 # - filter ("yes", "no"): use filter.0 or/and filter.threshold
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
59 # - filters.choice ("filter_0" or "filters_0_thr"): zero filter removes variables with all their correlation coefficients = 0
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
60 # and threshold filter remove variables with all their correlation coefficients in abs < threshold
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
61 # - threshold (value between 0 and 1): threshold for filter threshold
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
62 # - reorder.var ("yes" or "no"): reorder variables in the correlation table thanks to the HCA
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
63 # - color.heatmap ("yes" or "no"): color the heatmap with classes defined by the user
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
64 # - type.classes ("regular" or "irregular"): choose to color the heatmap with regular or irregular classes
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
65 # - reg.value (value between 0 and 1): value for regular classes
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
66 # - irreg.vect (vector with values between -1 and 1): vector which indicates values for intervals (irregular classes)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
67 # - output1: correlation table file's access
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
68 # - output2: heatmap (colored correlation table) file's access
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
69
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
70
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
71 # Input ----------------------------------------------------------------------------------------------
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
72
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
73 tab1 <- read.table(tab1.name, sep = "\t", header = TRUE, check.names = FALSE, row.names = 1)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
74 tab2 <- read.table(tab2.name, sep = "\t", header = TRUE, check.names = FALSE, row.names = 1)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
75
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
76 # Transpose tables according to the samples
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
77 if(param1.samples == "column"){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
78 tab1 <- t(tab1)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
79 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
80
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
81 if(param2.samples == "column"){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
82 tab2 <- t(tab2)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
83 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
84
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
85 # Sorting tables in alphabetical order of the samples
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
86 tab1 <- tab1[order(rownames(tab1)),]
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
87 tab2 <- tab2[order(rownames(tab2)),]
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
88
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
89
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
90 # Check if the 2 datasets match regarding samples identifiers
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
91 # Adapt from functions "check.err" and "match2", RcheckLibrary.R
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
92
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
93 err.stock <- NULL
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
94
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
95 id1 <- rownames(tab1)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
96 id2 <- rownames(tab2)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
97
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
98 if(sum(id1 != id2) > 0){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
99 err.stock <- c("\nBoth tables do not match regarding samples identifiers.")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
100
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
101 if(length(which(id1%in%id2)) != length(id1)){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
102 identif <- id1[which(!(id1%in%id2))]
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
103 if (length(identif) < 4){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
104 err.stock <- c(err.stock, "\nThe following identifier(s) found in the first table do not appear in the second table:\n")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
105 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
106 else {
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
107 err.stock <- c(err.stock, "\nFor example, the following identifiers found in the first table do not appear in the second table:\n")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
108 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
109 identif <- identif[1:min(3,length(which(!(id1%in%id2))))]
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
110 err.stock <- c(err.stock," ",paste(identif,collapse="\n "),"\n")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
111 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
112
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
113 if(length(which(id2%in%id1)) != length(id2)){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
114 identif <- id2[which(!(id2%in%id1))]
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
115 if (length(identif) < 4){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
116 err.stock <- c(err.stock, "\nThe following identifier(s) found in the second table do not appear in the first table:\n")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
117 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
118 else{
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
119 err.stock <- c(err.stock, "\nFor example, the following identifiers found in the second table do not appear in the first table:\n")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
120 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
121 identif <- identif[1:min(3,length(which(!(id2%in%id1))))]
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
122 err.stock <- c(err.stock," ",paste(identif,collapse="\n "),"\n")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
123 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
124 err.stock <- c(err.stock,"\nPlease check your data.\n")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
125 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
126
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
127 if(length(err.stock)!=0){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
128 stop("\n- - - - - - - - -\n",err.stock,"\n- - - - - - - - -\n")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
129 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
130
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
131
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
132 # Check qualitative variables in each input tables
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
133 err.msg <- NULL
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
134
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
135 var1.quali <- vector()
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
136 var2.quali <- vector()
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
137
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
138 for (i in 1:dim(tab1)[2]){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
139 if(class(tab1[,i]) != "numeric" & class(tab1[,i]) != "integer"){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
140 var1.quali <- c(var1.quali,i)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
141 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
142 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
143
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
144 for (j in 1:dim(tab2)[2]){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
145 if(class(tab2[,j]) != "numeric" & class(tab2[,j]) != "integer"){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
146 var2.quali <- c(var2.quali, j)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
147 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
148 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
149
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
150 if (length(var1.quali) != 0 | length(var2.quali) != 0){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
151 err.msg <- c(err.msg, "\nThere are qualitative variables in your input tables which have been removed to realize the correlation table.\n\n")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
152
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
153 if(length(var1.quali) != 0 && length(var1.quali) < 4){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
154 err.msg <- c(err.msg, "In table 1, the following qualitative variable(s) have been removed:\n",
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
155 " ",paste(colnames(tab1)[var1.quali],collapse="\n "),"\n")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
156 } else if(length(var1.quali) != 0 && length(var1.quali) > 3){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
157 err.msg <- c(err.msg, "For example, in table 1, the following qualitative variables have been removed:\n",
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
158 " ",paste(colnames(tab1)[var1.quali[1:3]],collapse="\n "),"\n")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
159 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
160
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
161 if(length(var2.quali) != 0 && length(var2.quali) < 4){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
162 err.msg <- c(err.msg, "In table 2, the following qualitative variable(s) have been removed:\n",
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
163 " ",paste(colnames(tab2)[var2.quali],collapse="\n "),"\n")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
164 } else if(length(var2.quali) != 0 && length(var2.quali) > 3){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
165 err.msg <- c(err.msg, "For example, in table 2, the following qualitative variables have been removed:\n",
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
166 " ",paste(colnames(tab2)[var2.quali[1:3]],collapse="\n "),"\n")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
167 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
168 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
169
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
170 if(length(var1.quali) != 0){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
171 tab1 <- tab1[,-var1.quali]
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
172 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
173 if(length(var2.quali) != 0){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
174 tab2 <- tab2[,-var2.quali]
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
175 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
176
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
177 if(length(err.msg) != 0){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
178 cat("\n- - - - - - - - -\n",err.msg,"\n- - - - - - - - -\n")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
179 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
180
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
181 # Correlation table ---------------------------------------------------------------------------------
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
182
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
183 tab.corr <- matrix(nrow = dim(tab2)[2], ncol = dim(tab1)[2])
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
184 for (i in 1:dim(tab2)[2]){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
185 for (j in 1:dim(tab1)[2]){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
186 tab.corr[i,j] <- cor(tab2[,i], tab1[,j], method = corr.method, use = "pairwise.complete.obs")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
187 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
188 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
189
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
190 colnames(tab.corr) <- colnames(tab1)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
191 rownames(tab.corr) <- colnames(tab2)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
192
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
193
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
194
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
195 # Significance of correlation test ------------------------------------------------------------------
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
196
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
197 if (test.corr == "yes"){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
198
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
199 pvalue <- vector()
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
200 for (i in 1:dim(tab.corr)[1]){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
201 for (j in 1:dim(tab.corr)[2]){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
202 corrtest <- cor.test(tab2[,i], tab1[,j], method = corr.method)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
203 pvalue <- c(pvalue, corrtest$p.value)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
204 if (multi.name == "none"){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
205 if (corrtest$p.value > alpha){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
206 tab.corr[i,j] <- 0
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
207 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
208 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
209 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
210 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
211
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
212 if(multi.name != "none"){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
213 adjust <- matrix(p.adjust(pvalue, method = multi.name), nrow = dim(tab.corr)[1], ncol = dim(tab.corr)[2], byrow = T)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
214 tab.corr[adjust > alpha] <- 0
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
215 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
216 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
217
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
218
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
219 # Filter settings ------------------------------------------------------------------------------------
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
220
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
221 if (filter == "yes"){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
222
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
223 # Remove variables with all their correlation coefficients = 0 :
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
224 if (filters.choice == "filter_0"){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
225 threshold <- 0
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
226 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
227
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
228 var2.thres <- vector()
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
229 for (i in 1:dim(tab.corr)[1]){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
230 if (length(which(abs(tab.corr[i,]) <= threshold)) == dim(tab.corr)[2]){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
231 var2.thres <- c(var2.thres, i)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
232 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
233 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
234
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
235 if (length(var2.thres) != 0){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
236 tab.corr <- tab.corr[-var2.thres,]
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
237 tab2 <- tab2[, -var2.thres]
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
238 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
239
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
240 var1.thres <- vector()
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
241 for (i in 1:dim(tab.corr)[2]){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
242 if (length(which(abs(tab.corr[,i]) <= threshold)) == dim(tab.corr)[1]){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
243 var1.thres <- c(var1.thres, i)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
244 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
245 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
246
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
247 if (length(var1.thres) != 0){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
248 tab.corr <- tab.corr[,-var1.thres]
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
249 tab1 <- tab1[,-var1.thres]
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
250 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
251
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
252 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
253
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
254
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
255 # Reorder variables in the correlation table (with the HCA) ------------------------------------------
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
256 if (reorder.var == "yes"){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
257
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
258 cormat.tab2 <- cor(tab2, method = corr.method, use = "pairwise.complete.obs")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
259 dist.tab2 <- as.dist(1 - cormat.tab2)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
260 hc.tab2 <- hclust(dist.tab2, method = "ward.D2")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
261 tab.corr <- tab.corr[hc.tab2$order,]
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
262
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
263 cormat.tab1 <- cor(tab1, method = corr.method, use = "pairwise.complete.obs")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
264 dist.tab1 <- as.dist(1 - cormat.tab1)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
265 hc.tab1 <- hclust(dist.tab1, method = "ward.D2")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
266 tab.corr <- tab.corr[,hc.tab1$order]
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
267
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
268 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
269
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
270
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
271
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
272 # Output 1 : Correlation table -----------------------------------------------------------------------
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
273
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
274 # Export correlation table
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
275 write.table(x = data.frame(name = rownames(tab.corr), tab.corr), file = output1, sep = "\t", quote = FALSE, row.names = FALSE)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
276
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
277 # Create the heatmap ---------------------------------------------------------------------------------
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
278
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
279 library(ggplot2)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
280 library(reshape2)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
281
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
282 # Melt the correlation table :
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
283 melted.tab.corr <- melt(tab.corr)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
284
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
285 if (color.heatmap == "yes") {
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
286
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
287 # Add a column for the classes of each correlation coefficient
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
288 classe <- rep(0, dim(melted.tab.corr)[1])
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
289 melted <- cbind(melted.tab.corr, classe)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
290
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
291 if (type.classes == "regular"){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
292
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
293 vect <- vector()
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
294 if (seq(-1,0,reg.value)[length(seq(-1,0,reg.value))] == 0){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
295 vect <- c(seq(-1,0,reg.value)[-length(seq(-1,0,reg.value))],
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
296 rev(seq(1,0,-reg.value)))
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
297 } else {
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
298 vect <- c(seq(-1,0,reg.value), 0, rev(seq(1,0,-reg.value)))
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
299 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
300
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
301 } else if (type.classes == "irregular") {
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
302
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
303 irreg.vect <- c(-1, irreg.vect, 1)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
304 vect <- irreg.vect
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
305
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
306 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
307
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
308 # Color palette :
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
309 myPal <- colorRampPalette(c("#00CC00", "white", "red"), space = "Lab", interpolate = "spline")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
310
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
311 # Create vector intervals
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
312 cl <- vector()
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
313 cl <- paste("[", vect[1], ";", round(vect[2],3), "]", sep = "")
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
314
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
315 for (x in 2:(length(vect)-1)) {
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
316 if (vect[x+1] == 0) {
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
317 cl <- c(cl, paste("]", round(vect[x],3), ";", round(vect[x+1],3), "[", sep = ""))
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
318 } else {
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
319 cl <- c(cl, paste("]", round(vect[x],3), ";",
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
320 round(vect[x+1],3), "]", sep = ""))
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
321 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
322 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
323
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
324 # Assign an interval to each correlation coefficient
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
325 for (i in 1:dim(melted.tab.corr)[1]){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
326 for (j in 1:(length(cl))){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
327 if (vect[j] == -1){
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
328 melted$classe[i][melted$value[i] >= vect[j]
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
329 && melted$value[i] <= vect[j+1]] <- cl[j]
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
330 } else {
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
331 melted$classe[i][melted$value[i] > vect[j]
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
332 && melted$value[i] <= vect[j+1]] <- cl[j]
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
333 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
334 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
335 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
336
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
337 # Find the 0 and assign it the white as name
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
338 if (length(which(vect == 0)) == 1) {
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
339 melted$classe[melted$value == 0] <- "0"
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
340 indic <- which(vect == 0)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
341 cl <- c(cl[1:(indic-1)], 0, cl[indic:length(cl)])
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
342 names(cl)[indic] <- "#FFFFFF"
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
343 } else if (length(which(vect == 0)) == 0) {
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
344 indic <- 0
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
345 for (x in 1:(length(vect)-1)) {
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
346 if (0 > vect[x] && 0 <= vect[x+1]) {
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
347 names(cl)[x] <- "#FFFFFF"
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
348 indic <- x
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
349 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
350 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
351 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
352
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
353 indic <- length(cl) - indic + 1
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
354 cl <- rev(cl)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
355
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
356 # Assign the colors of each intervals as their name
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
357 names(cl)[1:(indic-1)] <- myPal(length(cl[1:indic])*2-1)[1:indic-1]
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
358 names(cl)[(indic+1):length(cl)] <- myPal(length(cl[indic:length(cl)])*2-1)[(ceiling(length(myPal(length(cl[indic:length(cl)])*2-1))/2)+1):length(myPal(length(cl[indic:length(cl)])*2-1))]
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
359
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
360
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
361 melted$classe <- factor(melted$classe)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
362 melted$classe <- factor(melted$classe, levels = cl[cl%in%levels(melted$classe)])
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
363
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
364 # Heatmap if color.heatmap = yes :
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
365 ggplot(melted, aes(Var2, Var1, fill = classe)) +
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
366 ggtitle("Colored correlation table" ) + xlab("Table 1") + ylab("Table 2") +
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
367 geom_tile(color ="ghostwhite") +
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
368 scale_fill_manual( breaks = levels(melted$classe),
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
369 values = names(cl)[cl%in%levels(melted$classe)],
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
370 name = paste(corr.method, "correlation", sep = "\n")) +
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
371 theme_classic() +
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
372 theme(axis.text.x = element_text(angle = 90, vjust = 0.5),
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
373 plot.title = element_text(hjust = 0.5))
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
374
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
375 } else {
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
376
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
377 # Heatmap if color.heatmap = no :
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
378 ggplot(melted.tab.corr, aes(Var2, Var1, fill = value)) +
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
379 ggtitle("Colored correlation table" ) + xlab("Table 1") + ylab("Table 2") +
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
380 geom_tile(color ="ghostwhite") +
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
381 scale_fill_gradient2(low = "red", high = "#00CC00", mid = "white", midpoint = 0, limit = c(-1,1),
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
382 name = paste(corr.method, "correlation", sep = "\n")) +
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
383 theme_classic() +
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
384 theme(axis.text.x = element_text(angle = 90, vjust = 0.5),
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
385 plot.title = element_text(hjust = 0.5))
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
386 }
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
387
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
388
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
389 ggsave(output2, device = "pdf", width = 10+0.075*dim(tab.corr)[2], height = 5+0.075*dim(tab.corr)[1], limitsize = FALSE)
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
390
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
391 } # End of correlation.tab
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
392
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
393
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
394 # Function call
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
395 # correlation.tab(tab1.name, tab2.name, param1.samples, param2.samples, corr.method, test.corr, alpha, multi.name, filter,
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
396 # filters.choice, threshold, reorder.var, color.heatmap, type.classes,
2cc6a8076e0a Uploaded
melpetera
parents:
diff changeset
397 # reg.value, irreg.vect, output1, output2)