Как извлечь информацию из матрицы графика рассеяния, когда у вас большое N, дискретные данные и много переменных?


10

Я играю с набором данных о раке молочной железы и создал диаграмму рассеяния всех атрибутов, чтобы понять, какие из них оказывают наибольшее влияние на предсказание класса malignant(синий) benign(красный).

Я понимаю, что строка представляет ось x, а столбец представляет ось y, но я не вижу, какие наблюдения я могу сделать относительно данных или атрибутов из этой диаграммы рассеяния.

Я ищу некоторую помощь для интерпретации / наблюдения за данными на этой диаграмме рассеяния или для использования этих визуализаций.

введите описание изображения здесь

Код R я использовал

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)

Вы правы: в этом трудно многое увидеть. Поскольку все ваши переменные кажутся дискретными, с относительно небольшим количеством категорий, невозможно определить, сколько символов накапливается, образуя каждый отчетливо видимый символ. Это делает этот конкретный образ малозначимым при оценке чего-либо.
whuber

1
Это то, о чем я думал. Я попытался нанести столбчатую диаграмму в штучной упаковке, но это было бы бесполезно, если бы выяснить, какой атрибут больше всего влияет на класс? Нужна помощь в том, какой тип визуализации даст некоторую значимую информацию.
птичка

2
Ваши двухцветные рассеяния могут иметь смысл, если вы дрожите (добавляете шум) своими кучами точек.
ttnphns

@ttnphns Я не понимаю, что ты имеешь в виду под "дрожать кучей очков"
птичка

1
джиттер означает редактирование вашего графика, так что расположенные выше точки располагаются рядом друг с другом, чтобы не заслонять вид одной точки данных над другой. это часто используется в функциях построения графиков R.
OFish

Ответы:


3

Я не уверен, поможет ли это вам, но для первичной EDA мне действительно нравится tabplotпакет. Дает вам хорошее представление о возможных корреляциях между вашими данными.

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

неупорядоченный участок упорядоченный участок


как можно интерпретировать эту таблицу? Из второй таблицы видно, что столбцы 2, 3, 4 и 7 ведут себя очень похоже друг на друга?
птичка

Это что-то для домашнего задания? Если так, пожалуйста, обратитесь к метасам для правил и т. Д. Для получения помощи с заданиями. Мой краткий ответ: а) я понятия не имею, что означают все различные значения в столбцах, потому что я не изучал описание набора данных, б) если бы я просто описал то, что вижу, я бы сказал: класс 4, кажется, связаны с более высокими значениями каждого столбца / переменной и наоборот.
OFish

6

Существует ряд проблем, которые затрудняют или делают невозможным извлечение полезной информации из матрицы рассеяния.

У вас слишком много переменных отображаются вместе. Когда в матрице диаграммы рассеяния имеется много переменных, каждый график становится слишком маленьким, чтобы быть полезным. Стоит заметить, что многие участки дублируются, что приводит к пустой трате места. Кроме того, хотя вы хотите видеть каждую комбинацию, вам не нужно наносить их все вместе. Обратите внимание, что вы можете разбить матрицу диаграммы рассеяния на более мелкие блоки из четырех или пяти (число, которое полезно визуализировать). Вам просто нужно сделать несколько участков, по одному на каждый блок.

введите описание изображения здесь

Поскольку у вас есть много данных в отдельных точках пространства , они в конечном итоге накладываются друг на друга. Таким образом, вы не можете увидеть, сколько точек в каждом месте. Есть несколько приемов, которые помогут вам справиться с этим.

  1. Первое - это дрожать . Дрожание означает добавление небольшого количества шума к значениям в вашем наборе данных. Шум берется из равномерного распределения с центром на вашем значении плюс или минус небольшое количество. Существуют алгоритмы определения оптимального количества, но, поскольку ваши данные поступают целыми единицами от одного до десяти, кажется хорошим выбором. .5
  2. При таком большом количестве данных даже дрожание затруднит различение скороговорок. Вы можете использовать цвета, которые очень насыщенные, но в основном прозрачные, чтобы учесть это. Там, где много данных складывается друг на друга, цвет становится темнее, а там, где плотность невелика, цвет будет светлее.
  3. Чтобы прозрачность работала, вам понадобятся сплошные символы для отображения ваших данных, тогда как R по умолчанию использует пустые кружки.

Используя эти стратегии, вот несколько примеров кода R и построенных графиков:

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

введите описание изображения здесь


5

Трудно визуализировать более 3-4 измерений в одном сюжете. Одним из вариантов будет использование анализа основных компонентов (PCA) для сжатия данных и их визуализации в основных измерениях. Существует несколько различных пакетов в R (а также базовая prcompфункция), которые делают это синтаксически простым ( см. CRAN ); Интерпретация графиков, загрузок - это другая история, но я думаю, что она проще, чем матрица рассеяния с 10 переменными.

введите описание изображения здесь


Спасибо за предложение о PCA. Я не знал об этом. Как бы я интерпретировал изображение, которое вы разместили? Означает ли это, что все атрибуты, которые объединены в группу, будут иметь какое-то значение?
птичка
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.