Rで空間データをクラスタリングしますか?[閉まっている]


34

緯度と経度のデータポイントがたくさんあります。Rを使用して、距離に基づいてクラスター化します。

私はすでにこのページを見て、clustToolパッケージを試しました。しかし、clustToolのclust関数がデータポイント(lat、lon)を空間データと見なし、適切な式を使用してそれらの間の距離を計算するかどうかはわかりません。

つまり、空間データと順序データをどのように区別するかわかりません。マップ上の2つのポイント(空間)と2つの通常の数値の間の距離の計算は異なると思います。(そうではありませんか?)

また、クラスタリングで3番目のパラメーターを検討する場合はどうなりますか?

(lat、lon)ともう1つのパラメーターがある場合に言うように。

距離はどのように計算されますか?

clustToolのもう1つの問題は、GUIを念頭に置いて設計されていることです。ライブラリのGUIオーバーヘッドを必要としないのでスキップする方法はわかりません。

空間データのクラスター分析のために、Rにはどのようなオプションがありますか?



tnx whuber。質問があります。Rの空間クラスタリング用の特定のパッケージはありますか?私が理解している限り、距離は空間データに対して異なる方法で計算されるべきです。これは正しいです?
カプタン

Rを含め、私が遭遇したほぼすべての汎用クラスタリングパッケージClusterは、非類似度または距離行列を入力として受け入れます。これにより、距離を自分で計算できるのであれば、それらは完全に一般的であり、球上のクラスタリングに適用できます。これは簡単です。
whuber

私は非常に似たような問題に長い間直面していますが、良い解決策を見つけることができません。stack-exchangeの私の投稿を見てください。毎月の海面水温データ(lon、lat、sst)のセットがあります。そのような空間データのクラスターを見つける方法を見つけましたか?適切なRパッケージ/関数が見つかりません。事前に感謝パコ
パコメ

SatScanの使用を検討しましたか?

回答:


13

これは、距離ルール基づくポイントのクラスターの検索に基づいていdistmますが、geosphereパッケージの関数を使用しています:

library(sp)
library(rgdal)
library(geosphere)

# example data from the thread
x <- c(-1.482156, -1.482318, -1.482129, -1.482880, -1.485735, -1.485770, -1.485913, -1.484275, -1.485866)
y <- c(54.90083, 54.90078, 54.90077, 54.90011, 54.89936, 54.89935, 54.89935, 54.89879, 54.89902)

# convert data to a SpatialPointsDataFrame object
xy <- SpatialPointsDataFrame(
      matrix(c(x,y), ncol=2), data.frame(ID=seq(1:length(x))),
      proj4string=CRS("+proj=longlat +ellps=WGS84 +datum=WGS84"))

# use the distm function to generate a geodesic distance matrix in meters
mdist <- distm(xy)

# cluster all points using a hierarchical clustering approach
hc <- hclust(as.dist(mdist), method="complete")

# define the distance threshold, in this case 40 m
d=40

# define clusters based on a tree "height" cutoff "d" and add them to the SpDataFrame
xy$clust <- cutree(hc, h=d)

次のようなものが得られるはずです。

        coordinates ID clust
1 (-1.482156, 54.90083)  1     1
2 (-1.482318, 54.90078)  2     1
3 (-1.482129, 54.90077)  3     1
4  (-1.48288, 54.90011)  4     2
5 (-1.485735, 54.89936)  5     3
6  (-1.48577, 54.89935)  6     3
7 (-1.485913, 54.89935)  7     3
8 (-1.484275, 54.89879)  8     4
9 (-1.485866, 54.89902)  9     3

これらの次のステップは視覚化のためだけです:

library(dismo)
library(rgeos)

# expand the extent of plotting frame
xy@bbox[] <- as.matrix(extend(extent(xy),0.001))

# get the centroid coords for each cluster
cent <- matrix(ncol=2, nrow=max(xy$clust))
for (i in 1:max(xy$clust))
    # gCentroid from the rgeos package
    cent[i,] <- gCentroid(subset(xy, clust == i))@coords

# compute circles around the centroid coords using a 40m radius
# from the dismo package
ci <- circles(cent, d=d, lonlat=T)

# plot
plot(ci@polygons, axes=T)
plot(xy, col=rainbow(4)[factor(xy$clust)], add=T)

プロット


これには問題があります:距離行列があり、各アイテムの最大距離を見つけます:for (i in 1:186) { print(paste(i,min(distance[i,c(1:(i-1),(i+1):187)]))) } かかります4が、適用x <- cutree(hc, h=5)すると187個中101個のクラスターが得られます。論理的には1である必要があります。
Peter.k

こんにちは、ここであなたを助ける方法がわかりません。私は小さな例を作成しましたが、うまく動作します:x = as.dist(matrix(runif(100), ncol=10)); hc = hclust(x, method="complete"); cutree(hc, h=max(x))。期待どおり、これにより単一のクラスターが得られます。でクラスタリングモデルをプロットしてみplot(hc)て、最高値を確認してください。
sansan

11

Rの球体地球上の真の距離を計算するための関数があるため、それらを使用して、座標の代わりに距離行列を使用してクラスタリング関数を呼び出すことができます。しかし、名前や関連するパッケージを思い出すことはできません。手がかりについては、R空間タスクビューを参照してください。

他のオプションは、距離ユークリッドになるようにポイントを参照システムに変換することです。英国では、OSGridリファレンスシステムを使用できます。

 data = spTransform(data,CRS("+epsg:27700"))

パッケージ 'rgdal'(またはmaptools)からspTransformを使用します。データ用のグリッドシステムを検索し(関連するUTMゾーンがおそらく実行します)、メートル単位の距離を問題なく計算できます。

これは、データが小さな領域である場合にのみ有効です-グローバルデータがある場合、球面距離を実際に計算する必要があり、それはR空間タスクビューで説明したパッケージの1つ(または複数)のどこかにあります:

http://cran.r-project.org/web/views/Spatial.html

パッケージ "geosphere"が必要なようですが、空間タスクビューを読んでください!


7

Spatstatパッケージを見てみましょう。パッケージ全体は、空間ポイントパターン(sic)の分析専用です。CSIROのAdrian Baddeley教授によって書かれた優れた電子書籍があり、パッケージ全体の詳細なドキュメント、ハウツー、および例が含まれています。「ポイントパターンの距離方法」については、第19章をご覧ください。

とはいえ、spatstatで空間データと順序データを区別できるかどうかはわかりません。したがって、xとyの値が一貫しているものにポイントを再投影することをお勧めします。


tnx。それは素晴らしい電子ブックです。しかし、このSpatstatを使用してクラスタリングを実行する方法はわかりません。クラスタリングの特定の機能が見当たらないためです。少し説明してもらえますか?
カプタン

2
実際、公平を期すために、もう一度見て、DClusterパッケージを調べます。これは、Bivandによる疾患クラスターの分析に関するパッケージです。また、返事を待っていることをおaびします!
om_henners

6

たぶん、この答えは2年遅れですが、とにかく。

私の知る限り、空間クラスタリングには、少なくとも最初はクラスタリングが制約される定義済みの近傍が必要です。SpatialEpiパッケージのkulldorf関数では、集約された近傍に基づいた空間クラスタリングが可能です。

さらに、fpcパッケージから入手可能なDBSCAN統計が役立つ可能性があります。

同様の議論についてはこちらもご覧くださいhttps : //stats.stackexchange.com/questions/9739/clustering-spatial-data-in-r

また、CHAMAELEONなどの最近のクラスターアルゴリズムに関する興味深い論文については、http://www.cs.uiuc.edu/homes/hanj/pdf/gkdbk01.pdfをご覧ください。


Han氏の論文「データマイニングにおける空間クラスタリング手法:調査」は、hanj.cs.illinois.edu
pdf

5

れていないがR、パッケージ、geodaは、それは、空間クラスタリングの理論に貢献したラック・アンセリンによって書かれているように興味深いプログラムを検討するかもしれない、と私は(私がそれを探求してきたので、いくつかの時間となっているが)、それはいくつかのクラスタリングを可能と考えています。

spdepは素晴らしいRパッケージです。Tree Edge Removalによる空間 'K'luster分析のskater機能が含まれています。また、Local Moranやその他の空間統計を使用した空間的な自己相関やローカルクラスターの検出など、空間分析のための他の機能も提供します。次のように説明されています。

ポリゴンの隣接から、距離とテッセレーションによるポイントパターンから、これらのオブジェクトを要約し、最小スパニングツリーによる地域集約を含む空間データ分析での使用を許可するための、空間ウェイトマトリックスオブジェクトを作成する関数のコレクション。グローバルなMoran's I、APLE、Geary's C、Hubert / Mantelの一般的なクロス積統計、Empirical Bayes推定値、Assunção/ Reis Index、Getis / Ord Gおよび多色結合カウント統計、ローカルMoran's IおよびGetisを含む空間自己相関のテストのコレクション/ Ord G、サドルポイント近似、およびグローバルおよびローカルモランIの正確なテスト。空間同時自己回帰(SAR)の遅延モデルと誤差モデル、遅延モデルの影響測定、

少なくともポイントが空間的にランダムに分布しているかどうかをテストできます(おそらく、空間距離を考慮する場合に事前クラスタリングをテストするのに便利です)が、クラスタリングアルゴリズムに入力できる他の有用な測定値を生成することもできます。最後に、おそらく空間クラスタリングの問題を扱うhttps://stats.stackexchange.com/で役に立つ質問を見つけるかもしれません(ただし、理論的な観点からはもっと)。


この答えは、spatstatライブラリで利用可能な空間パターンまたはポイントパターンの自己相関を分析し、同じタイプの機能の多くを識別することです。これが興味深いところでは、クラスタリングの問題と完全に密接な関係があるわけではありません。私はすべて仮説検定と探索的分析に専念していますが、手元の質問にも直接対処する必要があります。spdepを使用したクラスタリングの方法は、k個の最近傍、偶発事象、または距離を使用した空間重み行列[Wij]に基づいています。
ジェフリーエヴァンス

2

RのleaderClusterパッケージを試してください。他の多くのクラスタリングアルゴリズムとは異なり、クラスターの数を指定する必要はありませんが、代わりにクラスターの主な調整パラメーターとしておおよその半径が必要です。


-2

ジオスフェアパッケージ距離関数または化石deg.dist関数を確認してください。度単位のデータがあり、クラスタリングを行う前にメートルまたはフィートに変換する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.