Wykres macierzy korelacji na wykresie

Mam macierz z pewnymi wartościami korelacji. Teraz chcę wykreślić to na wykresie, który wygląda mniej więcej tak:

Tutaj wpisz opis obrazka

Jak mogę to osiągnąć?

 90
r
Author: Gavin Simpson, 2011-03-28

11 answers

Szybko, brudno i na boisku:

library(lattice)

#Build the horizontal and vertical axis information
hor <- c("214", "215", "216", "224", "211", "212", "213", "223", "226", "225")
ver <- paste("DM1-", hor, sep="")

#Build the fake correlation matrix
nrowcol <- length(ver)
cor <- matrix(runif(nrowcol*nrowcol, min=0.4), nrow=nrowcol, ncol=nrowcol, dimnames = list(hor, ver))
for (i in 1:nrowcol) cor[i,i] = 1

#Build the plot
rgb.palette <- colorRampPalette(c("blue", "yellow"), space = "rgb")
levelplot(cor, main="stage 12-14 array correlation matrix", xlab="", ylab="", col.regions=rgb.palette(120), cuts=100, at=seq(0,1,0.01))

Tutaj wpisz opis obrazka

 54
Author: bill_080,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-28 02:48:46

Raczej" mniej " wygląda, ale warto sprawdzić (jako podając więcej informacji wizualnych):

Elipsy macierzy korelacji : Elipsy macierzy korelacjiokręgi macierzy korelacji : Okręgi macierzy korelacji

Więcej przykładów znajdziesz w winiecie corrplot , do której odwołuje się @assylias poniżej.

 58
Author: daroczig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-08 04:55:36

Bardzo łatwe z kratką:: levelplot:

z <- cor(mtcars)
require(lattice)
levelplot(z)

Tutaj wpisz opis obrazka

 43
Author: 42-,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-28 09:44:35

Biblioteka ggplot2 poradzi sobie z tym za pomocą geom_tile(). Wygląda na to, że możliwe było pewne przeskalowanie na powyższym wykresie, ponieważ nie ma żadnych negatywnych korelacji, więc weź to pod uwagę ze swoimi danymi. Użycie zbioru danych mtcars:

library(ggplot2)
library(reshape)

z <- cor(mtcars)
z.m <- melt(z)

ggplot(z.m, aes(X1, X2, fill = value)) + geom_tile() + 
scale_fill_gradient(low = "blue",  high = "yellow")

Tutaj wpisz opis obrazka

EDIT :

ggplot(z.m, aes(X1, X2, fill = value)) + geom_tile() + 
scale_fill_gradient2(low = "blue",  high = "yellow")

Tutaj wpisz opis obrazka

Pozwala określić kolor punktu środkowego i domyślnie jest biały, więc może być tu niezła Regulacja. Inne opcje można znaleźć na stronie ggplot tutaj i tutaj .

 30
Author: Chase,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-02 02:05:29

Użyj pakietu corrplot:

library(corrplot)
data(mtcars)
M <- cor(mtcars)
##  different color series
col1 <- colorRampPalette(c("#7F0000","red","#FF7F00","yellow","white", 
        "cyan", "#007FFF", "blue","#00007F"))
col2 <- colorRampPalette(c("#67001F", "#B2182B", "#D6604D", "#F4A582", "#FDDBC7",
        "#FFFFFF", "#D1E5F0", "#92C5DE", "#4393C3", "#2166AC", "#053061"))  
col3 <- colorRampPalette(c("red", "white", "blue")) 
col4 <- colorRampPalette(c("#7F0000","red","#FF7F00","yellow","#7FFF7F", 
        "cyan", "#007FFF", "blue","#00007F"))   
wb <- c("white","black")


par(ask = TRUE)


## different color scale and methods to display corr-matrix
corrplot(M, method="number", col="black", addcolorlabel="no")
corrplot(M, method="number")
corrplot(M)
corrplot(M, order ="AOE")
corrplot(M, order ="AOE", addCoef.col="grey")

corrplot(M, order="AOE", col=col1(20), cl.length=21,addCoef.col="grey")
corrplot(M, order="AOE", col=col1(10),addCoef.col="grey")

corrplot(M, order="AOE", col=col2(200))
corrplot(M, order="AOE", col=col2(200),addCoef.col="grey")
corrplot(M, order="AOE", col=col2(20), cl.length=21,addCoef.col="grey")
corrplot(M, order="AOE", col=col2(10),addCoef.col="grey")

corrplot(M, order="AOE", col=col3(100))
corrplot(M, order="AOE", col=col3(10))



corrplot(M, method="color", col=col1(20), cl.length=21,order = "AOE", addCoef.col="grey")

if(TRUE){

corrplot(M, method="square", col=col2(200),order = "AOE")

corrplot(M, method="ellipse", col=col1(200),order = "AOE")


corrplot(M, method="shade", col=col3(20),order = "AOE")

corrplot(M, method="pie", order = "AOE")


## col=wb
corrplot(M, col = wb, order="AOE", outline=TRUE, addcolorlabel="no")
## like Chinese wiqi, suit for either on screen or white-black print.
corrplot(M, col = wb, bg="gold2",  order="AOE", addcolorlabel="no")
}

Na przykład:

Tutaj wpisz opis obrazka

Raczej elegancki IMO

 11
Author: TheDude,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-31 19:44:56

Ten typ wykresu nazywany jest między innymi "mapą ciepła". Gdy już masz matrycę korelacji, wykreśl ją za pomocą jednego z różnych samouczków.

Używanie grafiki bazowej: http://flowingdata.com/2010/01/21/how-to-make-a-heatmap-a-quick-and-easy-solution/

Using ggplot2: http://learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/

 9
Author: Ari B. Friedman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-28 11:49:03

Pracowałem nad czymś podobnym do wizualizacji napisanej przez @daroczig, z kodem napisanym przez @Ulrik przy użyciu funkcji plotcorr() pakietu ellipse. Podoba mi się użycie elipsy do reprezentowania korelacji, a użycie kolorów do reprezentowania korelacji ujemnej i dodatniej. Chciałem jednak, aby przyciągające wzrok kolory wyróżniały się korelacjami bliskimi 1 i -1, a nie tymi bliskimi 0.

Stworzyłem alternatywę, w której białe elipsy są nakładane na kolorowe koła. Każda Biała elipsa ma taki rozmiar, że proporcja kolorowego okręgu widocznego za nią jest równa kwadratowej korelacji. Gdy korelacja jest bliska 1 i -1, Biała elipsa jest mała, a duża część kolorowego okręgu jest widoczna. Gdy korelacja jest bliska 0, Biała elipsa jest duża i niewiele z kolorowego okręgu jest widoczne.

Funkcja, plotcor(), jest dostępna pod adresem https://github.com/JVAdams/jvamisc/blob/master/R/plotcor.r .

Przykład z wykresu wynikowego przy użyciu zestawu danych mtcars pokazano poniżej.

library(plotrix)
library(seriation)
library(MASS)
plotcor(cor(mtcars), mar=c(0.1, 4, 4, 0.1))

wynik wywołania funkcji plotcor ()

 4
Author: Jean V. Adams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-29 17:44:50

Zdaję sobie sprawę, że minęło trochę czasu, ale nowi czytelnicy mogą zainteresować się rplot() z pakietu corrr ( https://cran.rstudio.com/web/packages/corrr/index.html ), które mogą wytwarzać rodzaje wykresów, ale projektować dla podejścia data pipeline:

install.packages("corrr")
library(corrr)
mtcars %>% correlate() %>% rplot()

Tutaj wpisz opis obrazka

mtcars %>% correlate() %>% rearrange() %>% rplot()

Tutaj wpisz opis obrazka

mtcars %>% correlate() %>% rearrange() %>% rplot(shape = 15)

Tutaj wpisz opis obrazka

mtcars %>% correlate() %>% rearrange() %>% shave() %>% rplot(shape = 15)

Tutaj wpisz opis obrazka

mtcars %>% correlate() %>% rearrange(absolute = FALSE) %>% rplot(shape = 15)

Tutaj wpisz opis obrazka

 3
Author: Simon Jackson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-25 07:38:51

Funkcja corrplot () z pakietu corrplot R może być również użyta do wykreślenia korelogramu.

library(corrplot)  
M<-cor(mtcars) # compute correlation matrix
corrplot(M, method="circle")

Opublikowano kilka artykułów opisujących jak obliczyć i wizualizować macierz korelacji:

 2
Author: A. Kassambara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-31 02:44:43

Innym rozwiązaniem, o którym ostatnio się dowiedziałem, jest interaktywna heatmapa stworzona za pomocą pakietu qtlcharts .

install.packages("qtlcharts")
library(qtlcharts)
iplotCorr(mat=mtcars, group=mtcars$cyl, reorder=TRUE)

Poniżej znajduje się statyczny obraz wynikowego wykresu. Tutaj wpisz opis obrazka

Wersja interaktywna znajduje się na moim blogu . Najedź kursorem na mapę cieplną, aby zobaczyć wartości wierszy, kolumn i komórek. Kliknij na komórkę, aby zobaczyć scatterplot z symbolami kolorowanymi według grup (w tym przykładzie liczba cylindrów: 4 jest czerwona, 6 jest zielona, a 8 jest niebieska). Hovering nad punktami w scatterplot daje nazwę rzędu (w tym przypadku marka samochodu).
 1
Author: Jean V. Adams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-09 14:21:27

Ponieważ nie mogę skomentować, muszę dać swoje 2c na odpowiedź darocziga jako anwser...

Wykres rozrzutu elipsy jest rzeczywiście z pakietu elipsy i generowany przez:

corr.mtcars <- cor(mtcars)
ord <- order(corr.mtcars[1,])
xc <- corr.mtcars[ord, ord]
colors <- c("#A50F15","#DE2D26","#FB6A4A","#FCAE91","#FEE5D9","white",
            "#EFF3FF","#BDD7E7","#6BAED6","#3182BD","#08519C")   
plotcorr(xc, col=colors[5*xc + 6])

(ze strony man)

Pakiet corrplot może również - zgodnie z sugestią-być przydatny z ładnymi obrazkami znalezionymi tutaj

 0
Author: Ulrik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-08 07:55:46