Làm cách nào tôi có thể tiến hành Phân tích thành phần chính có trọng số theo địa lý bằng ArcGIS, Python và SPSS / R?


32

Tôi đang theo một mô tả / phương pháp luận để tiến hành Phân tích thành phần chính theo trọng số địa lý (GWPCA). Tôi rất vui khi sử dụng Python cho bất kỳ phần nào trong số này và tôi tưởng tượng SPSS hoặc R được sử dụng để chạy PCA trên các biến có trọng số theo địa lý.

Tập dữ liệu của tôi bao gồm khoảng 30 biến độc lập được đo trong suốt ~ 550 vùng điều tra dân số (hình học vectơ).

Tôi biết đây là một câu hỏi được tải. Nhưng, khi tôi tìm kiếm và tìm kiếm, dường như không có bất kỳ giải pháp nào ngoài đó. Những gì tôi đã đi qua là các phương trình toán học giải thích thành phần cơ bản của GWPCA (và GWR). Những gì tôi đang theo sau được áp dụng nhiều hơn theo nghĩa, rằng tôi đang tìm kiếm những bước quan trọng tôi cần thực hiện để có được từ dữ liệu thô đến kết quả GWPCA.


Tôi muốn mở rộng phần đầu tiên với chỉnh sửa này do các bình luận nhận được bên dưới.

Để giải quyết Paul ...

Tôi đang dựa trên mối quan tâm của mình đối với GWPCA trong bài báo sau:

Lloyd, CD, (2010). Phân tích đặc điểm dân số bằng cách sử dụng phân tích thành phần chính có trọng số theo địa lý: Một nghiên cứu trường hợp về Bắc Ireland năm 2001. Máy tính, Môi trường và Hệ thống đô thị, 34 (5), tr.389-399.

Đối với những người không có quyền truy cập vào tài liệu, tôi đã đính kèm ảnh chụp màn hình của các phần cụ thể giải thích toán học dưới đây:

Bài báo

Và để giải quyết ...

Không đi sâu vào chi tiết (bảo mật), chúng tôi đang cố gắng giảm 30 biến số mà chúng tôi tin là tất cả các chỉ số rất tốt (mặc dù trên toàn cầu), đến tập hợp các thành phần có giá trị riêng lớn hơn 1. Bằng cách tính toán các thành phần có trọng số địa lý, chúng tôi cố gắng để hiểu phương sai cục bộ được giải thích bởi các thành phần này.

Tôi nghĩ mục tiêu chính của chúng tôi sẽ là chứng minh khái niệm về GWPCA, nghĩa là thể hiện bản chất rõ ràng về mặt không gian của dữ liệu của chúng tôi và chúng tôi không thể xem xét tất cả các biến độc lập để giải thích trên quy mô toàn cầu. Thay vào đó, thang đo cục bộ (vùng lân cận) mà mỗi thành phần sẽ xác định sẽ giúp chúng tôi hiểu bản chất đa chiều của dữ liệu của chúng tôi (cách các biến có thể được kết hợp với nhau để giải thích một vùng lân cận nhất định trong khu vực nghiên cứu của chúng tôi).

Chúng tôi hy vọng lập bản đồ tỷ lệ phần trăm chênh lệch được tính cho từng thành phần (riêng biệt), để hiểu phạm vi của vùng lân cận được giải thích bởi thành phần được đề cập (giúp chúng tôi hiểu về không gian địa phương của các thành phần của chúng tôi). Có lẽ một số ví dụ lập bản đồ khác nhưng không ai nghĩ đến vào lúc này.

Ngoài ra:

Toán học đằng sau GWPCA vượt xa những gì tôi hiểu dựa trên nền tảng phân tích địa lý và thống kê xã hội. Ứng dụng của toán học là quan trọng nhất, đó là, tôi cắm cái gì vào các biến / công thức này.


1
Tôi không biết o một giải pháp vượt trội trong R, nhưng nó không quá khó. Vui lòng gửi toán có liên quan nếu bạn muốn có nhiều phản hồi hơn: "R có thể làm điều này".
Paul Hiemstra

2
Những loại kết quả bạn đang tìm kiếm? Giá trị bản địa lớn nhất? Ước tính số lượng thành phần chính? Các bước chính phải đủ rõ ràng - tại một điểm, chọn trọng số, tính toán ma trận hiệp phương sai (hoặc tương quan) có trọng số, lấy PCA từ SVD của ma trận đó. Lặp lại cho một loạt các điểm. Bạn đang tìm kiếm chi tiết của bất kỳ bước nào trong số này?
whuber

niềm vui của tôi, whuber. để minh họa quan điểm của tôi. n. rast2 được lật. nếu bạn nhìn vào bản đồ của mình, bạn sẽ thấy bạn thực sự có 20 cột thay vì 30 (các ô rộng trên trục x, chỉ có 20 cột). chỉ muốn giúp đỡ

Bạn có thể muốn biết rằng có một gói phương pháp GW cải tiến mới dành cho R, bao gồm cả GW PCA, sắp ra mắt - nó đã được trình bày tại GISRUK 2013 vào tháng trước.
AnserGIS

Dựa trên mô tả mở rộng của OP về phân tích mong muốn, tôi đặc biệt khuyên bạn nên nghiên cứu tài liệu về "Tọa độ chính của ma trận láng giềng" (AKA, Moran's Eigenvector). Phương pháp này ban đầu được đề xuất trong 'Borcard D., & P. ​​Legendre (2002) Phân tích không gian quy mô toàn bộ dữ liệu sinh thái bằng phương pháp tọa độ chính của ma trận lân cận. Mô hình sinh thái 153: 51-68 'và rất mạnh mẽ để đánh giá dữ liệu trên nhiều miền quy mô không gian, đây là điều mà GWPCA sẽ không làm. Phương pháp này được triển khai trong thư viện spaceMaker và PCNM R.
Jeffrey Evans

Câu trả lời:


29

"PCA có trọng số địa lý" rất mô tả: trong đó R, chương trình thực tế tự viết. (Nó cần nhiều dòng nhận xét hơn các dòng mã thực tế.)

Hãy bắt đầu với các trọng số, bởi vì đây là nơi mà công ty phụ tùng PCA có trọng lượng địa lý từ chính PCA. Thuật ngữ "địa lý" có nghĩa là các trọng số phụ thuộc vào khoảng cách giữa điểm gốc và vị trí dữ liệu. Tiêu chuẩn - nhưng không có nghĩa là duy nhất - trọng số là một hàm Gaussian; đó là, phân rã theo cấp số nhân với khoảng cách bình phương. Người dùng cần chỉ định tốc độ phân rã hoặc - trực quan hơn - một khoảng cách đặc trưng mà trên đó xảy ra một lượng sâu răng cố định.

distance.weight <- function(x, xy, tau) {
  # x is a vector location
  # xy is an array of locations, one per row
  # tau is the bandwidth
  # Returns a vector of weights
  apply(xy, 1, function(z) exp(-(z-x) %*% (z-x) / (2 * tau^2)))
}

PCA áp dụng cho ma trận hiệp phương sai hoặc ma trận tương quan (có nguồn gốc từ hiệp phương sai). Ở đây, sau đó, là một hàm để tính hiệp phương sai có trọng số theo cách ổn định về số.

covariance <- function(y, weights) {
  # y is an m by n matrix
  # weights is length m
  # Returns the weighted covariance matrix of y (by columns).
  if (missing(weights)) return (cov(y))
  w <- zapsmall(weights / sum(weights)) # Standardize the weights
  y.bar <- apply(y * w, 2, sum)         # Compute column means
  z <- t(y) - y.bar                     # Remove the means
  z %*% (w * t(z))  
}

Mối tương quan được rút ra theo cách thông thường, bằng cách sử dụng độ lệch chuẩn cho các đơn vị đo lường của từng biến:

correlation <- function(y, weights) {
  z <- covariance(y, weights)
  sigma <- sqrt(diag(z))       # Standard deviations
  z / (sigma %o% sigma)
}

Bây giờ chúng ta có thể làm PCA:

gw.pca <- function(x, xy, y, tau) {
  # x is a vector denoting a location
  # xy is a set of locations as row vectors
  # y is an array of attributes, also as rows
  # tau is a bandwidth
  # Returns a `princomp` object for the geographically weighted PCA
  # ..of y relative to the point x.
  w <- distance.weight(x, xy, tau)
  princomp(covmat=correlation(y, w))
}

(Đó là 10 dòng mã thực thi cho đến nay. Chỉ cần thêm một dòng nữa, bên dưới, sau khi chúng tôi mô tả một lưới để thực hiện phân tích.)


Chúng ta hãy minh họa với một số dữ liệu mẫu ngẫu nhiên có thể so sánh với dữ liệu được mô tả trong câu hỏi: 30 biến tại 550 vị trí.

set.seed(17)
n.data <- 550
n.vars <- 30
xy <- matrix(rnorm(n.data * 2), ncol=2)
y <- matrix(rnorm(n.data * n.vars), ncol=n.vars)

Tính toán theo trọng số địa lý thường được thực hiện trên một tập hợp các vị trí đã chọn, chẳng hạn như dọc theo một mặt cắt hoặc tại các điểm của lưới thông thường. Chúng ta hãy sử dụng một lưới thô để có được một số quan điểm về kết quả; sau này - một khi chúng tôi tự tin mọi thứ đang hoạt động và chúng tôi đang có được những gì chúng tôi muốn - chúng tôi có thể tinh chỉnh lưới điện.

# Create a grid for the GWPCA, sweeping in rows
# from top to bottom.
xmin <- min(xy[,1]); xmax <- max(xy[,1]); n.cols <- 30
ymin <- min(xy[,2]); ymax <- max(xy[,2]); n.rows <- 20
dx <- seq(from=xmin, to=xmax, length.out=n.cols)
dy <- seq(from=ymin, to=ymax, length.out=n.rows)
points <- cbind(rep(dx, length(dy)),
                as.vector(sapply(rev(dy), function(u) rep(u, length(dx)))))

Có một câu hỏi về thông tin nào chúng tôi muốn giữ lại từ mỗi PCA. Thông thường, PCA cho n biến trả về một danh sách được sắp xếp gồm n giá trị riêng và - ở các dạng khác nhau - một danh sách tương ứng gồm n vectơ, mỗi vectơ có độ dài n . Đó là số n * (n + 1) trên bản đồ! Lấy một số tín hiệu từ câu hỏi, hãy lập bản đồ các giá trị riêng. Chúng được trích xuất từ ​​đầu ra của gw.pcathông qua $sdevthuộc tính, là danh sách các giá trị riêng theo giá trị giảm dần.

# Illustrate GWPCA by obtaining all eigenvalues at each grid point.
system.time(z <- apply(points, 1, function(x) gw.pca(x, xy, y, 1)$sdev))

Điều này hoàn thành trong chưa đầy 5 giây trên máy này. Lưu ý rằng khoảng cách đặc trưng (hoặc "băng thông") của 1 đã được sử dụng trong lệnh gọi đến gw.pca.


Phần còn lại là vấn đề lau dọn. Hãy lập bản đồ kết quả bằng rasterthư viện. (Thay vào đó, người ta có thể viết kết quả ra dưới dạng lưới để xử lý hậu kỳ với một hệ thống GIS.)

library("raster")
to.raster <- function(u) raster(matrix(u, nrow=n.cols), 
                                xmn=xmin, xmx=xmax, ymn=ymin, ymx=ymax)
maps <- apply(z, 1, to.raster)
par(mfrow=c(2,2))
tmp <- lapply(maps, function(m) {plot(m); points(xy, pch=19)})

Bản đồ

Đây là bốn bản đồ đầu tiên trong số 30 bản đồ, hiển thị bốn giá trị riêng lớn nhất. (Đừng quá phấn khích bởi kích thước của chúng, vượt quá 1 tại mọi vị trí. Hãy nhớ lại rằng những dữ liệu này được tạo hoàn toàn ngẫu nhiên và do đó, nếu chúng có bất kỳ cấu trúc tương quan nào - mà các giá trị riêng trong các bản đồ này dường như chỉ ra --it chỉ là do tình cờ và không phản ánh bất cứ điều gì "thực" giải thích quá trình tạo dữ liệu.)

Đó là hướng dẫn để thay đổi băng thông. Nếu nó quá nhỏ, phần mềm sẽ phàn nàn về điểm kỳ dị. (Tôi không xây dựng bất kỳ kiểm tra lỗi nào trong quá trình triển khai cơ bản này.) Nhưng việc giảm từ 1 xuống 1/4 (và sử dụng cùng một dữ liệu như trước đây) sẽ cho kết quả thú vị:

Bản đồ 2

Lưu ý xu hướng các điểm xung quanh ranh giới đưa ra các giá trị riêng lớn bất thường (hiển thị ở các vị trí màu xanh lục của bản đồ phía trên bên trái), trong khi tất cả các giá trị riêng khác đều được ấn xuống để bù (hiển thị bằng màu hồng nhạt trong ba bản đồ khác) . Hiện tượng này, và nhiều sự tinh tế khác của PCA và trọng số địa lý, sẽ cần được hiểu trước khi người ta có thể hy vọng đáng tin cậy để giải thích phiên bản PCA có trọng số về mặt địa lý. Và sau đó, có 30 * 30 = 900 eigenvector khác (hoặc "tải") để xem xét ....


1
Đáng chú ý như bình thường @whuber, cảm ơn bạn rất rất nhiều!
Michael Markieta

1
chỉ muốn làm cho bạn biết rằng trong hàm to.raster, bạn cần phải có ma trận (u, nrow = n.rows, byrow = TRUE) thay vì ma trận (u, nrow = n.cols).

1
@cqh Cảm ơn bạn đã xem mã này rất cẩn thận! Bạn chỉ ra một mối quan tâm chính đáng; Tôi nhớ lại phải đối phó với vấn đề này. Tuy nhiên, tôi nghĩ rằng mã là chính xác như nó đứng. Nếu tôi đã trộn lẫn thứ tự hàng / cột, hình minh họa sẽ hoàn toàn (và rõ ràng) bị vặn lên. (Đó là lý do tại sao tôi đã thử nghiệm với số lượng hàng và cột khác nhau.) Tôi xin lỗi vì biểu hiện không may nrow=n.cols, nhưng đó là cách nó hoạt động (dựa trên cách pointstạo ra) và tôi không muốn quay lại và đổi tên mọi thứ.
whuber

14

Cập nhật:

Hiện tại đã có gói R chuyên dụng có sẵn trên CRAN - GWmodel bao gồm PCA có trọng số địa lý trong số các công cụ khác. Từ trang web của tác giả :

Gói R mới của chúng tôi cho Mô hình theo trọng số địa lý, GWmodel, gần đây đã được tải lên CRAN. GWmodel cung cấp một loạt các phương pháp phân tích dữ liệu theo trọng số địa lý trong một gói duy nhất, bao gồm thống kê mô tả, tương quan, hồi quy, mô hình tuyến tính nói chung và phân tích thành phần chính. Các mô hình hồi quy bao gồm nhiều dữ liệu khác nhau với các cấu trúc Gaussian, logistic và Poisson, cũng như hồi quy sườn để xử lý các yếu tố dự đoán tương quan. Một tính năng mới của gói này là cung cấp các phiên bản mạnh mẽ của từng kỹ thuật - những phiên bản này có khả năng chống lại các tác động của các ngoại lệ.

Các vị trí cho mô hình hóa có thể là trong một hệ tọa độ dự kiến ​​hoặc được chỉ định sử dụng tọa độ địa lý. Số liệu khoảng cách bao gồm Euclidean, taxicab (Manhattan) và Minkowski, cũng như khoảng cách Great Circle cho các vị trí được chỉ định bởi tọa độ vĩ độ / kinh độ. Các phương pháp hiệu chỉnh tự động khác nhau cũng được cung cấp, và có một số công cụ xây dựng mô hình hữu ích có sẵn để giúp chọn từ các dự đoán thay thế.

Các bộ dữ liệu mẫu cũng được cung cấp và chúng được sử dụng trong tài liệu đi kèm trong các minh họa về việc sử dụng các kỹ thuật khác nhau.

Thêm chi tiết ina xem trước của một bài báo sắp tới .


Tôi nghi ngờ nếu tồn tại giải pháp 'sẵn sàng sử dụng, hãy cắm dữ liệu của bạn'. Nhưng tôi rất hy vọng được chứng minh là sai vì tôi muốn thử nghiệm phương pháp này với một số dữ liệu của tôi.

Một số tùy chọn để xem xét:


Marí-Dell'Olmo và các đồng nghiệp đã sử dụng phân tích nhân tố Bayes để tính toán chỉ số thiếu hụt cho các khu vực nhỏ ở Tây Ban Nha:

Phân tích nhân tố Bayes để tính toán chỉ số thiếu hụt và tính không chắc chắn của nó. Marí-Dell'Olmo M, Martínez-Beneito MA, Borrell C, Zurriaga O, Nolasco A, Domínguez-Berjón MF. Dịch tễ học . 2011 tháng 5; 22 (3): 356-64.

Trong bài viết họ cung cấp đặc tả cho mô hình WinBUGS được thực thi từ R có thể giúp bạn bắt đầu.


gói adegenet R thực hiệnspcachức năng. Mặc dù nó tập trung vào dữ liệu di truyền, nó cũng có thể gần với một giải pháp cho vấn đề của bạn như bạn có thể nhận được. Hoặc bằng cách sử dụng gói / chức năng này trực tiếp hoặc sửa đổi mã của nó. Có một họa tiết về vấn đề sẽ giúp bạn đứng dậy và chạy.


Các nhà nghiên cứu tại Cụm nghiên cứu chiến lược dường như đang tích cực làm việc về chủ đề này. Đặc biệt là Paul HarrisChris Brunsdon (ở đây trình bày tôi tình cờ thấy). Ấn phẩm gần đây của Paul và Urska ( toàn văn ) cũng có thể là tài nguyên hữu ích:

Demšar U, Harris P, Brunsdon C, Fotheringham AS, McLoone S (2012) Phân tích thành phần chính trên dữ liệu không gian: tổng quan. Biên niên sử của Hiệp hội Nhà địa lý Hoa Kỳ

Tại sao bạn không thử liên hệ với họ và hỏi về chính xác những giải pháp họ đang sử dụng? Họ có thể sẵn sàng chia sẻ công việc của họ hoặc hướng bạn theo hướng tốt.


Cheng, Q. (2006) Phân tích thành phần chính theo không gian và trọng số không gian để xử lý ảnh. IGARSS 2006: 972-975

giấy đề cập đến việc sử dụng hệ thống GeoDAS GIS . Có thể là một dẫn khác.


2
+1 Bài thuyết trình của Brunsdon nhấn mạnh việc sử dụng PCA như một công cụ thăm dò để tìm các ngoại lệ đa biến cục bộ. (Việc sử dụng này cũng được đề cao trong spcahọa tiết.) Đó là cách sử dụng mạnh mẽ và hợp pháp cho GWPCA. (Tuy nhiên, phương pháp này có thể được cải thiện hơn nhiều và theo tinh thần phân tích dữ liệu không gian khám phá, nếu PCA được thay thế bằng một quy trình mạnh mẽ hơn.)
whuber

Có vẻ như một sự thay thế sẽ là PCA kernel. Tribesandclimatechange.org/docs/tribes_450.pdf
Jeffrey Evans

1
Cảm ơn thông tin cập GWmodelnhật-- trông giống như một gói đáng để có được.
whuber
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.