W pakiecie HistData dla R ( https://r-forge.r-project.org/R/?group_id=574 ) mam zestawy danych związane z mapą wybuchu cholery w Londynie w 1854 roku przez Johna Snowa. Wierzę, że są autorytatywne, ponieważ zostały starannie zdigitalizowane pod nadzorem Waltera Toblera. Niektóre szczegóły dotyczące tych zestawów danych zostały opisane przez Johna Mackenzie na stronie http://www1.udel.edu/johnmack/frec480/cholera/cholera2.html .
Niestety współrzędne śmierci, pomp i ulic używają dowolnego układu współrzędnych, a nie współrzędnych map odpowiednich dla innych aplikacji GIS lub oprogramowania do mapowania w R (pakiety przestrzenne, ggmap itp.)
W http://freakonometrics.hypotheses.org/19213 Arthur Charpentier używa ggmap z wersją danych John Snow z
http://www.rtwilson.com/downloads/SnowGIS_v2.zip . Cholera_Deaths.shp
Plik, jednak wymienia tylko 489 zgonów, a nie 578 Nagrałem w HistData::Snow.deaths
.
Jednym z pomysłów jest znalezienie relacji między średnimi a standardowymi odchyleniami współrzędnych (x, y) i przeskalowanie liniowo, ale może jest lepszy sposób?
Oto, co próbowałem do tej pory
> 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
Przeczytaj plik 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
>
OK, następnie próbuję przeskalować, D
aby mieć te same średnie i standardowe odchylenia co XX
, ale coś tutaj nie działa poprawnie - środki kolumny Dscaled
powinny być równe 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
>
EDYCJA: Pomocne w tym problemie może być zobaczenie mapy Snow'a narysowanej przez nową funkcję, SnowMap(axis.labels=TRUE)
teraz w wersji rozwojowej HistData
(rev 102) na R-Forge. Etykiety osi pokazują początek układu współrzędnych w lewym dolnym rogu, tak jak w moich Snow.*
zestawach danych.
źródło
Snow.*
plikach na te na mapie opartej na GIS z lokalizacjami dwóch pomp lub trzech, aby sprawdzić dokładność. Niestety wSnowGIS
plikach nie ma etykiet dla pomp i nie widziałem przykładu, jak je wykreślić, aby móc porównać je wizualnie.Odpowiedzi:
Być może oceń plik kształtu z http://donboyes.com/2011/10/14/john-snow-and-serendipity, który ma 578 punktów.
Nie sądzę, aby próba powiązania HistData Snow Deaths z wersją Robina Wilsona (@robintw) zadziałała, ponieważ plik kształtu zawiera jedną współrzędną punktu dla wielu zgonów pod jednym adresem, zamiast wielu punktów ułożonych z powrotem na ulicy mapa .
W wersji Robin zdecydowanie brakuje wielu punktów. Z szybkiego spojrzenia wynika, że zginęło całkiem sporo odległych pojedynczych zgonów. Innym problemem jest bliżej środka mapy, gdzie nie została właściwie dopasowana do krawędzi po złożeniu (jest to również widoczne na mapie Wikipedii ), co przesłania kilka punktów.
Wyciąg mapy dostarczonej do pobrania :
Wyciąg z wersji UCLA :
źródło
.shp
plików to donboyes.com/download/snow_shp.zipAby uzupełnić odpowiedź na to pytanie, poniższy kod znajduje liniową transformację współrzędnych w oryginalnych plikach Toblera (in
HistData
) i tych zaproponowanych przez Dona Boyesa.Następnie skoreluj i zresetuj D [, 1] na X [, 1] i D [, 2] na X [, 2]. Transformacja liniowa jest określona przez współczynniki regresji.
źródło