用R中的LinearK函数分析章鱼捕获量
我希望你能帮我解决这个我无法解决的问题。对不起,如果我在写这篇文章时犯了一些错误,我的英语现在有点生疏了 问题是。我有.shp数据,我想在R中分析。shp可以是表示捕捉章鱼的陷阱线的线,也可以是位于这些线正上方的点,表示我们捕捉章鱼的位置 我试图回答的问题是:章鱼是否有统计分组? 经过一点调查,我觉得我需要使用R及其linearK函数来回答这个问题,使用Maptools、SpatStat和Sp库 以下是我在RStudio中使用的代码: 加载库用R中的LinearK函数分析章鱼捕获量,r,cluster-analysis,spatial,spatstat,R,Cluster Analysis,Spatial,Spatstat,我希望你能帮我解决这个我无法解决的问题。对不起,如果我在写这篇文章时犯了一些错误,我的英语现在有点生疏了 问题是。我有.shp数据,我想在R中分析。shp可以是表示捕捉章鱼的陷阱线的线,也可以是位于这些线正上方的点,表示我们捕捉章鱼的位置 我试图回答的问题是:章鱼是否有统计分组? 经过一点调查,我觉得我需要使用R及其linearK函数来回答这个问题,使用Maptools、SpatStat和Sp库 以下是我在RStudio中使用的代码: 加载库 library(spatstat) library
library(spatstat)
library(maptools)
library(sp)
使用轨迹创建linnet对象
t1<- as.linnet(readShapeSpatial("./20170518/t1.shp"))
绘制它以确保一切正常
plot(t1)
使用点创建ppp对象
p1<- as.ppp(readShapeSpatial("./20170518/p1.shp"))
p1绘图(p1)
如果(!is.vector(xrange)| | length(xrange)!=2 | | xrange[2L]<,则出现错误:
缺少需要TRUE/FALSE的值
此外:警告信息:
1:参数maxsize和markscale的解释已更改(在spatstat版本1.37-0及更高版本中)。现在,圆的大小是通过其直径测量的。
2:在plot.ppp(x,…,multiplot=FALSE,do.plot=FALSE)中:
所有标记值均为NA;仅打印位置。
3:在plot.ppp(x,…,multiplot=FALSE,do.plot=FALSE)中:
所有标记值均为NA;仅打印位置。
4:在plot.ppp(x,…,multiplot=FALSE,do.plot=FALSE)中:
所有标记值均为NA;仅打印位置。
5:在plot.ppp(x,…,multiplot=FALSE,do.plot=FALSE)中:
所有标记值均为NA;仅打印位置。
6:在plot.ppp(x,…,multiplot=FALSE,do.plot=FALSE)中:
所有标记值均为NA;仅打印位置。
7:在plot.ppp(x,…,multiplot=FALSE,do.plot=FALSE)中:
所有标记值均为NA;仅打印位置。
现在剩下的是将对象连接到lpp对象中,并使用linearK函数对其进行分析
> pt1 <- lpp(p1,t1)
> linearK(pt1)
Function value object (class ‘fv’)
for the function r -> K[L](r)
......................................
Math.label Description
r r distance argument r
est {hat(K)[L]}(r) estimated K[L](r)
......................................
Default plot formula: .~r
where “.” stands for ‘est’
Recommended range of argument r: [0, 815.64]
Available range of argument r: [0, 815.64]
pt1线性标记(pt1)
函数值对象(类“fv”)
对于函数r->K[L](r)
......................................
数学标签描述
距离变元
est{hat(K)[L]}(r)估计的K[L](r)
......................................
默认绘图公式:。~r
where“.”代表“est”
建议的参数范围r:[0815.64]
参数r的可用范围:[0815.64]
这就是我现在的情况。我不知道为什么绘图函数不能与我的ppp对象一起工作,以及如何理解linearK函数的返回。帮助(linearK)没有提供任何线索。因为我有很多轨迹,每个轨迹都有一组点,我想要的结果是某种总结,比如x轨迹分析、a分组、b分散和c未知
谢谢你的时间,如果你能帮我解决这个问题,我将不胜感激
编辑:这里有一个包含一天所有shp文件(包括轨迹和点)的zip文件链接,还有一个包含我的代码的txt文件。前两条一般建议:(1)每次创建复杂对象时,都要在终端上打印出来,看看是否符合预期。(2)出现错误时,立即键入
traceback()
并复制输出。这将准确显示检测到错误的位置
ppp
对象必须包含研究区域(窗口)的规范。在您的代码中,对象p1
是通过将类SpatialPointsDataFrame
的数据转换为类ppp
的对象创建的,该类数据不包括研究区域的规范,通过函数as.ppp.SpatialPointsDataFrame
转换为类ppp
的对象,在该类对象中,通过使用坐标。不幸的是,在您的示例中,p1
中只有一个数据点,因此默认边界框是宽度为0、高度为0的矩形。[这可以通过打印p1
来显示]此类对象通常可以由spatstat
处理,但此特定对象会在函数plot.solist
中触发一个错误,该函数期望windows具有非零大小。我将修复该错误,但
就你而言,我建议你这样做
Window(p1) <- Window(t1)
Window(p1)我已经找到了一个解决方案。正如Adrian Baddeley所注意到的,owin
对象有一个问题。如果我以手动方式创建ppp对象而不是转换我的点集,这个问题似乎被绕过了(没有真正解决)
我还更改了rgdal::readOGR
的readShapeFile
函数,因为第一个函数已被弃用,这就是我收到警告的原因
这是我现在正在使用的R脚本,评论澄清:
#first install spatstat, maptools y sp
#load them
library(spatstat)
library(maptools)
library(sp)
#create an array of folders, will add more when everything works fine
folders=c("20170518")
for(f in folders){
#read all shp from that folder, both points and tracks
pointfiles <- list.files(paste("./",f,"/points", sep=""), pattern="*.shp$")
trackfiles <- list.files(paste("./",f,"/tracks", sep=""), pattern="*.shp$")
#for each point and track couple
for(i in 1:length(pointfiles)){
#create a linnet object with the track
t<- as.linnet(rgdal::readOGR(paste("./",f,"/tracks/",trackfiles[i], sep="")))
#plot(t)
#create a ppp object for each set of points
pre_p<-rgdal::readOGR(paste("./",f,"/points/",pointfiles[i], sep=""))
#plot(p)
#obtain the coordinates the current set of points
c<-coordinates(pre_p)
#create vector of x coords
xc=c()
#create vector of y coords
yc=c()
#not a very good way to fill my vectors but it works for my study area
for(v in c){
if(v>4000000){yc<-c(yc,v)}
else {if(v<4000000 && v>700000){xc<-c(xc,v)}}
}
print(xc)
print(yc)
#create a ppp object using the vectors of x and y coords, and a window object
#extracted from my set of points
p=ppp(xc,yc,Window(as.ppp(pre_p)))
#join them into an lpp object
pt <- lpp(p,t)
#plot(pt)
#analize it with the linearK function, nsim=9 for testing purposes
#envelope.lpp is the method for analyzing linear point patterns
assign(paste("results",f,i,sep="_"),envelope.lpp(pt, nsim=9, fun=linearK))
}#end for each points & track set
}#end for each day of study
#首先安装spatstat,maptools y sp
#装上
图书馆(spatstat)
图书馆(地图工具)
图书馆(sp)
#创建一个文件夹数组,当一切正常时将添加更多文件夹
文件夹=c(“20170518”)
用于(文件夹中的f){
#读取该文件夹中的所有shp,包括点和轨迹
点文件你更有可能得到一个很好的答案,你让这个例子完全重现。你,先生,完全正确。我在问题的底部添加了一个链接。谢谢你的兴趣。非常感谢阿德里安的回答。我也注意到ppp对象是我所有麻烦的开始,所以我决定尝试创建我的它以一种更为手动的方式工作,而且似乎很有效。
Window(p1) <- Window(t1)
#first install spatstat, maptools y sp
#load them
library(spatstat)
library(maptools)
library(sp)
#create an array of folders, will add more when everything works fine
folders=c("20170518")
for(f in folders){
#read all shp from that folder, both points and tracks
pointfiles <- list.files(paste("./",f,"/points", sep=""), pattern="*.shp$")
trackfiles <- list.files(paste("./",f,"/tracks", sep=""), pattern="*.shp$")
#for each point and track couple
for(i in 1:length(pointfiles)){
#create a linnet object with the track
t<- as.linnet(rgdal::readOGR(paste("./",f,"/tracks/",trackfiles[i], sep="")))
#plot(t)
#create a ppp object for each set of points
pre_p<-rgdal::readOGR(paste("./",f,"/points/",pointfiles[i], sep=""))
#plot(p)
#obtain the coordinates the current set of points
c<-coordinates(pre_p)
#create vector of x coords
xc=c()
#create vector of y coords
yc=c()
#not a very good way to fill my vectors but it works for my study area
for(v in c){
if(v>4000000){yc<-c(yc,v)}
else {if(v<4000000 && v>700000){xc<-c(xc,v)}}
}
print(xc)
print(yc)
#create a ppp object using the vectors of x and y coords, and a window object
#extracted from my set of points
p=ppp(xc,yc,Window(as.ppp(pre_p)))
#join them into an lpp object
pt <- lpp(p,t)
#plot(pt)
#analize it with the linearK function, nsim=9 for testing purposes
#envelope.lpp is the method for analyzing linear point patterns
assign(paste("results",f,i,sep="_"),envelope.lpp(pt, nsim=9, fun=linearK))
}#end for each points & track set
}#end for each day of study