Интересно, как можно добавить еще один уровень важной и необходимой сложности в матричную корреляционную тепловую карту, например, как значение p после типа звезд уровня значимости в дополнение к значению R2 (от -1 до 1)?
В этом вопросе не было поставлено значение звезд уровня значимости или значений p в виде текста на каждом квадрате матрицы, но чтобы показать это в графическом готовом представлении уровня значимости на каждом квадрате матрицы. Я думаю, что только те, кто пользуется благословением ИННОВАЦИОННОГО мышления, могут выиграть аплодисменты, чтобы разгадать такое решение, чтобы иметь лучший способ представить эту добавленную составляющую сложности нашим "матрицам корреляции с половиной правды". Я много гугл, но никогда не видел должного, или я скажу "благоприятный для глаз" способ представить уровень значимости PLUS стандартных цветовых оттенков, которые отражают коэффициент R.
Воспроизводимый набор данных можно найти здесь:
http://learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/
Код R приведен ниже:
library(ggplot2)
library(plyr) # might be not needed here anyway it is a must-have package I think in R
library(reshape2) # to "melt" your dataset
library (scales) # it has a "rescale" function which is needed in heatmaps
library(RColorBrewer) # for convenience of heatmap colors, it reflects your mood sometimes
nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv")
nba <- as.data.frame(cor(nba[2:ncol(nba)])) # convert the matrix correlations to a dataframe
nba <- data.frame(row=rownames(nba),nba) # create a column called "row"
rownames(nba) <- NULL #get rid of row names
nba <- melt(nba)
nba.m$value<-cut(nba.m$value,breaks=c(-1,-0.75,-0.5,-0.25,0,0.25,0.5,0.75,1),include.lowest=TRUE,label=c("(-0.75,-1)","(-0.5,-0.75)","(-0.25,-0.5)","(0,-0.25)","(0,0.25)","(0.25,0.5)","(0.5,0.75)","(0.75,1)")) # this can be customized to put the correlations in categories using the "cut" function with appropriate labels to show them in the legend, this column now would be discrete and not continuous
nba.m$row <- factor(nba.m$row, levels=rev(unique(as.character(nba.m$variable)))) # reorder the "row" column which would be used as the x axis in the plot after converting it to a factor and ordered now
po.nopanel <- list(opts(panel.background=theme_blank(),panel.grid.minor=theme_blank(),panel.grid.major=theme_blank())) # useful to get rid of grids of plot taken from https://gist.github.com/1035189/ac763cb4480c7b522483fa90ed0865d66593737c
#now plotting
ggplot(nba.m, aes(row, variable)) +
geom_tile(aes(fill=value),colour="black") +
scale_fill_brewer(palette = "RdYlGn",name="Correlation") + # here comes the RColorBrewer package, now if you ask me why did you choose this palette colour I would say look at your battery charge indicator of your mobile for example your shaver, won't be red when gets low? and back to green when charged? This was the inspiration to choose this colour set.
opts(axis.text.x=theme_text(angle=-90))+
po.nopanel
Матричная корреляционная карта должна выглядеть так:
Советы и идеи для улучшения решения:
- Этот код может быть полезен, чтобы иметь представление о звездах уровня значимости, взятых с этого сайта:
http://ohiodata.blogspot.de/2012/06/correlation-tables-in-r-flagged-with.html
R-код:
mystars <- ifelse(p < .001, "***", ifelse(p < .01, "** ", ifelse(p < .05, "* ", " "))) # so 4 categories
- Уровень значимости может быть добавлен как интенсивность цвета для каждого квадрата, как альфа-эстетика, но я не думаю, что это будет легко интерпретировать и захватить
- Еще одна идея состояла бы в том, чтобы иметь 4 разных размера квадратов, соответствующих звездам, конечно, давая наименьшее значение для несущественного и увеличиваясь до квадрата полного размера, если самые высокие звезды
- Еще одна идея включить круг в эти значащие квадраты и толщину линии круга соответствует уровню значимости (3 оставшиеся категории), все из них одного цвета
- То же, что и выше, но фиксируя толщину линии, давая 3 цвета для 3 оставшихся значимых уровней
- Может быть, вы придумали лучшие идеи, кто знает?
Большое спасибо и желаю вам всего наилучшего в этом endevour!