Hello Dear friends
I was doing a correlation analysis from two data matrix.
From this large matrix, I want to get a significant one as a data frame for further analysis. The code and the data are simulated below.
library(Hmisc)
library(multtest)
library(reshape2)
library(dplyr)
data(golub)
mat = golub
rownames(mat) = paste0("G",1:nrow(mat))
#split the samples up randomly to get two matrix
m1 = mat[,seq(1,ncol(mat),2)]
m2 = mat[,seq(2,ncol(mat),2)]
# run the correlation
test = rcorr(t(rbind(m1,m2)))
n = nrow(m1)
# extract the top right block of the full matrix and reshape the data frame from wide to long
results = melt(test$r[1:n,(n+1):(2*n)],value.name ="pcc") %>%
left_join(melt(test$P[1:n,(n+1):(2*n)],value.name ="p"),by=c("Var1","Var2"))
hist(results$p,br=100)
sig <- results[results$p < 0.05,]
#get the significant as data frame by change the data stracture from long to wide
final <- results %>% filter(Var1 %in% sig$Var1 & Var2 %in% sig$Var2) %>%
recast(Var1 ~ Var2,data=.,measure.var="pcc")
Eeventhogh I have tried this but could get what I want( the significant).
It just returns me a data frame that contains the significant and the none significant elements.
Any help would be appreciated!
Best, AD