大きな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
それは私が思っていたようなものです。私は箱入りの棒グラフをプロットしてみましたが、それはどの属性がクラスに最も影響を与えるかを知るのに役立ちません...?どのタイプの視覚化が何らかの意味のある情報を与えるかについてのヘルプを探します。
バーディー14

2
ポイントの山をジッターさせる(ノイズを追加する)場合、2色のスキャッターは適切に機能します。
ttnphns 2014

@ttnphns「ポイントの山を
揺らす

1
ジッタは、プロットを編集することを意味します。これにより、あるデータポイントの表示が他のデータポイントを覆い隠さないように、重なっているポイントが隣り合って配置されます。Rプロット関数でよく使用されます。
OFish 2014

回答:


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番目のタブプロットから、列2、3、4、7は互いに非常によく似ているように見えますか?
バーディー

これは、何かの宿題や宿題のためですか?もしそうなら、助言を得るためのルールなどのメタを参照してください。私の簡単な回答:a)データセットの説明を調べていないので、列内のすべての異なる値が何を意味するのかわかりません、b)見たものを単に説明するだけなら、クラス4は各列/変数の高い値に関連付けられ、その逆も同様です。
OFish 2014

6

散布図行列から使用可能な情報を抽出することを困難または不可能にする多くの問題があります。

一緒に表示されている変数が多すぎます。 散布図行列に多くの変数がある場合、各プロットは小さすぎて役に立たなくなります。注目すべきことは、多くのプロットが複製され、スペースを浪費していることです。また、すべての組み合わせを確認する必要がありますが、それらをすべて一緒にプロットする必要はありません。散布図行列を4または5の小さなブロックに分割できることに注意してください(便利に視覚化できる数)。ブロックごとに1つずつ、複数のプロットを作成する必要があります。

ここに画像の説明を入力してください

空間内の離散点に多くのデータがあるため、それらは互いに重なり合ってしまいます。したがって、各場所にあるポイントの数はわかりません。これに対処するのに役立ついくつかのトリックがあります。

  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

1つのプロットで3〜4を超える次元を視覚化することは困難です。1つのオプションは、主成分分析(PCA)を使用してデータを圧縮し、メインディメンションで視覚化することです。Rにはいくつかの異なるパッケージ(および基本prcomp関数)があり、これを構文的に簡単にします(CRANを参照)。プロット、ローディングの解釈は別の話ですが、10変数の順序散布図行列よりも簡単だと思います。

ここに画像の説明を入力してください


PCAに関する提案をありがとう。私はそれについて知りませんでした。あなたが投稿した画像をどのように解釈しますか?グループにまとめられているすべての属性が重要であることを意味しますか?
バーディー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.