Як перекласти набори даних Джона Сноу для відображення координат


14

У пакеті HistData для R ( https://r-forge.r-project.org/R/?group_id=574 ) я маю набори даних, пов’язані з картою Джона Сноу про спалах холери в Лондоні 1854 р. Я вважаю, що вони є авторитетними, ретельно оцифрованими під наглядом Вальтера Тоблера. Деякі деталі цих наборів даних описані Джоном Маккензі за посиланням http://www1.udel.edu/johnmack/frec480/cholera/cholera2.html .

На жаль, для координат загибелі, насосів і вулиць використовується довільна система координат, а не відображення координат, придатних для інших програм ГІС або програмного забезпечення для відображення в R (просторові пакети, ggmap тощо)

У http://freakonometrics.hypotheses.org/19213 Артур Шарпентьє використовує ggmap з версією даних Джона Сноу з http://www.rtwilson.com/downloads/SnowGIS_v2.zip . Однак у Cholera_Deaths.shpфайлі перелічено лише 489 смертей, а не 578, про які я записав HistData::Snow.deaths.

Одна ідея - знайти співвідношення між засобами та стандартними відхиленнями координат (x, y) лінійно і масштабувати лінійно, але, можливо, є кращий спосіб?

Ось що я спробував поки що

> data(Snow.deaths, package="HistData")
> D <- Snow.deaths[,2:3]
> colMeans(D)
       x        y 
13.03312 11.69721 
> var(D)
          x         y
x 3.8150987 0.3802654
y 0.3802654 2.7213828

Прочитайте файл Cholera_deaths

> folder <- "C:/Dropbox/R/data/Snow/SnowGIS_v2/SnowGIS"
> library(maptools)
> deaths <- readShapePoints(file.path(folder, "Cholera_Deaths"))
> head(deaths@coords)
  coords.x1 coords.x2
0  529308.7  181031.4
1  529312.2  181025.2
2  529314.4  181020.3
3  529317.4  181014.3
4  529320.7  181007.9
5  529336.7  181006.0
> # deaths has only 250 observations; 489 deaths
> sum(deaths@data$Count)
[1] 489

 > # try to relate to Snow.deaths
> X <- deaths@coords
> colnames(X) <- c("x", "y")
> 
> XX <- data.frame(X, Freq=deaths@data$Count)
> XX <- vcdExtra::expand.dft(XX)
> 
> colMeans(XX)
       x        y 
529414.8 181031.9 
> var(XX)
          x        y
x 10813.816 1521.693
y  1521.693 6227.924
>

Гаразд, тоді я намагаюся змінити масштаб, Dщоб мати ті ж засоби та стандартні відхилення, що і тут XX, але щось тут не працює належним чином - засоби стовпця Dscaledповинні виявитись такими, як XX:

> # scale D to have the same means and standard deviations as XX
> Dscaled <- scale(D, center=TRUE, scale=TRUE)
> Dscaled <- scale(Dscaled, center=colMeans(XX), scale=sqrt(diag(var(XX))))
> colMeans(Dscaled)
        x         y 
-5091.040 -2293.947 
>

EDIT: У цій проблемі може бути корисним побачити карту Сноу, як намальовано новою функцією, SnowMap(axis.labels=TRUE)тепер у версії розробки HistData(rev 102) на R-Forge. Мітки осей показують походження системи координат у нижньому лівому куті, як вони є у моїх Snow.*наборах даних.

Снігова карта


Я тільки намагався масштабувати насоси з кожного набору даних, щоб відповідати. Я не вірю, що лінія в допомогу (Snow.pumps) про координати становлять 100 метрів, оскільки шкала близько 54 (і переклад) робить найкращу роботу зі відображенням їх у координати сітки Великобританії shapefile (які, безумовно, є у метрів). Навіть тоді точки точно не перетинаються, явно присутній якийсь інший обертання / перекос. Оскільки є менше насосів, можна визначити відповідні насоси у кожному наборі даних та обчислити зсув / переклад для них.
Спайдермен

Я припускаю, що ви подивилися на HistData / inst / doc / Snow_deaths-duplicates.html і вважаєте це непосильним?
barrycarter

Мені також спало на думку, що я міг отримати лінійне перетворення координат у своїх Snow.*файлах у ті, які є на базі карти на основі ГІС, з розташуванням двох насосів або трьох, щоб перевірити точність. На жаль, у SnowGISфайлах немає міток для насосів , і я не бачив приклад того, як побудувати їх, щоб я міг візуально порівнювати їх.
користувач101089

1
На секунду там, прочитавши вашу назву, я подумав, що ви хочете скласти координати у Вестеросі .
user35594

Відповіді:


4

Можливо, оцініть файл форми з http://donboyes.com/2011/10/14/john-snow-and-serendipity, він має 578 балів.

Я не думаю, що спроби пов’язати снігові смерті HistData з версією Робіна Вілсона (@robintw) будуть працювати, оскільки формулера містить єдину точкову координату для кількох смертей за однією адресою, а не кілька точок, укладених назад з вулиці в карта .

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

Витяг карти, що постачається у завантаженні :

введіть тут опис зображення

Витяг з версії UCLA :

введіть тут опис зображення


Чудово! Для конкретності посилання на .shpфайли - donboyes.com/download/snow_shp.zip
user101089

2

Щоб завершити відповідь на це питання, наступний код знаходить лінійну трансформацію координат у вихідних файлах HistDataTobler (in ) та тих, що були запропоновані Дон Бойз.

folder <- "C:/Dropbox/R/data/Snow/snow_shp"
library(maptools)
deaths <- readShapePoints(file.path(folder, "deaths_gcs"))
data(Snow.deaths, package="HistData")
X <- deaths@coords
D <- Snow.deaths[,2:3]

Потім співвіднесіть і регресуйте D [, 1] на X [, 1] і D [, 2] на X [, 2]. Лінійне перетворення задано коефіцієнтами регресії.

> cor(D[,1], X[,1])
[1] 0.9999664
> cor(D[,2], X[,2])
[1] 0.9995559
> 
> # linear transformations to GIS coords
> lm(D[,1] ~ X[,1])

Call:
lm(formula = D[, 1] ~ X[, 1])

Coefficients:
(Intercept)       X[, 1]  
      185.4       1264.7  

> 
> lm(D[,2] ~ X[,2])

Call:
lm(formula = D[, 2] ~ X[, 2])

Coefficients:
(Intercept)       X[, 2]  
    -105441         2047  
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.