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.
Snow.*
plikach na te na mapie opartej na GIS z lokalizacjami dwóch pomp lub trzech, aby sprawdzić dokładność. Niestety w SnowGIS
plikach nie ma etykiet dla pomp i nie widziałem przykładu, jak je wykreślić, aby móc porównać je wizualnie.