[R] cor.test for a correlation matrix
Emmanuel Paradis
paradis at isem.univ-montp2.fr
Thu Nov 1 10:41:34 CET 2001
At 19:59 31/10/01 -0500, "Brett Magill" wrote:
>>>>
Is there a simple way to run cor.test on for a matrix of correlations? Of
course, cor on a data frame produces a correlation matrix, but cor.test
will only take two variables at a time. Is there a way to get behavior
similar to that of cor with cor.test? I suppose the programming
alternative would be to run two for loops with the number of items and cor
test embedded accessing the columns of the data frame. Is there a
simpler way? Thanks, Brett
A solution was posted on r-help some time ago by Bill Venables: here is his
message.
Emmanuel Paradis
-----------------------------------
To: "Pete St. Onge" <pete at seul.org>
CC: r-help at stat.math.ethz.ch
Subject: Re: [R] correlation matricies: getting p-values?
Date: Tue, 04 Jan 2000 15:05:39 +1000
From: Bill Venables <William.Venables at cmis.CSIRO.AU>
Sender: owner-r-help at stat.math.ethz.ch
Content-Length: 3025
> I have to admit that I'm at a bit of a loss here; any pointers would be
> greatly appreciated.
>
> I've been making correlation matricies from some of my datasets, and
> have been instructed to get the probability values for each of these
> correlations.
To be precise I take it this means the significance probability,
that is the chance of getting a value of the correlation as far
from zero in absolute value or more so as the one you got...
>
> I've checked the online help for info on both the cor and cov functions,
> but I was unable to find any relevant info on finding how to obtain
> these probability values.
The connexion between r and t is known to be
t = r*sqrt(n - 2)/(1 - r^2)
that is, F = t^2 = r^2*(n-2)/(1 - r^2) ~ F(1, n-2)
This allows you to find the probabilities in a line or two of code.
Here is the calculation as a function that puts the correlations
below the diagonal and the significance probabilities above.
cor.prob <- function(X, dfr = nrow(X) - 2) {
R <- cor(X)
above <- row(R) < col(R)
r2 <- R[above]^2
Fstat <- r2 * dfr / (1 - r2)
R[above] <- 1 - pf(Fstat, 1, dfr)
R
}
> X <- matrix(rnorm(1000), 200, 5)
> cor.prob(X)
[,1] [,2] [,3] [,4] [,5]
[1,] 1.000000 0.359702 0.872159 0.296850 0.07346
[2,] -0.065106 1.000000 0.111743 0.569198 0.41012
[3,] -0.011450 0.112807 1.000000 0.386409 0.47407
[4,] 0.074129 0.040488 0.061574 1.000000 0.40357
[5,] 0.126853 -0.058560 0.050906 -0.059382 1.00000
You can spot-check the results by regression, for example:
> X <- as.data.frame(X)
> names(X)
[1] "V1" "V2" "V3" "V4" "V5"
> summary(lm(V2 ~ V1, X))
....
Residual standard error: 1 on 198 degrees of freedom
Multiple R-Squared: 0.00424, Adjusted R-squared: -0.00079
F-statistic: 0.843 on 1 and 198 degrees of freedom, p-value: 0.36
-------
The final p-value compares with 0.359702 in the 1,2 position of
the matrix.
This assumes you have a common degrees of freedom (n-2) for all
correlations in the table. If you are using something like
"pairwise deletion" of missing values you have a bit more work to
do (and I hope your matrix comes out as positive definite - there
is no guarantee it will).
--
-----------------------------------------------------------------
Bill Venables, Statistician, CMIS Environmetrics Project.
Physical address: Postal address:
CSIRO Marine Laboratories, PO Box 120,
233 Middle St, Cleveland, Queensland Cleveland, Qld, 4163
AUSTRALIA AUSTRALIA
Telephone: +61 7 3826 7251 Email: Bill.Venables at cmis.csiro.au
Fax: +61 7 3826 7304
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.
_._
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
More information about the R-help
mailing list