¿Cómo extraer información de una matriz de diagrama de dispersión cuando tiene N grande, datos discretos y muchas variables?

10

Estoy jugando con el conjunto de datos de cáncer de mama y creé un diagrama de dispersión de todos los atributos para tener una idea de cuáles tienen el mayor efecto en la predicción de la clase malignant(azul) de benign(rojo).

Entiendo que la fila representa el eje xy la columna representa el eje y, pero no puedo ver qué observaciones puedo hacer sobre los datos o los atributos de este diagrama de dispersión.

Estoy buscando ayuda para interpretar / hacer observaciones sobre los datos de este diagrama de dispersión o si debería usar alguna otra visualización para visualizar estos datos.

ingrese la descripción de la imagen aquí

Código R que utilicé

link   <- "http://www.cs.iastate.edu/~cs573x/labs/lab1/breast-cancer-wisconsin.arff"
breast <- read.arff(link)
cols   <- character(nrow(breast))
cols[] <- "black"
cols[breast$class == 2] <- "red"
cols[breast$class == 4] <- "blue"
pairs(breast, col=cols)
pajarito
fuente
Tienes razón: es difícil ver mucho en esto. Dado que todas sus variables parecen ser discretas, con un número relativamente pequeño de categorías, es imposible determinar cuántos símbolos se apilan para formar cada símbolo claramente visible. Eso hace que esta imagen particular sea de poco valor para evaluar cualquier cosa.
whuber
1
Eso es algo de lo que pensé. Intenté trazar un diagrama de barras en caja, pero eso no sería útil para ver qué atributo tiene más efecto en la clase, ¿verdad ...? Buscando ayuda sobre qué tipo de visualización daría alguna información significativa.
birdy
2
Sus dispersiones de dos colores pueden tener mucho sentido si usted inquieta (agrega ruido) sus montones de puntos.
ttnphns
@ttnphns No entiendo lo que quieres decir con "agitar tus montones de puntos"
birdy
1
jitter significa editar su trama, de modo que los puntos superpuestos se coloquen uno al lado del otro para no oscurecer la vista de un punto de datos sobre el otro. A menudo se utiliza en las funciones de trazado de R.
OFish

Respuestas:

3

No estoy seguro de si esto es de alguna ayuda para usted, pero para la EDA primaria realmente me gusta el tabplotpaquete. Le da una buena idea de las posibles correlaciones que puede haber dentro de sus datos.

install.packages("tabplot")
tableplot(breast) # gives you the unsorted image below
tableplot(breast, sortCol="class") # gives you a sorted image according to class

trama desordenada parcela ordenada

OFish
fuente
¿Cómo se interpretaría esta trama? A partir de la segunda gráfica de tabulación, parece que las columnas 2, 3, 4 y 7 se comportan de manera muy similar.
birdy
¿Es esto para una tarea / tarea de algún tipo? Si es así, consulte las metas para conocer las reglas, etc., para obtener ayuda con las asignaciones. Mi breve respuesta: a) No tengo idea de lo que significan los diferentes valores en las columnas porque no he estudiado la descripción del conjunto de datos, b) si simplemente describiera lo que veo, diría: la clase 4 parece ser asociado con valores más altos de cada columna / variable y viceversa.
OFish
6

Hay una serie de problemas que hacen que sea difícil o imposible extraer información utilizable de su matriz de diagrama de dispersión.

Tiene demasiadas variables que se muestran juntas. Cuando tiene muchas variables en una matriz de diagrama de dispersión, cada diagrama se vuelve demasiado pequeño para ser útil. Lo que hay que notar es que muchas parcelas están duplicadas, lo que desperdicia espacio. Además, aunque desea ver cada combinación, no tiene que trazarlas todas juntas. Tenga en cuenta que puede dividir una matriz de diagrama de dispersión en bloques más pequeños de cuatro o cinco (un número que es útil para visualizar). Solo necesita hacer varias parcelas, una para cada bloque.

ingrese la descripción de la imagen aquí

Dado que tiene una gran cantidad de datos en puntos discretos en el espacio , terminan apilándose uno encima del otro. Por lo tanto, no puede ver cuántos puntos hay en cada ubicación. Hay varios trucos para ayudarte a lidiar con esto.

  1. .5
  2. Con tanta información, incluso las fluctuaciones harán que los patrones sean difíciles de discernir. Puede usar colores altamente saturados, pero en gran medida transparentes para dar cuenta de esto. Donde hay muchos datos apilados uno encima del otro, el color se volverá más oscuro y donde hay poca densidad, el color será más claro.
  3. Para que la transparencia funcione, necesitará símbolos sólidos para mostrar sus datos, mientras que R usa círculos huecos por defecto.

Usando estas estrategias, aquí hay un ejemplo de código R y las parcelas realizadas:

# 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)

ingrese la descripción de la imagen aquí

windows()  # the 2nd 5 variables
  pairs(jbreast[,6:10], col=cols2, pch=16)

ingrese la descripción de la imagen aquí

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) }
    }
  }

ingrese la descripción de la imagen aquí

gung - Restablece a Monica
fuente
5

Es difícil visualizar más de 3-4 dimensiones en una sola parcela. Una opción sería utilizar el análisis de componentes principales (PCA) para comprimir los datos y luego visualizarlos en las dimensiones principales. Hay varios paquetes diferentes en R (así como la prcompfunción base ) que hacen que esto sea sintácticamente fácil ( vea CRAN ); interpretar las tramas, las cargas, es otra historia, pero creo que es más fácil que una matriz de diagrama de dispersión ordinal de 10 variables.

ingrese la descripción de la imagen aquí

Pececillo
fuente
Gracias por su sugerencia sobre PCA. No lo sabía. ¿Cómo interpretaría la imagen que publicó? ¿Significa que todos los atributos agrupados en un grupo serían de alguna importancia?
birdy