# [R] Correlation matrix one side with significance

Gabor Grothendieck ggrothendieck at gmail.com
Sun Jan 25 12:08:25 CET 2009

If your purpose is simply to represent a correlation matrix it in a more
compact way see ?symnum, the corrgram package and an example in the
book Multivariate Data Visualization (regarding which gives a lattice
implementation).

On Fri, Mar 7, 2008 at 2:15 PM, Martin Kaffanke
<technik at roomandspace.com> wrote:
> Thank you, thats really good and gives me very good information.
>
> Thanks,
> Martin
>
> Am Donnerstag, den 06.03.2008, 14:35 -0500 schrieb Chuck Cleland:
>> On 3/6/2008 2:07 PM, Martin Kaffanke wrote:
>> > Am Mittwoch, den 05.03.2008, 14:38 -0300 schrieb Henrique Dallazuanna:
>> >> Try this:
>> >>
>> >> On 05/03/2008, Martin Kaffanke <technik at roomandspace.com> wrote:
>> >>> Hi there!
>> >>>
>> >>>  In my case,
>> >>>
>> >>>  cor(d[1:20])
>> >>>
>> >>>  makes me a good correlation matrix.
>> >>>
>> >>>  Now I'd like to have it one sided, means only the left bottom side to be
>> >>>  printed (the others are the same) and I'd like to have * where the
>> >>>  p-value is lower than 0.05 and ** lower than 0.01.
>> >>>
>> >>>  How can I do this?
>> >> d <- matrix(rexp(16, 2), 4)
>> >> corr <- cor(d)
>> >> sign <- symnum(cor(d), cutpoints=c(0.05, 0.01), corr = T,
>> >> symbols=c("***", "**", "*"), abbr=T, diag=F)
>> >>
>> >> noquote(mapply(function(x, y)paste(x, format(y, dig=3), sep=''),
>> >> as.data.frame(unclass(sign)), as.data.frame(corr)))
>> >
>> > Seems that we mark the value itself, but not the p-value.
>> >
>> > So lets say, in a way I have to get the lower left half of a
>> >
>> > cor(el[1:20])
>> >
>> > Then I need to calc all the values with a cor.test() to see for the
>> > p-value.  And the p-value should be lower than .05 or .01 -> this should
>> > make the * to the value.
>> >
>> > Thanks,
>> > Martin
>>
>>    Do you want something like the following, but with the upper triangle
>> removed?
>>
>> corstars <- function(x){
>> require(Hmisc)
>> x <- as.matrix(x)
>> R <- rcorr(x)\$r
>> p <- rcorr(x)\$P
>> mystars <- ifelse(p < .01, "**|", ifelse(p < .05, "* |", "  |"))
>> R <- format(round(cbind(rep(-1.111, ncol(x)), R), 3))[,-1]
>> Rnew <- matrix(paste(R, mystars, sep=""), ncol=ncol(x))
>> diag(Rnew) <- paste(diag(R), "  |", sep="")
>> rownames(Rnew) <- colnames(x)
>> colnames(Rnew) <- paste(colnames(x), "|", sep="")
>> Rnew <- as.data.frame(Rnew)
>> return(Rnew)
>> }
>>
>> corstars(swiss[,1:4])
>>              Fertility| Agriculture| Examination| Education|
>> Fertility     1.000  |     0.353* |    -0.646**|  -0.664**|
>> Agriculture   0.353* |     1.000  |    -0.687**|  -0.640**|
>> Examination  -0.646**|    -0.687**|     1.000  |   0.698**|
>> Education    -0.664**|    -0.640**|     0.698**|   1.000  |
>>
>>    I will leave the removing the upper triangle part to you - should be
>> examples in the archives.
>>
>> > ------------------------------------------------------------------------
>> >
>> > ______________________________________________
>> > R-help at r-project.org mailing list
>> > https://stat.ethz.ch/mailman/listinfo/r-help
>> > and provide commented, minimal, self-contained, reproducible code.
>>
> --
> Ihr Partner für Webdesign, Webapplikationen und Webspace.
> http://www.roomandspace.com/
> Martin Kaffanke +43 650 4514224
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help