Hay una serie de problemas que dificultan o impiden extraer información útil de la matriz de dispersión.
Tienes demasiadas variables mostradas juntas. Cuando hay muchas variables en una matriz de dispersión, cada gráfico se vuelve demasiado pequeño para ser útil. Hay que tener en cuenta que muchos gráficos están duplicados, lo que desperdicia espacio. Además, aunque quiera ver todas las combinaciones, no tiene por qué representarlas todas juntas. Observe que puede dividir una matriz de dispersión en bloques más pequeños de cuatro o cinco (un número que se puede visualizar de forma útil). Sólo tienes que hacer varios gráficos, uno para cada bloque.
Desde tienes muchos datos en puntos discretos del espacio acaban apilándose unas sobre otras. Así, no puedes ver cuántos puntos hay en cada lugar. Existen varios trucos para solucionar este problema.
- La primera es fluctuación de fase . Jittering significa añadir una pequeña cantidad de ruido a los valores del conjunto de datos. El ruido se toma de una distribución uniforme centrada en su valor más o menos una pequeña cantidad. Existen algoritmos para determinar una cantidad óptima, pero como sus datos vienen en unidades enteras de uno a diez, $.5$ parece una buena elección.
- Con tantos datos, incluso las fluctuaciones harán que los patrones sean difíciles de discernir. Puedes utilizar colores muy saturados, pero muy transparentes para tenerlo en cuenta. Donde haya muchos datos apilados, el color será más oscuro, y donde haya poca densidad, el color será más claro.
- Para que la transparencia funcione, necesitarás símbolos sólidos para mostrar sus datos, mientras que R utiliza círculos huecos por defecto.
Utilizando estas estrategias, he aquí algunos ejemplos de código R y los gráficos realizados:
# the alpha argument in rgb() lets you set the transparency
cols2 = c(rgb(red=255, green=0, blue=0, alpha=50, maxColorValue=255),
rgb(red=0, green=0, blue=255, alpha=50, maxColorValue=255) )
cols2 = ifelse(breast$class==2, cols2[1], cols2[2])
# here we jitter the data
set.seed(6141) # this makes the example exactly reproducible
jbreast = apply(breast[,1:9], 2, FUN=function(x){ jitter(x, amount=.5) })
jbreast = cbind(jbreast, class=breast[,10]) # the class variable is not jittered
windows() # the 1st 5 variables, using pch=16
pairs(jbreast[,1:5], col=cols2, pch=16)
windows() # the 2nd 5 variables
pairs(jbreast[,6:10], col=cols2, pch=16)
windows() # to match up the 1st & 2nd sets requires more coding
layout(matrix(1:25, nrow=5, byrow=T))
par(mar=c(.5,.5,.5,.5), oma=c(2,2,2,2))
for(i in 1:5){
for(j in 6:10){
plot(jbreast[,j], jbreast[,i], col=cols2, pch=16,
axes=F, main="", xlab="", ylab="")
box()
if(j==6 ){ mtext(colnames(jbreast)[i], side=2, cex=.7, line=1) }
if(i==5 ){ mtext(colnames(jbreast)[j], side=1, cex=.7, line=1) }
if(j==10){ axis(side=4, seq(2,10,2), cex.axis=.8) }
if(i==1 ){ axis(side=3, seq(2,10,2), cex.axis=.8) }
}
}