[R] Filtering matrices

Steve Lianoglou mailinglist.honeypot at gmail.com
Wed Aug 26 15:38:28 CEST 2009


Hi,

On Aug 25, 2009, at 10:54 PM, bwgoudey wrote:

>
>> r<-rcorr(d[[1]]) #d is matrix containing observation
>> r[[1]] #r values
>           age         sex         BMI
> age  1.0000000 -0.30010322 -0.13702263
> sex -0.3001032  1.00000000  0.06300528
> BMI -0.1370226  0.06300528  1.00000000
>> r[[2]] #Number of obervations
>    age sex BMI
> age 100 100 100
> sex 100 100 100
> BMI 100 100 100
>> r[[3]] #P values
>            age         sex       BMI
> age          NA 0.002416954 0.1740134
> sex 0.002416954          NA 0.5334484
> BMI 0.174013354 0.533448366        NA

Just a quick note: please provide data in an easy way for us to enter  
into our R session -- the way you provide the data requires more work  
on someone who is trying to help you in order to enter it in R, for  
instance this might have been better:

rvals <- matrix(c(
   1.0000000, -0.30010322, -0.13702263,
   -0.3001032,  1.00000000,  0.06300528,
   -0.1370226,  0.06300528,  1.00000000), byrow=TRUE, nrow=3)

obs <- matrix(c(
   100, 100, 100,
   100, 100, 100,
   100, 100, 100), byrow=TRUE, nrow=3)

pval <- matrix(c(
          NA, 0.002416954, 0.1740134,
0.002416954,          NA, 0.5334484,
0.174013354, 0.533448366,        NA), byrow=TRUE, nrow=3)

Since I can just copy and paste that into my R session and get right  
to answering your question.

> If I wanted to return a matrix containing all points where  
> correlation was
> above 0.75 and P-value was below 0.05, how would I do this?

Where is your "points" matrix that you want to return the data from?

Assuming this is also a 3x3 matrix, you just build the indexing  
vectors using the data matrices of interest, and use those to pull the  
points out of your data/"points" matrix.

Let's assume my data/points matrix is called my.data:

#1 Get indices of points w/ correlation above 0.75
good.cor <- rvals > .75

#2 Get indices of points w/ p-value < 0.05, since you have NA values
# in your pval matrix, you have to *explicitly exclude* them from the  
query
good.p   <- !is.na(pval) & pval < 0.05

# since you want their intersection, take an & of the two vectors,
# but this is empty in this case. Either way, this would get
# the points you're after
my.data[good.cor & good.p]

Does that make sense?

-steve

--
Steve Lianoglou
Graduate Student: Computational Systems Biology
   |  Memorial Sloan-Kettering Cancer Center
   |  Weill Medical College of Cornell University
Contact Info: http://cbio.mskcc.org/~lianos/contact




More information about the R-help mailing list