59

私が書いている記事で距離行列を提示したいと思います、そして私はそれのための良い視覚化を探しています。

これまでのところ、バルーンプロット(ここで使用しましたが、この場合は機能しないと思います)、ヒートマップ(ここに良い例がありますが、テーブルに数値を表示することはできません)に出くわしました。正しい私が間違っている場合は、テーブルの半分を色で、半分を数字で表示するとかっこいいでしょう)最後に相関楕円プロット(ここにいくつかのコードと例があります-図形を使用するのはかっこいいですが、使用方法がわかりませんここ)。

さまざまなクラスタリング方法もありますが、それらはデータを集約します(これは私が望むものではありません)が、私が望むのはすべてのデータを提示することです。

データ例:

nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv")
dist(nba[1:20, -1], )

私はアイデアを受け入れています。

4

7 に答える 7

25

力指向のグラフ描画アルゴリズムを使用して、距離行列を視覚化することもできます。

nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv")
dist_m <- as.matrix(dist(nba[1:20, -1]))
dist_mi <- 1/dist_m # one over, as qgraph takes similarity matrices as input
library(qgraph)
jpeg('example_forcedraw.jpg', width=1000, height=1000, unit='px')
qgraph(dist_mi, layout='spring', vsize=3)
dev.off()

于 2016-06-15T10:34:38.733 に答える
23

ボロノイ図(ボロノイ分解のプロット)は、距離行列(DM)を視覚的に表す1つの方法です。

また、Rを使用して作成およびプロットするのも簡単です。両方を1行のRコードで実行できます。

計算幾何学のこの側面に精通していない場合は、2つの関係(VDとDM)は簡単ですが、簡単な要約が役立つ場合があります。

距離行列(つまり、ある点と1つおきの点の間の距離を示す2D行列)は、kNN計算中の中間出力です(つまり、k最近傍法、に基づいて特定のデータ点の値を予測する機械学習アルゴリズム)。 'k'最近傍の加重平均値、距離単位。ここで、'k'は整数で、通常は3から5の間です。)

kNNは概念的に非常に単純です。トレーニングセットの各データポイントは、本質的にn次元空間の「位置」であるため、次のステップは、距離メトリックを使用して各ポイントと他のすべてのポイントとの間の距離を計算することです(例: 、ユークリッド、マンハッタンなど)。トレーニングステップ(つまり、距離行列の解釈)は簡単ですが、新しいデータポイントの値を予測するためにそれを使用することは、データ検索によって実際に妨げられます-数千または数百万の中から最も近い3または4ポイントを見つけますn次元空間に散在しています。

この問題に対処するために、2つのデータ構造が一般的に使用されます。kdツリーとVoroni分解(別名「ディリクレテッセレーション」)です。

ボロノイ分解(VD)は、距離行列によって一意に決定されます。つまり、1:1のマップがあります。したがって、実際には距離行列の視覚的表現ですが、これも目的ではありません。主な目的は、kNNベースの予測に使用されるデータを効率的に保存することです。

それを超えて、このように距離行列を表すのが良い考えであるかどうかは、おそらく何よりもあなたの聴衆に依存します。ほとんどの場合、VDと先行距離行列の関係は直感的ではありません。しかし、それは間違いではありません。統計トレーニングを受けていない人が、2つの母集団が同様の確率分布を持っているかどうかを知りたくて、QQプロットを示した場合、彼らはおそらくあなたが彼らの質問に関与していないと思うでしょう。したがって、自分が何を見ているのかを知っている人にとって、VDはDMのコンパクトで完全かつ正確な表現です。

では、どうやって作るのですか?

ボロノイデコンプは、トレーニングセット内からポイントのサブセットを(通常はランダムに)選択することによって構築されます(この数は状況によって異なりますが、1,000,000ポイントの場合、100がこのサブセットの妥当な数です)。これらの100個のデータポイントはボロノイセンター(「VC」)です。

ボロノイデコンプの背後にある基本的な考え方は、1,000,000のデータポイントをふるいにかけて最近傍を見つけるのではなく、これらの100を調べるだけでよいということです。次に、最近傍を見つけたら、実際の最近傍を検索します。そのボロノイセル内のポイントのみに制限されます。次に、トレーニングセット内の各データポイントについて、最も近いVCを計算します。最後に、各VCとそれに関連するポイントについて、凸包を計算します。概念的には、VCから最も遠いVCに割り当てられたポイントによって形成される外側の境界だけです。ボロノイ中心の周りのこの凸包は、「ボロノイセル」を形成します。完全なVDは、トレーニングセット内の各VCにこれらの3つのステップを適用した結果です。これにより、表面の完全なテッセレーションが得られます(下の図を参照)。

RでVDを計算するには、tripackパッケージを使用します。重要な関数は「voronoi.mosaic」であり、x座標とy座標を別々に渡すだけです(DMではなく生データ) 。次に、voronoi.mosaicを「plot」に渡すだけです。

library(tripack)
plot(voronoi.mosaic(runif(100), runif(100), duplicate="remove"))

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

于 2010-06-21T08:41:32.087 に答える
21

タル、これはヒートマップ上でテキストをオーバーラップする簡単な方法です。これは、後者がプロットをオフセットするのimageではなく、依存しheatmapているため、テキストを正しい位置に配置することがより困難になることに注意してください。

正直なところ、このグラフは情報が多すぎて読みづらいと思います...特定の値だけを書きたいと思うかもしれません。

また、他のより迅速なオプションは、グラフをpdfとして保存し、それをInkscape(または同様のソフトウェア)にインポートして、必要に応じて手動でテキストを追加することです。

お役に立てれば

nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv")

dst <- dist(nba[1:20, -1],)
dst <- data.matrix(dst)

dim <- ncol(dst)

image(1:dim, 1:dim, dst, axes = FALSE, xlab="", ylab="")

axis(1, 1:dim, nba[1:20,1], cex.axis = 0.5, las=3)
axis(2, 1:dim, nba[1:20,1], cex.axis = 0.5, las=1)

text(expand.grid(1:dim, 1:dim), sprintf("%0.1f", dst), cex=0.6)

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

于 2010-06-21T06:48:33.090 に答える
18

行列の2次元投影(多次元尺度構成法)を検討することをお勧めします。これは、Rでそれを行う方法へのリンクです。

そうでなければ、ヒートマップで正しい方向に進んでいると思います。あなたはそれほど困難なくあなたの数を加えることができます。たとえば、オフラーンRの構築:

library(ggplot2)
library(plyr)
library(arm)
library(reshape2)
nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv")
nba$Name <- with(nba, reorder(Name, PTS))
nba.m <- melt(nba)
nba.m <- ddply(nba.m, .(variable), transform,
rescale = rescale(value))
(p <- ggplot(nba.m, aes(variable, Name)) + geom_tile(aes(fill = rescale),
colour = "white") + scale_fill_gradient(low = "white",
high = "steelblue")+geom_text(aes(label=round(rescale,1))))

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

于 2010-06-21T03:27:07.923 に答える
9
  1. 階層的クラスター分析に基づく樹状図が役立つ場合があります:http: //www.statmethods.net/advstats/cluster.html

  2. Rでの2次元または3次元多次元尺度構成法分析:http: //www.statmethods.net/advstats/mds.html

  3. 3次元以上に進みたい場合は、ggobi / rggobiを探索することをお勧めします: http ://www.ggobi.org/rggobi/

于 2010-06-21T03:32:59.800 に答える
7

Borcardらによる本「NumericalEcology」の中で。2011彼らは*coldiss.rと呼ばれる関数を使用しました*あなたはここでそれを見つけることができます:http: //ichthyology.usm.edu/courses/multivariate/coldiss.R

距離を色分けし、非類似度でレコードを並べ替えます。

もう1つの優れたパッケージは、セリエーションパッケージです。

参照:Borcard、D.、Gillet、F.&Legendre、P.(2011)Numerical Ecology withR.Springer。

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

于 2012-09-18T14:07:23.600 に答える
4

多次元尺度構成法を使用したソリューション

data = read.csv("http://datasets.flowingdata.com/ppg2008.csv", sep = ",")
dst = tcrossprod(as.matrix(data[,-1]))
dst = matrix(rep(diag(dst), 50L), ncol = 50L, byrow = TRUE) + 
  matrix(rep(diag(dst), 50L), ncol = 50L, byrow = FALSE) - 2*dst

library(MASS)
mds = isoMDS(dst)
#remove {type = "n"} to see dots
plot(mds$points, type = "n", pch = 20, cex = 3, col = adjustcolor("black", alpha = 0.3), xlab = "X", ylab = "Y") 
text(mds$points, labels = rownames(data), cex = 0.75)

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

于 2016-07-05T13:28:13.403 に答える