Как сделать красивые географические тематические / тепловые карты без границ со взвешенными (съемочными) данными в R, возможно, используя пространственное сглаживание на точечных наблюдениях
С тех пор, как Джошуа Кац опубликовал этидиалектные карты что вы можете найтипо всему интернету с помощьюисследование диалекта ГарвардаЯ пытался скопировать и обобщить его методы ... но многое из этого у меня над головой. Джош раскрыл некоторые из своих методовв этом постере, но (насколько я знаю) не раскрыл ни одного своего кода.
Моя цель состоит в том, чтобы обобщить эти методы, чтобы пользователям любого из основных наборов данных государственных исследований Соединенных Штатов было легко сложить свои взвешенные данные в функцию и получить разумную географическую карту. География варьируется: некоторые наборы данных обследования имеют ZCTA, некоторые имеют округа, некоторые имеют штаты, некоторые имеют зоны метро и т. Д. Вероятно, разумно начать с построения каждой точки на центроиде - обсуждаются центроидыВот и доступны для большинства географии вфайлы бюллетеня Бюро переписей 2010 года, Таким образом, для каждой точки данных опроса у вас есть точка на карте. но некоторые ответы на опросы имеют вес 10, у других - 100 000! очевидно, что любой «нагрев», сглаживание или окрашивание, которые в конечном итоге окажутся на карте, должны учитывать различные веса.
Я хорошо разбираюсь в данных опросов, но ничего не знаю о пространственном сглаживании или оценке ядра. метод, который Джош использует в своем постере:k-nearest neighbor kernel smoothing with gaussian kernel
что мне чуждо. Я новичок в картографировании, но обычно могу заставить все работать, если знаю, какой должна быть цель.
Примечание: этот вопрос очень похож навопрос, заданный десять месяцев назад, который больше не содержит доступных данных, Есть также биты информациив этой теме, но если у кого-то есть умный способ ответить на мой точный вопрос, я, очевидно, предпочел бы это увидеть.
Пакет опроса г имеетsvyplot
функции, и если вы запустите эти строки кода, вы можете увидеть взвешенные данные по декартовым координатам. но на самом деле, для того, что я хотел бы сделать, черчение нужно наложить на карту.
library(survey)
data(api)
dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc)
svyplot(api00~api99, design=dstrat, style="bubble")
В случае, если это пригодится, я опубликовал пример кода, который даст любому желающему помочь мне быстро начать с некоторых данных обследования в основных статистических областях (другой тип географии).
Любые идеи, советы, рекомендации будут оценены (и зачислены, если я могу получить официальное руководство / руководство / инструкции дляhttp://asdfree.com/)
Спасибо!!!!!!!!!!
# load a few mapping libraries
library(rgdal)
library(maptools)
library(PBSmapping)
# specify some population data to download
mydata <- "http://www.census.gov/popest/data/metro/totals/2012/tables/CBSA-EST2012-01.csv"
# load mydata
x <- read.csv( mydata , skip = 9 , h = F )
# keep only the GEOID and the 2010 population estimate
x <- x[ , c( 'V1' , 'V6' ) ]
# name the GEOID column to match the CBSA shapefile
# and name the weight column the weight column!
names( x ) <- c( 'GEOID10' , "weight" )
# throw out the bottom few rows
x <- x[ 1:950 , ]
# convert the weight column to numeric
x$weight <- as.numeric( gsub( ',' , '' , as.character( x$weight ) ) )
# now just make some fake trinary data
x$trinary <- c( rep( 0:2 , 316 ) , 0:1 )
# simple tabulation
table( x$trinary )
# so now the `x` data file looks like this:
head( x )
# and say we just wanted to map
# something easy like
# 0=red, 1=green, 2=blue,
# weighted simply by the population of the cbsa
# # # end of data read-in # # #
# # # shapefile read-in? # # #
# specify the tiger file to download
tiger <- "ftp://ftp2.census.gov/geo/tiger/TIGER2010/CBSA/2010/tl_2010_us_cbsa10.zip"
# create a temporary file and a temporary directory
tf <- tempfile() ; td <- tempdir()
# download the tiger file to the local disk
download.file( tiger , tf , mode = 'wb' )
# unzip the tiger file into the temporary directory
z <- unzip( tf , exdir = td )
# isolate the file that ends with ".shp"
shapefile <- z[ grep( 'shp , z ) ]
# read the shapefile into working memory
cbsa.map <- readShapeSpatial( shapefile )
# remove CBSAs ending with alaska, hawaii, and puerto rico
cbsa.map <- cbsa.map[ !grepl( "AK$|HI$|PR$" , cbsa.map$NAME10 ) , ]
# cbsa.map$NAME10 now has a length of 933
length( cbsa.map$NAME10 )
# convert the cbsa.map shapefile into polygons..
cbsa.ps <- SpatialPolygons2PolySet( cbsa.map )
# but for some reason, cbsa.ps has 966 shapes??
nrow( unique( cbsa.ps[ , 1:2 ] ) )
# that seems wrong, but i'm not sure how to fix it?
# calculate the centroids of each CBSA
cbsa.centroids <- calcCentroid(cbsa.ps)
# (ignoring the fact that i'm doing something else wrong..because there's 966 shapes for 933 CBSAs?)
# # # # # # as far as i can get w/ mapping # # # #
# so now you've got
# the weighted data file `x` with the `GEOID10` field
# the shapefile with the matching `GEOID10` field
# the centroids of each location on the map
# can this be mapped nicely?