如何从邮政编码

时间:2017-12-03 06:45:33

标签: r

我有整个美国的移植病例数据,大约有208个邮政编码,用于移植中心。我也有他们的纬度和经度信息。我正在尝试进行空间生存分析,以了解移植中心的空间效应。 我有这个代码,我不知道如何为邻近创建adj.mtx。

survregbayes(formula=Surv(time,cens)~age+sex + +frailtyprior("car",transplantcenter),data=d,survmodel="PO", + dist="loglogistic",mcmc=mcmc,prior=prior,Proximity=adj.mtx)

以下是我的数据:

2 个答案:

答案 0 :(得分:3)

我不认为实际的邮政编码很有用,因为数字邻接不一定与物理邻接相对应。我认为你要问的是如何获得邮政编码的邻域矩阵,但要做到这一点,我相信你需要更多的信息。例如,您可以计算每个邮政编码中心的距离(给定的纬度和经度)和阈值,但由于邮政编码的相对大小,一些较高密度区域的距离较小。

假设你想这样做你可以使用geosphere package.这个包有一个函数调用distHaversine,它接受两个点作为参数,一个可选的球形半径参数,并给出你考虑的点之间的距离地球的曲率和一切​​。

所有这些说法,更好的方法可能是下载邮政编码边界的数据,并查看边界相交的位置。我能找到的最新数据(免费)是here;这很老了。要访问它,请单击下拉菜单并选择邮政编码列表区域。该文件大约500 MB。

解压缩的数据有一个.shp文件,而this post有一个很好的教程来处理形状数据。从这个人的帖子中扯下一些东西,下面的代码将形状文件放入内存中:

# Install dependencies
install.packages("rgeos")
install.packages("maptools")
library(rgeos)
library(maptools)
# Define the projection to be used
crswgs84=CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
# Load the shapes
postal.codes=readShapePoly("tl_2013_us_zcta510.shp",proj4string=crswgs84,verbose=TRUE)

跟着this回答,在rgeos包中有一个名为gTouches的函数,它从多边形形状边界构造一个邻接矩阵。

# Get adjacency matrix, returnDense=FALSE is to get a sparse matrix for memory purposes
adj.mat <- gTouches(postal.codes, byid=TRUE, returnDense=FALSE)

为所有邮政编码运行该代码可能非常耗时(并且可能由于位置的极端差异而引发一些错误),但是只访问您感兴趣的邮政编码,您可以对形状对象进行行索引。例如,通过执行以下操作来获取前200个邮政编码的邻接:

adj.mat.sub <- gTouches(postal.codes[1:200,], byid=TRUE, returnDense=TRUE)

实际的邮政编码本身位于形状对象内的数据框中。您可以通过执行以下操作来访问它们:

postal.codes@data$ZCTA5CE10

您可以使用它们来获取您自己的数据中存在的邮政编码的索引,并更快地计算该较小的相关子集上的邻接矩阵。所有这些都需要对人口普查数据和您自己的数据框进行一些记账。

目前可能有更多当前的邮政编码几何形式可供购买(或可能免费),但人口普查数据是可用且易于使用的良好组合。

答案 1 :(得分:2)

我同意Ryan Warnick你可能需要多边形。但是,您不应该使用maptools :: readShapePoly。这是一个过时和不完整的功能。

使用sf包(sf_read)或rgdal中的任何一种功能(在这种情况下,通过光栅包更容易)

library(raster)
library(rgdal)

postal.codes <- shapefile("tl_2013_us_zcta510.shp")

你可以尝试按照Ryan Warnick的建议推出自己的邻接矩阵,但是有完善的功能。特别是在spdep包中。

library(spdep)
nb <- poly2nb(postal.codes)

您可以使用nb和spdep :: spdep::nb2mat等函数转换sp2listw

P.S。 <{1}}中有几个距离函数,但geosphere是最准确的。