Quello che potresti fare è usare le idee di ombreggiatura residua di vcd qui in combinazione con la visualizzazione a matrice sparsa come ad esempio a pagina 49 di questo capitolo del libro . Immagina quest'ultima trama con sfumature residue e ottieni l'idea.
La tabella delle matrici / contigenze sparse normalmente contiene il numero di occorrenze di ciascun farmaco con ciascun effetto avverso. Con l'idea dell'ombreggiatura residua, tuttavia, è possibile impostare un modello lineare di registro di base (ad esempio un modello di indipendenza o qualsiasi altra cosa ti piace) e utilizzare lo schema di colori per scoprire quale combinazione di farmaci / effetti si verifica più spesso / meno spesso di quanto il modello prevederebbe . Dato che hai molte osservazioni, potresti usare un limite di colore molto fine e ottenere una mappa che assomiglia a come vengono spesso visualizzati i microarrays nell'analisi dei cluster, ad esempio qui(ma probabilmente con "gradienti" di colore più forti). Oppure potresti costruire le soglie in modo tale che solo se le differenze delle osservazioni rispetto alle previsioni superano la soglia di quella che viene colorata e il resto rimarrà bianco. Come esattamente faresti (ad es. Quale modello usare o quali soglie) dipende dalle tue domande.
Modifica
Quindi ecco come lo farei (dato che avrei abbastanza RAM disponibile ...)
- Crea una matrice sparsa delle dimensioni desiderate (nomi di farmaci x effetti)
- Calcola i residui dal modello loglinear di indipendenza
- Usa una sfumatura di colore a risoluzione fine dal minimo al massimo del residuo (ad es. Con uno spazio cromatico hsv)
- Inserire il valore di colore corrispondente della grandezza residua nella posizione corrispondente nella matrice sparsa
- Traccia la matrice con una trama dell'immagine.
Quindi si finisce con qualcosa del genere (ovviamente la tua immagine sarà molto più grande e ci sarà una dimensione dei pixel molto più bassa ma dovresti avere l'idea. Con un uso intelligente del colore puoi visualizzare le associazioni / le partenze dall'indipendenza che sei più interessato a).
Un esempio veloce e sporco con una matrice 100x100. Questo è solo un esempio di giocattolo con residui che vanno da -10 a 10, come puoi vedere nella legenda. Il bianco è zero, il blu è meno frequente del previsto, il rosso è più frequente del previsto. Dovresti essere in grado di ottenere l'idea e prenderla da lì. Modifica: ho corretto l'impostazione della trama e usato colori non violenti.
Ciò è stato fatto utilizzando la image
funzione e cm.colors()
nella seguente funzione:
ImagePlot <- function(x, ...){
min <- min(x)
max <- max(x)
layout(matrix(data=c(1,2), nrow=1, ncol=2), widths=c(1,7), heights=c(1,1))
ColorLevels <- cm.colors(255)
# Color Scale
par(mar = c(1,2.2,1,1))
image(1, seq(min,max,length=255),
matrix(data=seq(min,max,length=255), ncol=length(ColorLevels),nrow=1),
col=ColorLevels,
xlab="",ylab="",
xaxt="n")
# Data Map
par(mar = c(0.5,1,1,1))
image(1:dim(x)[1], 1:dim(x)[2], t(x), col=ColorLevels, xlab="",
ylab="", axes=FALSE, zlim=c(min,max))
layout(1)
}
#100x100 example
x <- c(seq(-10,10,length=255),rep(0,600))
mat <- matrix(sample(x,10000,replace=TRUE),nrow=100,ncol=100)
ImagePlot(mat)
usando idee da qui http://www.phaget4.org/R/image_matrix.html . Se la tua matrice è così grande che la image
funzione diventa lenta, usa l' useRaster=TRUE
argomento (potresti anche voler usare oggetti Matrix sparsi; nota che dovrebbe esserci un image
metodo se vuoi usare il codice dall'alto, vedi il pacchetto sparseM).
Se lo fai, potrebbe essere utile un ordinamento intelligente delle righe / colonne, che puoi calcolare con il pacchetto arules (controlla le pagine 17 e 18 o giù di lì). Consiglierei generalmente le utility arules per questo tipo di dati e problemi (non solo visualizzazione ma anche per trovare schemi). Lì troverai anche misure di associazione tra i livelli che potresti usare al posto dell'ombreggiatura residua.
Potresti anche voler esaminare i grafici di tabella che desideri esaminare solo un paio di effetti avversi in seguito.