2013-03-19 12 views
7

Questa è una versione modificata di una domanda precedente.Confronto grafico a coppie di più distribuzioni

ci viene dato un m di n tabella di n osservazioni (campioni) oltre m variabili (geni, ecc), e stiamo cercando di studiare il comportamento delle variabili tra ogni coppia di osservazioni - Ad esempio le due osservazioni hanno la più alta correlazione positiva o negativa. A questo scopo ho visto una grande tabella in Stadler et.al. Natura di carta (2011):

enter image description here

Qui potrebbe essere un set di dati campione per essere utilizzato.

m <- 1000 
samples <- data.frame(unif1 = runif(m), unif2 = runif(m, 1, 2), norm1 = rnorm(m), 
         norm2 = rnorm(m, 1), norm3 = rnorm(m, 0, 5)) 

Ho già provato gpairs(samples) di pacchetto gpairs che produce questa. E 'un buon inizio, ma non ha alcuna possibilità di mettere coefficienti di correlazione nella sezione in alto a destra, né le trame di densità nell'angolo in basso:

enter image description here

Poi ho usato ggparis(samples, lower=list(continuous="density")) del pacchetto di GGally (Grazie @LucianoSelzer per un commento qui sotto). Ora abbiamo correlazioni sull'angolo superiore e la densità nell'angolo in basso, ma mancano i diagrammi bariatrici diagonali, ei grafici di densità non sono modellati a forma di heatmap.

enter image description here

Tutte le idee per rendere più vicina all'immagine desiderata (il primo)?

risposta

9

Si potrebbe provare a combinare diversi metodi di stampa e combinare i risultati. Ecco un esempio, che potrebbe essere ottimizzato di conseguenza:

cors<-round(cor(samples),2) #correlations 

# make layout for plot layout 
laymat<-diag(1:5) #histograms 
laymat[upper.tri(laymat)]<-6:15 #correlations 
laymat[lower.tri(laymat)]<-16:25 #heatmaps 

layout(laymat) #define layout using laymat 

par(mar=c(2,2,2,2)) #define marginals etc. 

# Draw histograms, tweak arguments of hist to make nicer figures 
for(i in 1:5) 
    hist(samples[,i],main=names(samples)[i]) 

# Write correlations to upper diagonal part of the graph 
# Again, tweak accordingly 
for(i in 1:4) 
    for(j in (i+1):5){ 
    plot(-1:1,-1:1, type = "n",xlab="",ylab="",xaxt="n",yaxt="n") 
    text(x=0,y=0,labels=paste(cors[i,j]),cex=2) 
    } 

# Plot heatmaps, here I use kde2d function for density estimation 
# image function for generating heatmaps 
library(MASS) 
for(i in 2:5) 
    for(j in 1:(i-1)){ 
    k <- kde2d(samples[,i],samples[,j]) 
    image(k,col=heat.colors(1000)) 
    } 

edit: Corretto indicizzazione sull'ultimo ciclo. pairwise plot

+0

Wow! E 'fantastico, grazie. Sono curioso di vedere se c'è anche una risposta ggplot2 ottima e breve. – Ali

+0

Scommetto che c'è, ho appena iniziato a familiarizzare con ggplot2, quindi ho deciso di andare alla vecchia maniera. ggplot2 utilizza la griglia grafica, quindi l'idea di layout non funziona lì. Ma questo potrebbe essere utile: http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_%28ggplot2%29/ –