Як я можу провести географічно зважений основний компонентний аналіз за допомогою ArcGIS, Python та SPSS / R?


32

Я після опису / методології проведення аналізу географічно зважених основних компонентів (GWPCA). Я радий використовувати Python для будь-якої частини цього, і я думаю, що SPSS або R використовуються для запуску PCA на географічно зважених змінних.

Мій набір даних складається приблизно з 30 незалежних змінних, які вимірюються протягом ~ 550 уроків перепису (геометрия вектора).

Я знаю, що це завантажене питання. Але, як я шукаю і шукаю, там, схоже, немає жодного рішення. Що я натрапив - це математичні рівняння, які пояснюють фундаментальний склад GWPCA (та GWR). Те, що я хочу, більше застосовується в певному сенсі, що я шукаю, які основні кроки мені потрібно виконати, щоб отримати від необроблених даних до результатів GWPCA.


Я хотів би розширити свою першу частину з цією редакцією завдяки коментарям, отриманим нижче.

Звернутися до Павла ...

Я базую свою зацікавленість у GWPCA на наступному документі:

Ллойд, CD, (2010). Аналіз характеристик населення за допомогою географічно зважених основних компонентів: Тематичне дослідження Північної Ірландії в 2001 р. Комп'ютери, навколишнє середовище та міські системи, 34 (5), с.389-399.

Для тих, хто не має доступу до літератури, я додав скріншоти окремих розділів, які пояснюють математику нижче:

Стаття

І щоб вирішити питання ...

Не вдаючись до деталей (конфіденційність), ми намагаємось зменшити 30 змінних, які, на нашу думку, є дуже хорошими показниками (хоча і глобально), до набору компонентів із власними значеннями, що перевищують 1. Обчислюючи географічно зважені компоненти, ми намагаємось зрозуміти локальні дисперсії, пояснені цими компонентами.

Я думаю, що нашою основною метою буде довести концепцію GWPCA, тобто показати просторово виражений характер наших даних і що ми не можемо вважати всі незалежні змінні пояснювальними в глобальному масштабі. Скоріше, локальний масштаб (мікрорайони), який визначатиме кожен компонент, допоможе нам зрозуміти багатовимірну природу наших даних (як змінні можуть поєднуватися між собою для пояснення певних кварталів нашої досліджуваної області).

Ми сподіваємось відобразити відсоток дисперсії, що припадає на кожен компонент (окремо), щоб зрозуміти міру сусідства, поясненого відповідним компонентом (допоможемо нам зрозуміти локальну просторовість наших компонентів). Можливо, якісь інші приклади картографування, але жоден зараз не приходить у голову.

Додатково:

Математика, що стоїть за GWPCA, виходить за рамки того, що я розумію, враховуючи моє вивчення в географічному аналізі та соціальній статистиці. Застосування математики найважливіше, тобто те, що я підключаю до цих змінних / формул.


1
Я не знаю про нестандартне рішення в R, але це не повинно бути занадто складно. Будь ласка, опублікуйте відповідну математику, якщо ви хочете більше відгуків, ніж: "R, ймовірно, може це зробити".
Пол Хіемстра

2
Які результати ви шукаєте? Найбільші власні значення? Орієнтовна кількість основних компонентів? Основні кроки повинні бути достатньо чіткими - в момент вибору ваги, обчислення зваженої матриці коваріації (або кореляції), отримання PCA від SVD цієї матриці. Повторіть для купки очок. Ви шукаєте деталі будь-якого з цих кроків?
whuber

моє задоволення, бешкетник. щоб проілюструвати мою думку. n.rows = 20 n.cols = 30 sq = seq (1600) rast = raster (матриця (sq, nrow = n.row, byrow = T)) rast2 = raster (матриця (sq, nrow = n.cols)) rast2 перевернуто. якщо ви подивитеся на свої карти, то побачите, що насправді у вас є 20 стовпців замість 30 (широкі комірки на осі x, лише 20 з них). просто хотів допомогти.

Можливо, вам буде цікаво знати, що незабаром вийшов новий вдосконалений пакет методів GW для R, включаючи GW PCA - він був представлений на GISRUK 2013 минулого місяця.
AnserGIS

На основі розгорнутого опису бажаного аналізу ОП настійно рекомендую дослідити літературу про "Основні координати сусідніх матриць" (AKA, Eigenvectors Moran). Цей метод спочатку був запропонований у "Borcard D., & P. ​​Legendre (2002)" всемасштабний просторовий аналіз екологічних даних за допомогою основних координат сусідніх матриць. Екологічне моделювання 153: 51-68 'і є дуже потужним для оцінки даних у кількох областях просторової шкали, що GWPCA не робитиме. Цей метод реалізований у бібліотеці spaceMaker та PCNM R.
Джефрі Еванс

Відповіді:


29

"Географічно зважений PCA" дуже описовий: в R, програма практично пише сама. (Для цього потрібно більше рядків коментарів, ніж фактичних рядків коду.)

Почнемо з ваг, тому що саме тут географічно зважені деталі PCA від компанії PCA. Термін "географічний" означає ваги залежать від відстані між базовою точкою та місцями даних. Стандартне - але далеко не лише - зважування - це гауссова функція; тобто експоненціальний розпад з відстанню квадрата. Користувачеві необхідно вказати швидкість занепаду або - більш інтуїтивно - характерну відстань, на яку відбувається фіксована кількість занепаду.

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 застосовується або до коваріаційної або кореляційної матриці (яка є похідною від коваріації). Ось тут функція для обчислення зважених коваріацій чисельно стабільним способом.

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

Кореляція виводиться звичайним способом, використовуючи стандартні відхилення для одиниць вимірювання кожної змінної:

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

Тепер ми можемо зробити 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))
}

(Це поки чисте 10 рядків виконуваного коду. Нижче буде потрібно лише ще один, після того, як ми опишемо сітку, над якою буде виконано аналіз.)


Проілюструємо деякі випадкові вибіркові дані, порівнянні з описаними у запитанні: 30 змінних у 550 місцях.

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)

Географічно зважені обчислення часто проводяться на вибраному наборі місць, таких як уздовж трансекта або в точках звичайної сітки. Давайте скористаємося грубою сіткою, щоб отримати певний погляд на результати; пізніше - як тільки ми будемо впевнені, що все працює, і ми отримуємо те, що хочемо - ми можемо вдосконалити сітку.

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

Існує питання, яку інформацію ми хочемо зберегти від кожного УПС. Як правило, PCA для n змінних повертає відсортований список з n власних значень і - у різних формах - відповідний перелік n векторів, кожен з довжини n . Це n * (n + 1) цифр для відображення! Скориставшись деякими підсказками із питання, давайте складемо власні значення. Вони витягуються з результату атрибуту 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))

На цьому машина закінчується менше ніж за 5 секунд. Зауважте, що в дзвінку до використовувалася характерна відстань (або "пропускна здатність") 1 gw.pca.


Решта - питання прибирання. Давайте відобразимо результати за допомогою rasterбібліотеки. (Натомість результати можна записати у сітковому форматі для післяобробки з ГІС.)

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

Карти

Це перші чотири з 30 карт, що показують чотири найбільші власні значення. (Не надто хвилюйтеся їх розмірами, які перевищують 1 у кожному місці. Нагадаємо, ці дані генерувалися повністю випадковим чином, і тому, якщо вони взагалі мають будь-яку кореляційну структуру - на що, мабуть, вказують великі власні значення на цих картах - це виключно через випадковість і не відображає нічого "реального", що пояснює процес генерації даних.)

Змінювати пропускну здатність доречно. Якщо воно занадто мало, програмне забезпечення буде скаржитися на особливості. (Я не будував жодної перевірки помилок у цій реалізації голих кісток.) ​​Але зменшення її з 1 до 1/4 (і використання тих же даних, що і раніше) дає цікаві результати:

Карти 2

Зверніть увагу на тенденцію, щоб точки навколо кордону давали незвичайно великі головні власні значення (показані на зелених місцях верхньої лівої карти), тоді як усі інші власні значення знижуються для компенсації (показано світло-рожевим на трьох інших картах) . Це явище та багато інших тонкощів PCA та географічного зважування потрібно зрозуміти, перш ніж можна надійно сподіватися на тлумачення географічно зваженої версії PCA. А потім є інші 30 * 30 = 900 власних векторів (або "навантажень"), які слід врахувати ....


1
Чудовий, як завжди @whuber, дуже дякую!
Майкл Маркієта

1
просто хотіли зробити вам зрозуміти, що у функції to.raster вам потрібно мати матрицю (u, nrow = n.rows, byrow = TRUE) замість матриці (u, nrow = n.cols).

1
@cqh Дякую, що так уважно переглянули цей код! Ви вказуєте на законне занепокоєння; Пригадую, мені довелося розібратися з цим питанням. Однак я вважаю, що код є правильним, як він є. Якби я змішав впорядкування рядків / стовпців, ілюстрації були б повністю (і очевидно) накручені. (Тому я перевірив різні показники рядків і стовпців.) Вибачаюсь за невдалий вираз nrow=n.cols, але саме так воно вийшло (виходячи з того, як pointsбуло створено), і я не хотів повертатися назад і перейменовувати все.
whuber

14

Оновлення:

Зараз на CRAN - GWmodel доступний спеціалізований пакет R, який включає географічно зважений PCA серед інших інструментів. З веб-сайту автора :

Наш новий пакет R для географічно зваженого моделювання, GWmodel, нещодавно був завантажений в CRAN. GWmodel пропонує ряд підходів до аналізу географічно зважених даних в рамках одного пакету, включаючи описову статистику, кореляцію, регресію, загальні лінійні моделі та аналіз основних компонентів. Регресійні моделі включають різні для даних з гауссовими, логістичними та пуассоновими структурами, а також регресійні хребти для роботи з корельованими прогнозами. Новою особливістю цього пакету є надання надійних версій кожної техніки - вони стійкі до впливу людей, що втрачають силу.

Місця для моделювання можуть бути або в проектованій системі координат, або задані з використанням географічних координат. Показники відстаней включають Евклідову, таксабічну (Манхеттен) та Мінковську, а також відстані Великого кола для місць, визначених координатами широти / довготи. Також пропонуються різні методи автоматичної калібрування, і є кілька корисних інструментів побудови моделі, які допомагають вибрати з альтернативних прогнозів.

Наведені також приклади наборів даних, і вони використовуються в супровідній документації для ілюстрацій використання різних методик.

Більш детально при попередньому перегляді майбутнього документу .


Сумніваюся, чи існує рішення, готове до використання, підключіть ваші дані. Але я дуже сподіваюся на те, що я виявився неправильним, оскільки хотів би перевірити цей метод з деякими моїми даними.

Деякі варіанти врахування:


Марі-Дел'Олмо та його колеги використовували баєсівський факторний аналіз для обчислення індексу дефіциту для невеликих районів Іспанії:

Байєсівський факторний аналіз для обчислення показника дефіциту та його невизначеності. Марі-Дел'Олмо М, Мартінес-Бенеїто М.А., Боррелл С, Зурріага О, Ноласко А, МФ Домінгес-Берхон. Епідеміологія . 2011. травень; 22 (3): 356–64.

У статті вони містять специфікацію для моделі WinBUGS, виконаної з R, яка може вас почати.


adegenet R пакет реалізуєspcaфункціонувати. Хоча вона зосереджена на генетичних даних, вона може бути максимально наближеною до вирішення проблеми, яку ви можете отримати. Або безпосередньо використовуючи цей пакет / функцію, або змінивши його код. Існує віньєтка про проблему, яка повинна вас вставити та працювати.


Дослідники із кластеру стратегічних досліджень активно працюють над цією темою. Особливо Пол Гарріс та Кріс Брансдон (тут презентацію я натрапив). Нещодавня публікація Павла та Урської ( повний текст ) також може бути корисним ресурсом:

Demšar U, Harris P, Brunsdon C, Fotheringham AS, McLoone S (2012) Аналіз основних компонентів просторових даних: огляд. Літописи Асоціації американських географів

Чому б вам не спробувати зв’язатися з ними і не запитати про те, які саме рішення вони використовують? Вони можуть охоче поділитися своєю роботою або навести вас у хорошому напрямку.


Cheng, Q. (2006) Просторовий і просторово зважений основний компонент для обробки зображень. IGARSS 2006: 972-975

папір згадує за допомогою системи GeoDAS GIS . Можливо, це ще одна ведуча.


2
+1 У презентації Брансдона наголошується на використанні PCA як дослідницького інструменту для пошуку місцевих багатоваріантних людей. (Це використання також міститься у spcaвіньєтці.) Це потужне і законне використання для GWPCA. (Однак, цей метод міг би бути значно вдосконалений і бути більше в дусі дослідницького просторового аналізу даних, якби PCA було замінено більш надійною процедурою.)
whuber

Схоже, альтернативою буде ядро ​​PCA. tribesandclimatechange.org/docs/tribes_450.pdf
Джефрі Еванс

1
Дякую за оновлену інформацію - GWmodelсхоже на пакет, який варто придбати.
whuber
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.