Skip to content

return only pairwise correlations greater than given value

6 messages · R. Michael Weylandt, Brad Patrick Schneid, Joshua Wiley

#
Hello, 

 I would like to find out if a function already exists that returns only
pairwise correlations above/below a certain threshold (e.g, -.90, .90)

Thank you. 



--
View this message in context: http://r.789695.n4.nabble.com/return-only-pairwise-correlations-greater-than-given-value-tp4079028p4079028.html
Sent from the R help mailing list archive at Nabble.com.
#
What exactly do you mean "returns" them? More generally I suppose,
what do you have in mind to do with this?

You could do something like this:

BigCorrelation <- function(X){

     return(which(abs(cor(X)) > 0.9, arr.ind = T))
}

but it hardly seems worth its own function call.
On Thu, Nov 17, 2011 at 12:42 AM, B77S <bps0002 at auburn.edu> wrote:
#
Thanks Michael, 

I just started on the following code (below), and realized I should as as
this might exist. 

basically what I'd like is for the function to return (basically) what you
just suggested, plus the names of the two variables (I suppose pasted
together would be good). 

I hope that is clear.

# 
sig.cor <- function(dat, r, ...){

cv2 <- data.frame(cor(dat))
var.names <- rownames(cv2)

list.cv2 <- which(cv2 >=r | cv2 <= -r, arr.ind=T)
cor.r <- cv2[list.cv2[which(list.cv2 [,"row"]!=list.cv2 [,"col"]),]]
cor.names <- var.names[list.cv2[which(list.cv2 [,"row"]!=list.cv2
[,"col"]),]]

	
return(cor.r)

}
Michael Weylandt wrote:
--
View this message in context: http://r.789695.n4.nabble.com/return-only-pairwise-correlations-greater-than-given-value-tp4079028p4079044.html
Sent from the R help mailing list archive at Nabble.com.
#
This is probably not the prettiest or most efficient function ever, but this
seems to do what I wanted.


spec.cor <- function(dat, r, ...){
	
	require("reshape")
	
	d1 <- data.frame(cor(dat))
	d2 <- melt(d1)
	d2[,3] <- rep(rownames(d1), nrow(d2)/length(unique(d2[,1])))
	d2 <- d2[,c("variable", "V3", "value")]
	colnames(d2) <- c("V1", "V2", "value")
	d2 <- d2[with(d2, which(V1 != V2, arr.ind=T)), ]
	d2 <- d2[which(d2[,3] >=r | d2[,3] <= -r, arr.ind=T),]
	d2[,1:2] <- t(apply(d2[,1:2], MARGIN=1, function(x) sort(x)))
	d2 <- unique(d2)	
	
	return(d2)
}



data(mtcars)
Using  as id variables
    V1   V2      value
2  cyl disp  0.9020329
3  cyl   hp  0.8324475
4  cyl drat -0.6999381
7 disp   hp  0.7909486
8 disp drat -0.7102139



I'm not sure how to make melt() quit giving the "Using  as id variables"
warning, but I don't really care either.
B77S wrote:
--
View this message in context: http://r.789695.n4.nabble.com/return-only-pairwise-correlations-greater-than-given-value-tp4079028p4081534.html
Sent from the R help mailing list archive at Nabble.com.
#
Hi Brad,

You do not really need to reshape the correlation matrix.  This seems
to do what you want:

spec.cor <- function(dat, r, ...) {
  x <- cor(dat, ...)
  x[upper.tri(x, TRUE)] <- NA
  i <- which(abs(x) >= r, arr.ind = TRUE)
  data.frame(matrix(colnames(x)[as.vector(i)], ncol = 2), value = x[i])
}

spec.cor(mtcars[, 2:5], .6)

Cheers,

Josh
On Wed, Nov 16, 2011 at 9:58 PM, B77S <bps0002 at auburn.edu> wrote:

  
    
#
Excellent; thanks Josh.
Joshua Wiley-2 wrote:
--
View this message in context: http://r.789695.n4.nabble.com/return-only-pairwise-correlations-greater-than-given-value-tp4079028p4081643.html
Sent from the R help mailing list archive at Nabble.com.