R에서 공간 데이터 클러스터링? [닫은]


34

위도와 경도가있는 많은 데이터 포인트가 있습니다. R을 사용하여 거리에 따라 클러스터를 만들고 싶습니다.

나는 이미 한 번 봐 찍은 페이지와 노력 clustTool의 패키지를. 그러나 clustTool의 clust 함수가 데이터 포인트 (lat, lon)를 공간 데이터로 간주하고 적절한 수식을 사용하여 거리를 계산하는지 확실하지 않습니다.

공간 데이터와 서수 데이터를 어떻게 구분하는지 알 수 없습니다. 나는지도상의 두 지점 (공간)과 두 개의 일반 숫자 사이의 거리 계산이 다르다고 생각합니다. (아니요?)

클러스터링에서 세 번째 매개 변수를 고려하려면 어떻게됩니까?

내가 (lat, lon)과 하나의 다른 매개 변수를 가지고 있다면 말하십시오.

거리는 어떻게 계산됩니까?

clustTool의 또 다른 문제는 GUI를 염두에두고 설계되었다는 것입니다. 라이브러리에서 GUI 오버 헤드를 건너 뛸 수있는 방법을 모르겠습니다. 필요하지 않기 때문입니다.

공간 데이터의 클러스터 분석을 위해 R에 어떤 옵션이 있습니까?



tnx whuber. 질문이 있습니다. R에 공간 클러스터링을위한 특정 패키지가 있습니까? 내가 이해하는 한, 거리는 공간 데이터에 대해 다르게 계산되어야한다는 것을 의미합니다. 이 올바른지?
kaptan

R 's를 포함하여 내가 만난 거의 모든 범용 클러스터링 패키지 Cluster비 유사성 또는 거리 행렬을 입력으로 받아들입니다. 이를 통해 거리를 직접 계산할 수 있다면 완벽하게 일반화되고 구의 클러스터링에 적용 할 수 있습니다.
whuber

나는 매우 비슷한 문제에 오랫동안 직면하고 있지만 좋은 해결책을 찾을 수 없습니다 . 스택 교환 에서 내 게시물을 볼 수 있습니다 . 매월 해수면 온도 데이터 세트 (lon, lat, sst)가 있습니다. 이러한 공간 데이터에 대한 군집을 찾는 방법을 찾았습니까? 올바른 R 패키지 / 기능을 찾을 수 없습니다. 미리 감사드립니다 Paco
pacomet

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)가장 높은 값을 확인하십시오.
ssanch

11

R의 구형 지구에서 실제 거리를 계산하는 함수가 있으므로이를 사용하여 좌표 대신 거리 매트릭스를 사용하여 클러스터링 함수를 호출 할 수 있습니다. 그래도 이름이나 관련 패키지를 기억할 수 없습니다. 실마리에 대해서는 R 공간 작업보기를 참조하십시오.

다른 옵션은 거리 유클리드 되도록 점을 참조 시스템으로 변환하는 것 입니다. 영국에서는 OSGrid 참조 시스템을 사용할 수 있습니다.

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

패키지 'rgdal'(또는 아마도 maptools)에서 spTransform 사용. 데이터를위한 그리드 시스템을 찾으십시오 (관련 UTM 영역에서 가능할 것임).

이는 데이터가 작은 지역 인 경우에만 유용합니다. 전역 데이터가있는 경우 실제로 구면 거리를 계산해야하며 R 공간 작업보기에서 설명한 패키지 중 하나 이상에 있습니다.

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

패키지 "geosphere"를 원하는 것처럼 보이지만 공간 작업보기를 읽으십시오!


7

Spatstat 패키지를 살펴 보겠습니다 . 전체 패키지는 공간 포인트 패턴 (sic) 분석 전용입니다. 우수한있다 CSIRO에서 교수 아드리안 바 델리에 의해 작성된 전자 책 전체 패키지의 및 예제 사용 방법에 대한 자세한 설명서가 포함되어 있습니다. "점 패턴의 거리 방법"에 대해서는 19 장을보십시오.

즉, spatstat조차도 공간 데이터와 서수 데이터를 구별하지 못한다고 확신하므로 일관된 x 및 y 값을 사용하여 점을 재 투영하고 rgdal (GDAL 및 OGR의 R 라이브러리)을 사용해보십시오 .


tnx. 훌륭한 전자 책입니다. 그러나 클러스터링을위한 특정 기능이 없기 때문에이 Spatstat를 사용하여 클러스터링을 수행하는 방법을 잘 모르겠습니다. 조금 설명해 주시겠습니까?
kaptan

2
사실, 공정하게, 그것을 다시 살펴본 결과 질병 클러스터 분석 에 대한 Bivand의 패키지 인 DCluster 패키지를 살펴 보겠습니다 . 또한 답장을 기다려 주셔서 감사합니다!
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 et al., "데이터 마이닝의 공간 클러스터링 방법 : 설문 조사"에 의한 논문
knb

5

아닌 동안 R패키지, geoda는 이 공간 클러스터링 이론에 기여하고있다 뤽 안 셀린에 의해 기록 된대로 흥미있는 프로그램을 검토 할 수 있습니다, 나는 (내가 그것을 탐구 이후 약간의 시간이되었습니다하지만)가 일부 클러스터링을 가능하게 생각합니다.

spdep 은 훌륭한 R패키지입니다. 트리 에지 제거에 의한 공간 'K'luster 분석skater 기능 이 포함되어 있습니다 . 또한 공간 자동 상관 및 로컬 모란을 사용한 로컬 클러스터 감지 및 기타 공간 통계를 포함하여 공간 분석을위한 다른 기능을 제공합니다. 다음과 같이 설명됩니다.

거리 및 테셀레이션을 기준으로 점 패턴을 기준으로 다각형 연속성에서 공간 가중치 행렬 객체를 생성하고, 이러한 객체를 요약하고, 최소 스패닝 트리에 의한 지역 집계를 포함하여 공간 데이터 분석에 사용할 수 있도록하는 함수 모음입니다. 글로벌 Moran 's I, APLE, Geary 's C, Hubert / Mantel 일반 교차 제품 통계, 경험적 Bayes 추정치 및 Assunção / Reis 지수, Getis / Ord G, 여러 가지 결합 계수 통계, 로컬 Moran 's I 및 Getis를 포함한 공간 자기 상관성에 대한 테스트 모음 / 또는 G, 안장 근사 및 전 세계 및 지역 모란의 I에 대한 정확한 시험; 공간 동시 자기 회귀 (SAR) 지연 및 오류 모델을 추정하는 기능, 지연 모델에 대한 영향 측정,

최소한 포인트가 공간적으로 무작위로 분포되어 있는지 (공간 거리를 고려할 때 유용한 테스트 사전 클러스터링) 테스트 할 수 있지만 클러스터링 알고리즘에 입력 할 수있는 다른 유용한 측정 값을 생성 할 수도 있습니다. 마지막으로, https://stats.stackexchange.com/ 에서 공간 군집 문제를 다루는 유용한 질문을 찾을 수 있습니다 (이론적 인 관점에서 더 많음).


이 답변은 spatstat 라이브러리에서 사용 가능한 공간 패턴 또는 포인트 패턴의 자기 상관을 분석하여 동일한 유형의 기능을 다수 식별합니다. 이것이 흥미로운 곳이라면 클러스터링 문제와 완전히 관련이있는 것은 아닙니다. 나는 가설 검정과 탐색 적 분석을위한 것이지만, 당면한 문제를 직접 해결해야한다. spdep을 사용한 클러스터링 방법은 k 개의 가장 가까운 이웃, 우발 또는 거리를 사용하는 공간 가중치 행렬 [Wij]을 기반으로합니다.
Jeffrey Evans

2

R의 leaderCluster packacge를 사용해보십시오. 다른 많은 클러스터링 알고리즘과 달리 사용자가 클러스터 수를 지정할 필요는 없지만 기본 튜닝 매개 변수로 클러스터의 대략적인 반경이 필요합니다.


-2

지구권 패키지 거리 기능 또는 화석 이미지 거리 기능을 확인하십시오. 데이터는도 단위이며 클러스터링을 수행하기 전에 미터 또는 피트로 변환해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.