Phân cụm dữ liệu không gian trong R? [đóng cửa]


34

Tôi có một loạt các điểm dữ liệu với vĩ độ và kinh độ. Tôi muốn sử dụng R để phân cụm chúng dựa trên khoảng cách của chúng.

Tôi đã lấy một cái nhìn tại này trang và cố gắng clustTool gói. Nhưng tôi không chắc liệu hàm clust trong clustTool có coi các điểm dữ liệu (lat, lon) là dữ liệu không gian hay không và sử dụng công thức thích hợp để tính khoảng cách giữa chúng.

Ý tôi là tôi không thể thấy cách chúng phân biệt giữa dữ liệu không gian và dữ liệu thứ tự. Tôi tin rằng cách tính khoảng cách giữa hai điểm trên bản đồ (không gian) và hai số bình thường là khác nhau. (Không phải nó?)

Ngoài ra điều gì xảy ra nếu tôi muốn xem xét một tham số thứ ba trong cụm của tôi?

Giống như nói nếu tôi có (lat, lon) và một tham số khác.

Khoảng cách được tính như thế nào?

Một vấn đề khác tôi gặp phải với clustTool là nó được thiết kế với GUI. Tôi không biết làm thế nào tôi có thể bỏ qua GUI trên thư viện vì tôi không cần nó.

Tôi có những lựa chọn nào trong R để phân tích cụm dữ liệu không gian?



tnx whuber. Tôi có một câu hỏi. Có một gói cụ thể cho phân cụm không gian trong R? Ý tôi là, theo như tôi hiểu thì khoảng cách nên được tính khác cho dữ liệu không gian. Điều này có đúng không?
kaptan

Hầu như mọi gói phân cụm mục đích chung mà tôi đã gặp, bao gồm cả R Cluster, sẽ chấp nhận sự khác biệt hoặc ma trận khoảng cách làm đầu vào. Điều này làm cho chúng hoàn toàn chung và có thể áp dụng cho việc phân cụm trên quả cầu, miễn là bạn có thể tự tính toán khoảng cách, điều này rất đơn giản.
whuber

Tôi đang đối mặt với một vấn đề rất giống nhau trong một thời gian dài nhưng không thể tìm thấy một giải pháp tốt đẹp, bạn có thể xem bài đăng của tôi trong trao đổi ngăn xếp . Tôi có một bộ dữ liệu nhiệt độ mặt nước biển hàng tháng (lon, lat, sst). Bạn đã tìm thấy cách để tìm các cụm cho dữ liệu không gian như vậy? Tôi không thể tìm thấy gói / chức năng R thích hợp. Cảm ơn trước Paco
pacomet

Bạn đã cân nhắc sử dụng SatScan chưa?

Câu trả lời:


13

Đây là một giải pháp dựa trên Tìm cụm quy tắc khoảng cách dựa trên điểm , nhưng sử dụng distmhàm từ geospheregói:

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)

Bạn sẽ nhận được một cái gì đó như:

        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

Các bước tiếp theo chỉ dành cho trực quan:

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)

âm mưu


Tôi có vấn đề với điều này: Tôi có ma trận khoảng cách và tôi tìm thấy khoảng cách lớn nhất cho mỗi mục: for (i in 1:186) { print(paste(i,min(distance[i,c(1:(i-1),(i+1):187)]))) } Phải mất 4nhưng khi tôi áp dụng, x <- cutree(hc, h=5)nó mang lại cho tôi 101 cụm trong số 187. Về mặt logic, nên là 1. Điều gì sai?
Peter.k

Xin chào, tôi không chắc làm thế nào để giúp bạn ở đây. Tôi đã làm một ví dụ nhỏ, và nó hoạt động tốt : x = as.dist(matrix(runif(100), ncol=10)); hc = hclust(x, method="complete"); cutree(hc, h=max(x)). Điều này cung cấp cho bạn một cụm, như bạn mong đợi. Hãy thử vẽ mô hình phân cụm của bạn với : plot(hc), và xem giá trị cao nhất là gì.
ssanch

11

Có các hàm để tính toán khoảng cách thực trên trái đất hình cầu trong R, vì vậy có lẽ bạn có thể sử dụng chúng và gọi các hàm phân cụm bằng ma trận khoảng cách thay vì tọa độ. Tôi không bao giờ có thể nhớ tên hoặc các gói có liên quan mặc dù. Xem Chế độ xem nhiệm vụ không gian R để tìm manh mối.

Tùy chọn khác là chuyển đổi điểm của bạn thành một hệ quy chiếu sao cho khoảng cách Euclide. Ở Anh tôi có thể sử dụng hệ thống tham chiếu OSGrid:

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

sử dụng spTransform từ gói 'rgdal' (hoặc có thể là maptools). Tìm một hệ thống lưới cho dữ liệu của bạn (vùng UTM có liên quan có thể sẽ làm được) và bạn sẽ không tính toán được khoảng cách tính bằng mét.

Điều này chỉ tốt nếu dữ liệu của bạn là một khu vực nhỏ - nếu bạn có dữ liệu toàn cầu thì bạn thực sự cần phải tính khoảng cách hình cầu, và đó là một nơi nào đó trong một (hoặc nhiều) các gói được thảo luận trong Chế độ xem nhiệm vụ không gian R:

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

Có vẻ như bạn muốn gói "không gian địa lý", nhưng hãy đọc chế độ xem nhiệm vụ không gian!


7

Tôi sẽ xem qua gói Spatstat . Toàn bộ gói được dành riêng để phân tích các mẫu điểm không gian (sic). Có một cuốn sách điện tử tuyệt vời được viết bởi Giáo sư Adrian Baddeley tại CSIRO , trong đó có tài liệu chi tiết, cách làm và ví dụ cho toàn bộ gói. Hãy xem chương 19 để biết "Phương pháp khoảng cách cho các mẫu điểm".

Điều đó nói rằng, tôi không chắc chắn rằng thậm chí spatstat phân biệt giữa dữ liệu không gian và dữ liệu thứ tự, vì vậy bạn có thể muốn chuyển hướng các điểm của bạn thành một giá trị x và y nhất quán - có thể thử sử dụng rgdal (thư viện R cho GDAL và OGR).


tnx. Đó là một ebook tuyệt vời. Nhưng tôi không chắc cách phân cụm có thể được thực hiện bằng Spatstat này vì tôi không thấy bất kỳ chức năng cụ thể nào để phân cụm. Bạn có thể giải thích một chút?
kaptan

2
Trên thực tế, công bằng mà nói, khi nhìn lại, tôi nhìn vào gói DCluster - một gói cũng của Bivand về phân tích các cụm bệnh. Ngoài ra, xin lỗi cho sự chờ đợi trên trả lời!
om_henners

6

Có thể câu trả lời này đến 2 năm quá muộn, nhưng dù sao đi nữa.

Theo hiểu biết của tôi, phân cụm không gian đòi hỏi một vùng lân cận xác định mà phân cụm bị hạn chế, ít nhất là vào lúc bắt đầu. Hàm kulldorf trong gói SpatialEpi cho phép phân cụm không gian dựa trên các vùng lân cận tổng hợp.

hơn nữa thống kê DBSCAN có sẵn từ gói fpc có thể hữu ích.

xem thêm ở đây để thảo luận tương tự: https://stats.stackexchange.com/questions/9739/clustering-spatial-data-in-r

và ở đây cho một bài viết thú vị về các thuật toán cụm gần đây, chẳng hạn như CHAMAELEON: http://www.cs.uiuc.edu/homes/hanj/pdf/gkdbk01.pdf


Bài báo đó của Han và cộng sự, "Phương pháp phân cụm không gian trong khai thác dữ liệu: Một khảo sát" hiện có thể được tìm thấy tại: hanj.cs.illinois.edu/pdf/gkdbk01.pdf
knb

5

Mặc dù không phải là một Rgói, geoda có thể là một chương trình thú vị để kiểm tra vì nó được viết bởi Luc Anselin, người đã đóng góp cho lý thuyết phân cụm không gian, và tôi tin rằng nó cho phép một số cụm (mặc dù đã được một thời gian kể từ khi tôi khám phá nó).

spdep là một Rgói tuyệt vời . Nó bao gồm skaterchức năng Phân tích không gian 'K'luster bằng cách loại bỏ cạnh cây . Nó cũng mang lại các chức năng khác để phân tích không gian, bao gồm tự động tương quan không gian và phát hiện cụm cục bộ bằng cách sử dụng Local Moran và các thống kê không gian khác. Nó được mô tả như sau:

Một tập hợp các hàm để tạo các đối tượng ma trận trọng số không gian từ các tiếp giáp đa giác, từ các mẫu điểm theo khoảng cách và tàu, để tóm tắt các đối tượng này và cho phép sử dụng chúng trong phân tích dữ liệu không gian, bao gồm tập hợp vùng theo cây bao trùm tối thiểu; một bộ sưu tập các thử nghiệm cho sự tự tương quan không gian, bao gồm toàn cầu I, APLE, Geary C, Hubert / Mantel, thống kê sản phẩm chéo của Empirical Bayes và Chỉ số Assunção / Reis, Getis / Ord G và thống kê số lượng tham gia nhiều lần, Moris của I / Ord G, xấp xỉ yên ngựa và các thử nghiệm chính xác cho I toàn cầu và địa phương của Moran; và các chức năng để ước tính các mô hình độ trễ và lỗi tự động đồng thời không gian (SAR), các biện pháp tác động cho các mô hình độ trễ,

Ít nhất bạn có thể kiểm tra xem các điểm của bạn có được phân phối ngẫu nhiên theo không gian không (có lẽ là một thử nghiệm phân cụm trước hữu ích khi xem xét khoảng cách không gian), nhưng nó cũng có thể tạo ra các biện pháp hữu ích khác mà bạn có thể nhập vào thuật toán phân cụm của mình. Cuối cùng, có lẽ bạn có thể tìm thấy các câu hỏi hữu ích trên https://stats.stackexchange.com/ xử lý các vấn đề phân cụm không gian (mặc dù, nhiều hơn từ góc độ lý thuyết).


Câu trả lời này là xác định nhiều loại chức năng tương tự, phân tích mô hình không gian hoặc tự động tương quan của mẫu điểm, có sẵn trong thư viện spatstat. Trường hợp này là thú vị, nó không hoàn toàn phù hợp với câu hỏi của cụm. Tôi là tất cả để kiểm tra giả thuyết và phân tích thăm dò nhưng người ta cũng nên trực tiếp giải quyết câu hỏi trong tầm tay. Các phương pháp phân cụm bằng spdep dựa trên ma trận trọng số không gian [Wij] bằng cách sử dụng k lân cận, dự phòng hoặc khoảng cách gần nhất.
Jeffrey Evans

2

Hãy thử gói packClge của LeaderCluster trong R. Không giống như nhiều thuật toán phân cụm khác, nó không yêu cầu người dùng chỉ định số lượng cụm, mà thay vào đó yêu cầu bán kính gần đúng của một cụm làm tham số điều chỉnh chính của nó.


-2

Kiểm tra chức năng khoảng cách gói không gian địa lý hoặc chức năng deg.dist hóa thạch. Bạn có dữ liệu theo độ và cần dịch nó thành mét hoặc feet trước khi thực hiện phân cụm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.