Wie extrahiere ich Informationen aus einer Streudiagramm-Matrix, wenn Sie große N, diskrete Daten und viele Variablen haben?


10

Ich spiele mit dem Brustkrebs-Datensatz herum und habe ein Streudiagramm aller Attribute erstellt, um eine Vorstellung davon zu bekommen, welche die meisten Auswirkungen auf die Vorhersage der Klasse malignant(blau) von benign(rot) haben.

Ich verstehe, dass die Zeile die x-Achse und die Spalte die y-Achse darstellt, aber ich kann nicht sehen, welche Beobachtungen ich über die Daten oder Attribute aus diesem Streudiagramm machen kann.

Ich suche Hilfe bei der Interpretation / Beobachtung der Daten aus diesem Streudiagramm oder wenn ich eine andere Visualisierung verwenden sollte, um diese Daten zu visualisieren.

Geben Sie hier die Bildbeschreibung ein

R-Code, den ich verwendet habe

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)

Sie haben Recht: Es ist schwer, viel darin zu sehen. Da alle Ihre Variablen mit einer relativ geringen Anzahl von Kategorien diskret zu sein scheinen, ist es unmöglich zu bestimmen, wie viele Symbole gestapelt sind, um jedes deutlich sichtbare Symbol zu bilden. Das macht dieses besondere Bild für die Beurteilung von irgendetwas von geringem Wert.
whuber

1
Das habe ich mir gedacht. Ich habe versucht, ein Box-Barplot zu zeichnen, aber das wäre nicht hilfreich, um zu sehen, welches Attribut die größte Auswirkung auf die Klasse hat, oder ...? Wenn Sie Hilfe bei der Art der Visualisierung suchen, erhalten Sie aussagekräftige Informationen.
Birdy

2
Ihre zweifarbigen Streuungen können durchaus Sinn machen, wenn Sie Ihre Punktehaufen zittern (Rauschen hinzufügen).
ttnphns

@ttnphns Ich verstehe nicht, was Sie mit "Jitter Ihre Stapel von Punkten"
meinen

1
Jitter bedeutet, dass Sie Ihr Diagramm so bearbeiten, dass darüber liegende Punkte nebeneinander platziert werden, um die Ansicht eines Datenpunkts über dem anderen nicht zu verdecken. Es wird häufig in R-Plotfunktionen verwendet.
OFish

Antworten:


3

Ich bin mir nicht sicher, ob dies für Sie hilfreich ist, aber für die primäre EDA gefällt mir das tabplotPaket wirklich . Gibt Ihnen einen guten Überblick über mögliche Korrelationen in Ihren Daten.

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

ungeordnete Handlung bestellte Handlung


Wie würde man dieses Tabplot interpretieren? Aus dem zweiten Tabplot geht hervor, dass sich die Spalten 2, 3, 4 und 7 sehr ähnlich verhalten.
Birdy

Ist das für eine Aufgabe / Hausaufgabe? Wenn ja, lesen Sie bitte die Metas für die Regeln usw., um Hilfe bei Aufgaben zu erhalten. Meine kurze Antwort: a) Ich habe keine Ahnung, was all die verschiedenen Werte in den Spalten bedeuten, weil ich die Datensatzbeschreibung nicht studiert habe. B) Wenn ich nur beschreiben würde, was ich sehe, würde ich sagen: Klasse 4 scheint zu sein verbunden mit höheren Werten jeder Spalte / Variablen und umgekehrt.
OFish

6

Es gibt eine Reihe von Problemen, die es schwierig oder unmöglich machen, verwendbare Informationen aus Ihrer Streudiagramm-Matrix zu extrahieren.

Sie haben zu viele Variablen zusammen angezeigt. Wenn eine Streudiagrammmatrix viele Variablen enthält, wird jedes Diagramm zu klein, um nützlich zu sein. Zu beachten ist, dass viele Diagramme dupliziert werden, was Platz verschwendet. Auch wenn Sie jede Kombination sehen möchten, müssen Sie sie nicht alle zusammen zeichnen. Beachten Sie, dass Sie eine Streudiagramm-Matrix in kleinere Blöcke von vier oder fünf aufteilen können (eine Zahl, die sinnvollerweise sichtbar ist). Sie müssen nur mehrere Diagramme erstellen, eines für jeden Block.

Geben Sie hier die Bildbeschreibung ein

Da Sie viele Daten an diskreten Punkten im Raum haben , werden diese übereinander gestapelt. Sie können also nicht sehen, wie viele Punkte sich an jedem Ort befinden. Es gibt verschiedene Tricks, die Ihnen dabei helfen.

  1. .5
  2. Bei so vielen Daten ist es selbst bei Jitter schwierig, die Muster zu erkennen. Sie können Farben verwenden, die stark gesättigt, aber weitgehend transparent sind , um dies zu berücksichtigen. Wenn viele Daten übereinander gestapelt sind, wird die Farbe dunkler, und wenn die Dichte gering ist, ist die Farbe heller.
  3. Damit die Transparenz funktioniert, benötigen Sie durchgezogene Symbole , um Ihre Daten anzuzeigen, während R standardmäßig hohle Kreise verwendet.

Mit diesen Strategien finden Sie hier ein Beispiel für einen R-Code und die erstellten Diagramme:

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

Geben Sie hier die Bildbeschreibung ein

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

Geben Sie hier die Bildbeschreibung ein

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

Geben Sie hier die Bildbeschreibung ein


5

Es ist schwierig, mehr als 3-4 Dimensionen in einem einzigen Diagramm zu visualisieren. Eine Möglichkeit wäre die Verwendung der Hauptkomponentenanalyse (PCA), um die Daten zu komprimieren und sie dann in den Hauptdimensionen zu visualisieren. Es gibt verschiedene Pakete in R (sowie die prcompBasisfunktion), die dies syntaktisch einfach machen ( siehe CRAN ); Das Interpretieren der Diagramme und Ladungen ist eine andere Geschichte, aber ich denke einfacher als eine 10-variable ordinale Streudiagramm-Matrix.

Geben Sie hier die Bildbeschreibung ein


Vielen Dank für den Vorschlag zu PCA. Ich habe nichts davon gewusst. Wie würde ich das von Ihnen gepostete Bild interpretieren? Bedeutet dies, dass alle Attribute, die in einer Gruppe zusammengefasst sind, von Bedeutung sind?
Birdy
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.