我有一个类似于this one from 2014,的问题已得到解答,但数据集不再可用且我们的原始数据结构不同。 (我正处于关键时刻并且难倒,所以如果你能够快速回应我会非常感激!!)
目标:在spatstat与康涅狄格州矿区的点过程模型(ppm)中使用基岩类型作为协变量。
数据:这些文件可从此Dropbox folder获得。岩石数据和CT多边形轮廓来自UConn Magic Library,矿山数据来自USGS矿产资源数据系统。
方法: 我加载了一些相关的包并读入了shapefile(和转换的坐标以匹配CT系统),并将CT多边形用作一个owin对象。
library(rgdal)
library(splancs)
library(spatstat)
library(sp)
library(raster)
library(geostatsp)
#read in shapefiles
ct <-readOGR(".","CONNECTICUT_STATE_POLY")
mrds <-readOGR(".","mrds-2017-02-20-23-30-58")
rock<-readOGR(".","bedrockpolyct_37800_0000_2000_s50_ctgnhs_1_shp_wgs84")
#convert mrds and rock to ct's coord system
tempcrs<-ct@proj4string
mrds<-spTransform(mrds,tempcrs)
rock<-spTransform(rock,tempcrs)
#turn ct shapefile into owin, call it w for window
w <-as.owin(ct)
#subset mrds data to just CT mines
mrdsCT <-subset(mrds,mrds@data$state=="Connecticut")
#ppm can't handle marked data yet, so need to unmark()
#create ppp object for mrds data, set window to w
mrdsCT.ppp <-as.ppp(mrdsCT)
Window(mrdsCT.ppp)<-w
来自&#34;建模R&#34;中的空间点模式;通过Baddeley&amp;特纳(第39页): 不幸的是,spatstat中的像素图像不能具有分类(因子)值,因为R拒绝创建因子值矩阵。为了将分类变量表示为像素图像,分类值应该被编码为整数(为了效率)并且被分配给整数值像素图像。然后,模型公式应该在此图像上调用factor命令。例如,如果fim是具有表示因子级别的整数值的图像,则:
ppm(X, ˜factor(f), Poisson(), covariates=list(f=fim))
shapefile中包含几种不同类型的岩石分类。我对LITHO1很感兴趣,这是一个27级的因素。这是第六个属性。
litho1<-rock[,6]
我(有限但研究)的理解是我需要将shapefile转换为栅格,然后将其转换为图像以便以ppm使用。我从ct创建了一个掩码,并使用了它。
ctmask<-raster(ct, resolution=2000)
ctmask[!is.na(ctmask)] <- 0
litho1rast<-rasterize(litho1,ctmask)
在此之后,我已经尝试了几种方法,但尚未取得成功。我试图遵循链接问题中列出的方法,并在文档中搜索相关的例子(因素,批准,级别)。与之前的问题不同,我的数据已经是一个因素,因此我不清楚为什么要将因子函数应用于它。
查看litho1rast,@ data @ attributes数据帧包含以下内容。如果我绘制它,它只是绘制ID; levelplot函数确实绘制了LITHO1。当我应用因子函数时,ID将被保留但不会保留LITHO1。
$ ID : int [1:1891] 1 2 3 4 5 6 7 8 9 10 ...
$ LITHO1: Factor w/ 27 levels "amphibolite",..: 23 16 23 16 23 16 24 23 16 24 ...
ppm模型需要一个对象类im,所以我将光栅转换为im。我试过两种方法。我可以使ppm执行...但它将每个点视为一个因素而不是27个级别(使用litho1.im或litho1.im2)......
litho1.im<-as.im(litho1rast)
litho1.im2<-as.im.RasterLayer(litho1rast)
model1=ppm(unmark(mrdsCT.ppp) ~ factor(COV1), covariates=list(COV1=litho1.im))
model1
所以,我不太确定从哪里开始。看起来我需要将一个参数传递给as.im,以便它知道保留LITHO1而不是ID。 聪明的想法或导致相关功能或方法非常受欢迎!
答案 0 :(得分:0)
查看您的代码,您似乎没有向field
提供rasterize
参数。
来自rasterize
帮助:
field
数字或字符。要转移的价值。这个可以 是一个数字,或长度相同的数字向量 空间要素(点,线,多边形)的数量。 如果x是a Spatial * DataFrame,这可以是变量的列名 转移。如果缺少,则使用属性索引(即数字 从1到特征数量)。您还可以提供矢量 长度与空间要素的数量相同,或者矩阵在哪里 行数与空间要素数相匹配
在这一行:
litho1rast<-rasterize(litho1,ctmask)
您可能必须指定要在栅格化中使用litho
对象的哪一列。类似的东西:
litho1rast<-rasterize(litho1,ctmask, field = "LITHO1")
答案 1 :(得分:0)
Baddeley&amp; amp;特纳不再是真的 - 引用来自一套非常古老的研讨会笔记。
班级im
的像素图片可以包含因子值(自2011年起)。如果Z
是整数值像素图像(类im
),则可以通过设置levels(Z) <- lev
将lev
设置为因子值图像,其中rasterize
是字符向量可能值的标签。
您不需要使用rock[,6]
:应该可以使用as.im
将maptools
直接转换为像素图像(在加载{{1}}包之后)。< / p>
请参阅Baddeley,Rubak和Turner的书(空间点模式:R 的方法和应用,CRC Press,2016)以获得完整的解释。