Lo que podría hacer es usar las ideas de sombreado residual de vcd aquí en combinación con una visualización de matriz dispersa como, por ejemplo, en la página 49 de este capítulo del libro . Imagine la última trama con sombreados residuales y obtendrá la idea.
La tabla de matriz / contigencia escasa normalmente contendría el número de ocurrencias de cada fármaco con cada efecto adverso. Sin embargo, con la idea del sombreado residual, puede configurar un modelo lineal de registro de línea de base (por ejemplo, un modelo de independencia o cualquier otra cosa que desee) y usar el esquema de color para averiguar qué combinación de drogas / efecto ocurre con más frecuencia / menos frecuencia de lo que el modelo predeciría. . Dado que tiene muchas observaciones, puede usar un umbral de color muy fino y obtener un mapa que se parece a la forma en que a menudo se visualizan las microarrays en el análisis de conglomerados, por ejemplo, aquí(pero probablemente con "gradientes" de color más fuertes). O podría construir los umbrales de tal manera que solo si las diferencias de observaciones a predicciones exceden el umbral de lo que se colorean y el resto permanecerá blanco. Cómo exactamente haría esto (por ejemplo, qué modelo usar o qué umbrales) depende de sus preguntas.
Editar
Así que así es como lo haría (dado que tendría suficiente RAM disponible ...)
- Cree una matriz dispersa de las dimensiones deseadas (nombres de drogas x efectos)
- Calcular los residuos del modelo loglineal de independencia
- Utilice un degradado de color en resolución fina desde el mínimo hasta el máximo del residual (por ejemplo, con un espacio de color hsv)
- Inserte el valor de color correspondiente de la magnitud residual en la posición correspondiente en la matriz dispersa
- Trace la matriz con un gráfico de imagen.
Luego terminas con algo como esto (por supuesto, tu imagen será mucho más grande y habrá un tamaño de píxel mucho más bajo, pero debes tener la idea. Con el uso inteligente del color puedes visualizar las asociaciones / salidas desde la independencia que eres más interesado en).
Un ejemplo rápido y sucio con una matriz de 100x100. Este es solo un ejemplo de juguete con residuos que van desde -10 a 10 como se puede ver en la leyenda. El blanco es cero, el azul es menos frecuente de lo esperado, el rojo es más frecuente de lo esperado. Debería poder tener la idea y tomarla desde allí. Editar: arreglé la configuración de la trama y usé colores no violentos.
Esto se hizo usando la image
función y cm.colors()
en la siguiente función:
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)
utilizando ideas de aquí http://www.phaget4.org/R/image_matrix.html . Si su matriz es tan grande que la image
función se vuelve lenta, use el useRaster=TRUE
argumento (es posible que también quiera usar objetos Matrix dispersos; tenga en cuenta que debe haber un image
método si desea usar el código de arriba, consulte el paquete sparseM).
Si hace esto, puede resultar útil realizar un ordenamiento inteligente de las filas / columnas, que puede calcular con el paquete arules (consulte las páginas 17 y 18 más o menos). En general, recomendaría las utilidades de arules para este tipo de datos y problemas (no solo visualización sino también para encontrar patrones). Allí también encontrará medidas de asociación entre los niveles que podría usar en lugar del sombreado residual.
También es posible que desee ver las tablas de las que desea investigar solo un par de efectos adversos más adelante.