Me pregunto cómo se puede agregar otra capa de complejidad importante y necesaria a un mapa de calor de correlación matricial como, por ejemplo, el valor p después del nivel de significancia de estrellas además del valor R2 (-1 a 1)
NO SE PRETENDIÓ en esta pregunta para poner estrellas de nivel de significancia O los valores de p como texto en cada cuadrado de la matriz PERO más bien para mostrar esto en una representación gráfica lista para usar del nivel de significancia en cada cuadrado de la matriz. Creo que solo aquellos que disfrutan la bendición del pensamiento INNOVADOR pueden ganar el aplauso para desentrañar este tipo de solución con el fin de tener la mejor manera de representar ese componente adicional de complejidad en nuestros "mapas de calor de correlación matricial a medias verdad". Busqué mucho en Google, pero nunca he visto una forma adecuada, o diría que respetuosa, de representar el nivel de significancia MÁS las sombras de colores estándar que reflejan el coeficiente R.
Los datos reproducibles establecidos se encuentra aquí:
http://learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/
El código R se adjunta a continuación:Nivel de importancia agregado al mapa de calor de correlación matricial usando ggplot2
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.m <- 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
#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.
La matriz de correlación mapa de calor debe tener este aspecto:
Sugerencias e ideas para mejorar la solución:
- Este código puede ser útil para tener una idea sobre el nivel de significancia de las estrellas tomadas de este sitio web:
http://ohiodata.blogspot.de/2012/06/correlation-tables-in-r-flagged-with.html
código R:
mystars <- ifelse(p < .001, "***", ifelse(p < .01, "** ", ifelse(p < .05, "* ", " "))) # so 4 categories
- El nivel de significación se puede añadir como intensidad de color a cada plaza como la estética alfa, pero no creo que esto será fácil de interpretar y captar
- Otra idea sería tener 4 tamaños diferentes de cuadrados correspondientes a las estrellas, por supuesto, dando el más pequeño al no significativo y aumenta a un tamaño completo cuadrado si las estrellas más altas
- Otra idea para incluir un círculo dentro de esos cuadrados significativos y el grosor de la línea del círculo corresponde al nivel de significancia (las 3 categorías restantes) todos ellos de un solo color
- Igual que el anterior pero que fija el grosor de la línea mientras da 3 colores para los 3 niveles significativos restantes
- ¿Puede venir con mejores ideas, quién sabe?
Su código me inspiró a reescribir la función 'arm :: corrplot' con ggplot2: http: // rpubs.com/briatte/ggcorr –
¡funciona genial! ¿Puede extender esta función para que desaparezcan esas correlaciones no significativas (por ejemplo, <0.05), manteniendo esas o igual a las anteriores? Aquí, uno debe alimentar la función con otra matriz PERO con valores p, comparto contigo esta función que puede ser de ayuda para obtener esa matriz p (puedes usar: cor.prob.all() cor.prob.all <- función (X, dfr = nrow (X) - 2) { R <- cor (X, use = "pairwise.complete.obs", method = "spearman") r2 <- R^2 Fstat <- r2 * dfr/(1 - r2) R <- 1 - pf (Fstat, 1, dfr) R [fila (R) == col (R)] <- NA R } – doctorate
Gracias por su respuesta. Soy escéptico sobre el uso de $ p $ -valores aquí (y en otros lugares), pero voy a tratar de encontrar algo para marcar coeficientes insignificantes. –