Wie man schöne randlose geografische Themen / Heatmaps mit gewichteten (Vermessungs-) Daten in R erstellt, wahrscheinlich unter Verwendung räumlicher Glättung bei Punktbeobachtungen

Seitdem hat Joshua Katz diese veröffentlichtDialektkarten das können Sie findenüberall im Web mitHarvards DialektumfrageIch habe versucht, seine Methoden zu kopieren und zu verallgemeinern. Josh gab einige seiner Methoden bekanntin diesem Plakat, hat aber (soweit ich weiß) keinen seiner Codes preisgegeben.

Mein Ziel ist es, diese Methoden zu verallgemeinern, damit Benutzer der wichtigsten Umfragedatensätze der US-Regierung ihre gewichteten Daten einfach in eine Funktion einfügen und eine vernünftige geografische Karte erhalten können. Die Geografie ist unterschiedlich: Einige Umfragedatensätze haben ZCTAs, einige Landkreise, einige Bundesstaaten, einige Metrobereiche usw. Es ist wahrscheinlich klug, zunächst jeden Punkt am Schwerpunkt zu zeichnen - es werden die Zentroide erörtertHier und verfügbar für fast jede geografie indie 2010 Gazetteer-Dateien des Census Bureau. Für jeden Vermessungsdatenpunkt haben Sie also einen Punkt auf einer Karte. Einige Umfrageantworten haben eine Gewichtung von 10, andere eine Gewichtung von 100.000! Offensichtlich muss jede "Hitze" oder Glättung oder Färbung, die letztendlich auf der Karte landet, unterschiedliche Gewichte berücksichtigen.

Ich kann gut mit Umfragedaten umgehen, aber ich weiß nichts über räumliche Glättung oder Kernelschätzung. Die Methode, die Josh in seinem Poster verwendet, istk-nearest neighbor kernel smoothing with gaussian kernel was mir fremd ist. Ich bin ein Anfänger im Kartieren, aber ich kann die Dinge im Allgemeinen zum Laufen bringen, wenn ich weiß, was das Ziel sein soll.

Hinweis: Diese Frage ist sehr ähnlich zueine vor zehn Monaten gestellte Frage, die keine verfügbaren Daten mehr enthält. Es gibt auch kleine Informationenauf diesem Thread, aber wenn jemand eine clevere Möglichkeit hat, meine genaue Frage zu beantworten, würde ich das offensichtlich lieber sehen.

Das r Umfragepaket hat asvyplot Funktion, und wenn Sie diese Codezeilen ausführen, können Sie gewichtete Daten auf kartesischen Koordinaten sehen. Aber für das, was ich tun möchte, muss das Plotten auf einer Karte überlagert werden.

library(survey)
data(api)
dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc)
svyplot(api00~api99, design=dstrat, style="bubble")

Für den Fall, dass es von Nutzen ist, habe ich einen Beispielcode veröffentlicht, der jedem, der mir helfen möchte, einen schnellen Einstieg in einige Umfragedaten in kernbasierten statistischen Bereichen (einem anderen geografischen Typ) ermöglicht.

Alle Ideen, Ratschläge und Anleitungen sind willkommen (und werden gutgeschrieben, wenn ich ein offizielles Tutorial / Leitfaden / eine Anleitung dazu erhalten kann)http://asdfree.com/)

Vielen Dank!!!!!!!!!!

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage