ArcGIS, Python ve SPSS / R kullanarak Coğrafi Ağırlıklı Temel Bileşen Analizi'ni nasıl yapabilirim?


32

Coğrafi Ağırlıklı Temel Bileşenler Analizi (GWPCA) yürütmek için bir açıklama / metodoloji peşindeyim. Bunun herhangi bir kısmı için Python kullanıyorum ve PCA'yı coğrafi ağırlıklı değişkenler üzerinde çalıştırmak için SPSS veya R'nin kullanıldığını hayal ediyorum.

Veri setim ~ 550 nüfus sayımı izleri (vektör geometrisi) boyunca ölçülen yaklaşık 30 bağımsız değişkenden oluşur.

Bunun dolu bir soru olduğunu biliyorum. Ancak, arama ve arama yaparken, orada herhangi bir çözüm görünmüyor. Karşılaştığım, GWPCA'nın (ve GWR) temel bileşimini açıklayan matematiksel denklemler. Peşinde olduğum şey, bir anlamda uygulanmakta, ham verilerden GWPCA sonuçlarına ulaşmak için hangi büyük adımları atmam gerektiğini arıyorum.


Aşağıda yapılan yorumlar nedeniyle, bu düzenlemeyle ilk kısmı genişletmek istiyorum.

Paul’a hitap etmek için ...

GWPCA’ya olan ilgimi aşağıdaki yazıdan çekiyorum:

Lloyd, CD, (2010). Coğrafi ağırlıklı ana bileşen analizi kullanılarak nüfus özelliklerinin analizi: 2001'de Kuzey İrlanda vaka çalışması. Bilgisayar, Çevre ve Kentsel Sistemler, 34 (5), s.389-399.

Literatüre erişimi olmayanlar için aşağıdaki matematiği açıklayan bölümlerin ekran görüntülerini ekledim:

makale

Ve whuber’a hitap etmek için ...

Ayrıntıya girmeden (gizlilik), hepsinin çok iyi göstergeler olduğuna inandığımız 30 değişkeni (küresel olarak da olsa), 1'den büyük özdeğerlere sahip bileşen kümesine indirmeye çalışıyoruz. Coğrafi olarak ağırlıklandırılmış bileşenleri hesaplayarak, Bu bileşenler tarafından açıklanan yerel farklılıkları anlamak.

Bence asıl amacımız GWPCA kavramını kanıtlamak, yani verilerimizin mekansal olarak açık niteliğini göstermek ve tüm bağımsız değişkenleri küresel ölçekte açıklayıcı olarak göremeyeceğimizi göstermek olacaktır. Aksine, her bir bileşenin tanımlayacağı yerel ölçek (mahalleler), verilerimizin çok boyutlu yapısını anlamada bize yardımcı olacaktır (çalışma alanımızdaki belirli bir mahalleyi açıklamak için değişkenlerin birbirleriyle nasıl birleştirilebileceği).

Her bir bileşenin (ayrı olarak) hesaba kattığı varyans yüzdesini, söz konusu bileşenin açıkladığı mahallenin derecesini anlamak için eşleştirmeyi umuyoruz (bileşenlerimizin yerel mekansallığını anlamamıza yardımcı olun). Belki başka haritalama örnekleri olabilir ama şu anda hiçbiri akla gelmiyor.

Bunlara ek olarak:

GWPCA'nın ardındaki matematik, coğrafi analiz ve sosyal istatistikler konusundaki birikimime dayanarak anladığımın ötesindedir. Matematiğin uygulanması en önemli olanıdır, yani bu değişkenlere / formüllere ne eklerim.


1
R'deki kutudan çıkan bir çözümü bilmiyorum ama bu çok zor olmamalı. Eğer "R muhtemelen bunu yapabilir" den daha fazla geribildirim istiyorsanız, lütfen ilgili matematiği gönderin.
Paul Hiemstra

2
Ne tür sonuçlar arıyorsunuz? En büyük özdeğerler? Tahmini sayıda ana bileşen? Büyük adımlar yeterince net olmalıdır - bir noktada ağırlıklar toplayın, ağırlıklı kovaryans (veya korelasyon) matrisini hesaplayın, PCA'yı bu matrisin SVD'sinden alın. Bir sürü puan için tekrarlayın. Bu adımların herhangi birinin ayrıntılarını mı arıyorsunuz?
whuber

benim için zevk, whuber. amacımı göstermek için. n.rows = 20 n.cols = 30 sq = seq (1.600) rast = raster (matris (sq, nrow = n.rows, byrow = T)) rast2 = raster (matris (sq, nrow = n.cols)) rast2 döndürüldü. Haritalarınıza bakarsanız, aslında 30 yerine 20 sütununuz olduğunu göreceksiniz (x eksenindeki geniş hücreler, yalnızca 20 tanesi). sadece yardım etmek istedim.

GW PCA da dahil olmak üzere, R için yeni bir geliştirilmiş GW yöntem paketi olduğunu bilmek ilginizi çekebilir - geçen ay GISRUK 2013'de sunuldu.
AnserGIS

OP'nin istenen analizin genişletilmiş açıklamasına dayanarak, "Komşu matrislerin temel koordinatları" (AKA, Moran'ın Özvektörleri) hakkındaki literatürü incelemeyi şiddetle tavsiye ederim. Bu yöntem ilk olarak 'Borcard D., & P. ​​Legendre (2002)' de önerilmiştir. Ekolojik verilerin komşu matrislerin temel koordinatlarıyla tümüyle uzamsal analizi. Ekolojik Modelleme 153: 51-68 've GWPCA'nın yapmayacağı bir şey olan çok sayıda uzamsal ölçek alanındaki verilerin değerlendirilmesi için çok güçlü. Bu yöntem, spaceMaker ve PCNM R kütüphanelerinde uygulanır.
Jeffrey Evans

Yanıtlar:


29

"Coğrafi ağırlıklı PCA" çok açıklayıcı: içinde R, program pratikte kendini yazar. (Gerçek kod satırlarından daha fazla yorum satırına ihtiyaç duyar.)

Haydi ağırlıklar ile başlayalım, çünkü bu, PCA'nın kendisinden coğrafi ağırlıklı PCA parçaları şirketinin bulunduğu yerdir. "Coğrafi" terimi, ağırlıklar, bir taban nokta ile veri yerleri arasındaki mesafelere bağlı olduğunu ifade eder. Standart - ancak sadece hiçbir şekilde - ağırlıklandırma bir Gauss fonksiyonudur; yani, kare mesafe ile üssel çürüme. Kullanıcının, çürüme oranını veya - daha sezgisel olarak - üzerinde sabit bir çürüme miktarının oluştuğu karakteristik bir mesafeyi belirtmesi gerekir.

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, bir kovaryans veya korelasyon matrisine uygulanır (bir kovaryanstan türetilir). Bu durumda, burada ağırlıklı kovaryansları sayısal olarak kararlı bir şekilde hesaplamak için bir işlevdir.

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))  
}

Korelasyon, her bir değişkenin ölçüm birimleri için standart sapmalar kullanılarak, olağan şekilde elde edilir:

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

Şimdi PCA'yı yapabiliriz:

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))
}

(Şimdilik net bir 10 çalıştırılabilir kod satırı. Bu, analizin gerçekleştirileceği bir ızgarayı açıkladıktan sonra aşağıda yalnızca bir tane daha gerekli olacak.)


Şimdi, soruda tarif edilenlerle karşılaştırılabilir bazı rastgele örnek verilerle gösterelim: 550 lokasyonda 30 değişken.

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)

Coğrafi olarak ağırlıklandırılmış hesaplamalar, çoğu zaman, bir kesit boyunca veya normal bir kılavuzun noktaları gibi seçilen bir konum kümesi üzerinde gerçekleştirilir. Sonuçlara bir bakış açısı getirmek için kaba bir ızgara kullanalım; sonra - bir kere her şeyin işe yarayacağından ve istediğimizi elde ettiğimizden emin olduktan sonra - ızgarayı iyileştirebiliriz.

# 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)))))

Her PCA'dan hangi bilgileri saklamak istediğimizle ilgili bir soru var. Tipik olarak, n değişkenleri için bir PCA , n özdeğerlerinin sıralı bir listesini ve - çeşitli formlarda - her birinin uzunluğu n olan karşılık gelen n vektörlerinin bir listesini verir . Bu, haritadaki n * (n + 1) sayıdır! Bu sorudan bazı ipuçları alarak, özdeğerleri haritalayalım. Bu çıktısından çıkarılır ile değeri azalan ile eigen listesi özniteliği.gw.pca$sdev

# 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))

Bu, makinede 5 saniyeden daha kısa sürede tamamlanır. Çağrıda 1 karakteristik mesafesinin (veya "bant genişliği") kullanıldığına dikkat edin gw.pca.


Gerisi silme meselesidir. Sonuçları rasterkütüphaneyi kullanarak eşleştirelim . (Bunun yerine, bir GIS ile işlem sonrası için sonuçları bir ızgara biçiminde yazabilirsiniz.)

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)})

Haritalar

Bunlar en büyük dört özdeğerleri gösteren 30 haritanın ilk dördü. (Her yerde 1'i aşan boyutları ile çok fazla heyecanlanma. Bu verilerin tamamen rastgele üretildiğini ve bu nedenle, eğer herhangi bir korelasyon yapıları varsa - bu haritalardaki largish özdeğerlerinin belirttiğini - bu sadece şansa bağlıdır ve veri oluşturma sürecini açıklayan "gerçek" herhangi bir şeyi yansıtmaz.)

Bant genişliğini değiştirmek öğreticidir. Çok küçükse, yazılım tekillikler hakkında şikayet edecektir. (Bu çıplak kemik uygulamasında herhangi bir hata kontrolü yapmadım.) Ancak 1'den 1/4'e (ve daha önce olduğu gibi aynı verileri kullanmak) ilginç sonuçlar veriyor:

Haritalar 2

Sınır etrafındaki noktaların alışılmadık derecede büyük ana özdeğerler verme (sol üst haritanın yeşil konumlarında gösterilir), diğer tüm özdeğerler telafi etmek için basıldığında (diğer üç haritada açık pembe ile gösterilir) eğilimini not edin. . Bu fenomenin ve birçok PCA incelikinin ve coğrafi ağırlıklandırmanın, PCA'nın coğrafi ağırlıklı versiyonunu güvenilir bir şekilde yorumlamayı umabilmesi için anlaşılması gerekecektir. Ve sonra dikkate alınması gereken diğer 30 * 30 = 900 özvektörler (veya "yükler") vardır ....


1
Her zamanki gibi dikkat çekici @ whuber, çok çok teşekkür ederim!
Michael Markieta

1
sadece to.raster işlevinde, matris yerine (u, nrow = n.row, byrow = TRUE) matrisin (u, nrow = n.cols) olması gerektiğinin farkına varmak istedim.

1
@cqh Bu koda çok dikkatlice baktığınız için teşekkür ederiz! Meşru bir endişeye işaret ediyor; Bu konuyla uğraşmak zorunda kaldığımı hatırlıyorum. Ancak, kodun olduğu gibi doğru olduğunu düşünüyorum. Sıra / sütun sıralamasını karıştırmış olsaydım, resimler tamamen (ve açıkça) berbat olurdu. (Bu yüzden farklı satır ve sütun sayıları ile test ettim.) Talihsiz ifade için özür dilerim nrow=n.cols, ancak bu şekilde çalıştı (nasıl pointsyaratıldığına bağlı olarak) ve geri dönüp her şeyi yeniden adlandırmak istemedim.
whuber

14

Güncelleştirme:

Şimdi CRAN - GWmodel'de , diğer araçların yanı sıra coğrafi ağırlıklı PCA içeren özel bir R paketi de mevcut . Yazarın web sitesinden :

Coğrafi Ağırlıklı Modelleme için yeni R paketimiz, GWmodel, yakın zamanda CRAN'a yüklendi. GWmodel, tek bir pakette Coğrafi Ağırlıklı veri analizi yaklaşımları yelpazesi sunar; bunlar, tanımlayıcı istatistikler, korelasyon, regresyon, genel doğrusal modeller ve temel bileşenler analizini içerir. Regresyon modelleri, Gaussian, lojistik ve Poisson yapılarına ilişkin veriler için çeşitli, ayrıca korelasyonlu tahmin ediciler ile çalışmak için sırt regresyonunu içerir. Bu paketin yeni bir özelliği, her tekniğin sağlam versiyonlarının sağlanmasıdır - bunlar aykırı değerlerin etkilerine karşı dayanıklıdır.

Modelleme için yerler öngörülen koordinat sisteminde olabilir veya coğrafi koordinatlar kullanılarak belirtilebilir. Mesafe metrikleri, Euclidean, taxicab (Manhattan) ve Minkowski'nin yanı sıra enlem / boylam koordinatlarıyla belirtilen konumlar için Great Circle mesafelerini içerir. Çeşitli otomatik kalibrasyon yöntemleri de sağlanmıştır ve alternatif öngörücülerden seçim yapmanıza yardımcı olacak bazı faydalı model oluşturma araçları vardır.

Örnek veri setleri de sağlanmıştır ve beraberindeki belgelerde çeşitli tekniklerin kullanımının örneklerinde kullanılmıştır.

Daha fazla detay gelecek kağıdın bir önizlemesinde .


'Kullanıma hazır, verilerinizi bağlayın' çözümünün mevcut olup olmadığından şüpheliyim. Ancak, bu yöntemi bazı verilerimle test etmeyi sevdiğim için yanlış olduğunu kanıtlamayı umuyorum.

Dikkate alınması gereken bazı seçenekler:


Marí-Dell'Olmo ve arkadaşları İspanya'daki küçük alanlar için yoksunluk endeksini hesaplamak için Bayesian faktör analizini kullandılar:

Bir mahrumiyet endeksi ve belirsizliğini hesaplamak için Bayes faktörü analizi. Marí-Dell'Olmo M, Martínez-Beneito MA, Borrell C, Zurriaga O, Nolasco A, Domínguez-Berjón MF. Epidemiyoloji . 2011 May; 22 (3): 356-64.

Makalede, R'den başlatılan WinBUGS modeli için şartname sağlanmış olabilir.


adegenet R paketispcaişleviyerinegetirir. Her ne kadar genetik verilere odaklansa da, probleminiz için alabileceğiniz en yakın çözüm olabilir. Bu paketi / işlevi doğrudan kullanarak veya kodunu değiştirerek. Sorun ve sizi çalıştırması gerekenbir skeç var.


Araştırmacıları Stratejik Araştırmalar Kümesi aktif konu üzerinde çalışıyor görünüyor. Özellikle Paul Harris ve Chris Brunsdon (burada sunum tökezledi). Paul ve Urska'nın son yayını ( tam metin ) de yararlı bir kaynak olabilir:

Demšar U, Harris P, Brunsdon C, Fotheringham AS, McLoone S (2012) Mekansal veriler üzerinde temel bileşenlerin analizi: genel bir bakış. Amerikan Coğrafyacılar Birliği'nin Yıllıkları

Neden onlarla iletişim kurmayı ve tam olarak hangi çözümleri kullandıklarını sormayı denemiyorsunuz? Çalışmalarını paylaşmaya istekli olabilirler veya sizi iyi bir yöne işaret edebilirler.


Cheng, S. (2006) Görüntü İşleme için Mekansal ve Mekansal Ağırlıklı Temel Bileşen Analizi. IGARSS 2006: 972-975

makalede GeoDAS GIS sistemi kullanılmıştır. Başka bir ipucu olabilir.


2
+1 Brunsdon sunumu, yerel çok değişkenli aykırı değerleri bulmak için PCA'nın keşif aracı olarak kullanılmasını vurgulamaktadır. (Bu kullanım aynı zamanda spcaskeçte de bulunmaktadır.) Bu GWPCA için güçlü ve meşru bir kullanımdır. (PCA daha sağlam bir prosedür ile ikame edilmiştir, ancak, bu yöntem çok geliştirilebilir ve keşif mekansal veri analizi özünden daha fazla olması.)
whuber

Bir alternatif çekirdek PCA olurdu gibi görünüyor. tribesandclimatechange.org/docs/tribes_450.pdf
Jeffrey Evans

1
Güncel bilgiler için teşekkürler, GWmodeledinmeye değer bir paket gibi görünüyor.
whuber
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.