Come estrarre informazioni da una matrice scatterplot quando si hanno N grandi, dati discreti e molte variabili?


10

Sto giocando con il set di dati sul cancro al seno e ho creato un grafico a dispersione di tutti gli attributi per avere un'idea per quali di essi hanno il maggior effetto sulla previsione della classe malignant(blu) di benign(rosso).

Capisco che la riga rappresenta l'asse x e la colonna rappresenta l'asse y ma non riesco a vedere quali osservazioni posso fare sui dati o sugli attributi da questo diagramma a dispersione.

Sto cercando un aiuto per interpretare / fare osservazioni sui dati da questo grafico a dispersione o se dovrei usare qualche altra visualizzazione per visualizzare questi dati.

inserisci qui la descrizione dell'immagine

Codice R che ho usato

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)

Hai ragione: è difficile vedere molto in questo. Dal momento che tutte le variabili sembrano essere discrete, con un numero relativamente piccolo di categorie, è impossibile determinare quanti simboli sono ammucchiati per formare ogni simbolo chiaramente visibile. Ciò rende questa particolare immagine di scarso valore nel valutare qualsiasi cosa.
whuber

1
Questo è un po 'quello che pensavo. Ho provato a tracciare un grafico a barre in scatola ma questo non sarebbe utile per vedere quale attributo ha più effetto sulla classe, giusto ...? In cerca di aiuto su quale tipo di visualizzazione darebbe alcune informazioni significative.
Birdy,

2
Le dispersioni a due colori possono avere un buon senso se jitter (aggiungi rumore) le tue pile di punti.
ttnphns,

@ttnphns Non capisco cosa intendi per "jitter your pile of points"
birdy

1
jitter significa modificare la trama, in modo che i punti sovrastanti siano posti uno accanto all'altro per non oscurare la vista di un punto dati sull'altro. viene spesso utilizzato nelle funzioni di stampa R.
OFish

Risposte:


3

Non sono sicuro che questo possa esserti di aiuto, ma per l'EDA primaria mi piace molto il tabplotpacchetto. Ti dà una buona idea di quali possibili correlazioni potrebbero esserci all'interno dei tuoi dati.

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

trama non ordinata trama ordinata


come interpretare questo tabplot? Dal secondo tabplot sembra che le colonne 2, 3, 4 e 7 si comportino in modo molto simile tra loro?
Birdy,

È per un incarico / compiti di qualche tipo? In tal caso, si prega di fare riferimento ai metas per le regole, ecc. Su come ottenere aiuto con le ipotesi. La mia breve risposta: a) Non ho idea di cosa significhino tutti i diversi valori nelle colonne perché non ho studiato la descrizione del set di dati, b) se dovessi semplicemente descrivere ciò che vedo, direi: la classe 4 sembra essere associato a valori più alti di ogni colonna / variabile e viceversa.
OFish

6

Esistono numerosi problemi che rendono difficile o impossibile estrarre qualsiasi informazione utilizzabile dalla matrice scatterplot.

Hai troppe variabili visualizzate insieme. Quando ci sono molte variabili in una matrice scatterplot, ogni trama diventa troppo piccola per essere utile. La cosa da notare è che molti grafici sono duplicati, il che spreca spazio. Inoltre, anche se vuoi vedere ogni combinazione, non devi tracciarle tutte insieme. Si noti che è possibile suddividere una matrice scatterplot in blocchi più piccoli di quattro o cinque (un numero che è utilmente visualizzabile). Devi solo creare più grafici, uno per ogni blocco.

inserisci qui la descrizione dell'immagine

Dato che hai molti dati in punti discreti nello spazio , si accumulano uno sopra l'altro. Pertanto, non puoi vedere quanti punti ci sono in ogni posizione. Esistono diversi trucchi per aiutarti ad affrontare questo.

  1. .5
  2. Con così tanti dati, anche il jitter renderà difficile distinguere gli schemi. È possibile utilizzare colori altamente saturi, ma in gran parte trasparenti per tenere conto di ciò. Dove ci sono molti dati impilati uno sopra l'altro, il colore diventerà più scuro e dove c'è poca densità, il colore sarà più chiaro.
  3. Perché la trasparenza funzioni, avrai bisogno di simboli solidi per visualizzare i tuoi dati, mentre R usa i cerchi vuoti per impostazione predefinita.

Utilizzando queste strategie, ecco alcuni esempi di codice R e i grafici realizzati:

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

inserisci qui la descrizione dell'immagine

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

inserisci qui la descrizione dell'immagine

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

inserisci qui la descrizione dell'immagine


5

È difficile visualizzare più di 3-4 dimensioni in un singolo diagramma. Un'opzione sarebbe quella di utilizzare l'analisi dei componenti principali (PCA) per comprimere i dati e quindi visualizzarli nelle dimensioni principali. Esistono diversi pacchetti in R (così come la prcompfunzione base ) che rendono sintatticamente semplice ( vedi CRAN ); interpretare le trame, i caricamenti, è un'altra storia, ma penso che sia più facile di una matrice a dispersione ordinaria variabile a 10 variabili.

inserisci qui la descrizione dell'immagine


Grazie per il suggerimento su PCA. Non lo sapevo. Come interpreterei l'immagine che hai pubblicato? Significa che tutti gli attributi raggruppati in un gruppo sarebbero di qualche importanza?
Birdy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.