当您有大量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
这就是我的想法。我试图绘制一个盒装的barplot,但这对于查看哪个属性对类的影响最大不会有用……?寻找有关哪种类型的可视化的帮助会提供一些有意义的信息。
2014年

2
如果您抖动(添加噪声)成堆的点,则两种颜色的散射会很有意义。
ttnphns 2014年

@ttnphns我不明白你所说的“抖动您的点堆”的意思
小鸟

1
抖动意味着编辑图,以便将重叠点放置在彼此旁边,以免遮挡一个数据点在另一数据点上的视线。通常在R绘图函数中使用。
OFish

Answers:


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列的行为非常相似吗?
2014年

这是用于某种形式的布置/作业吗?如果是这样,请参阅metas以获取有关分配帮助的规则等。我的简短答复:a)我不知道列中所有不同值的含义,因为我没有研究数据集描述; b)如果我只是为了描述自己看到的内容,我会说:第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的建议。我不知道。我将如何解释您发布的图片?这是否意味着将所有聚集在一起的属性具有一定的重要性?
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.