用R中的LinearK函数分析章鱼捕获量

时间:2017-08-22 11:55:17

标签: r cluster-analysis spatial linear spatstat

我希望你能帮助我解决这个问题,我找不到如何克服。对不起,如果我在写这篇文章时犯了一些错误,我的英语现在有点生疏了。

这是一个问题。我有想要在R中分析的.shp数据.shp可以是代表我们设置为捕捉章鱼的陷阱线的直线,也可以是直接位于这些线上的点,表示我们在哪里捕获过的。

Clarification image

我想回答的问题是:章鱼的统计分组与否?

经过一些调查后,在我看来,我需要使用R及其linearK函数来回答这个问题,使用Maptools,SpatStat和Sp库。

以下是我在RStudio中使用的代码:

加载库

library(spatstat)
library(maptools)
library(sp)

使用轨道

创建linnet对象
t1<- as.linnet(readShapeSpatial("./20170518/t1.shp"))

我收到以下警告,但似乎有效

Warning messages:
1: use rgdal::readOGR or sf::st_read 
2: use rgdal::readOGR or sf::st_read 

绘制它以确保一切正常

plot(t1)

Plot of t1 object

使用点

创建一个ppp对象
p1<- as.ppp(readShapeSpatial("./20170518/p1.shp"))

我在这里得到了同样的警告,但是当我试图绘制时,真正的问题就开始了:

> plot(p1)
Error in if (!is.vector(xrange) || length(xrange) != 2 || xrange[2L] <  : 
  missing value where TRUE/FALSE needed
In addition: Warning messages:
1: Interpretation of arguments maxsize and markscale has changed (in spatstat version 1.37-0 and later). Size of a circle is now measured by its diameter. 
2: In plot.ppp(x, ..., multiplot = FALSE, do.plot = FALSE) :
  All mark values are NA; plotting locations only.
3: In plot.ppp(x, ..., multiplot = FALSE, do.plot = FALSE) :
  All mark values are NA; plotting locations only.
4: In plot.ppp(x, ..., multiplot = FALSE, do.plot = FALSE) :
  All mark values are NA; plotting locations only.
5: In plot.ppp(x, ..., multiplot = FALSE, do.plot = FALSE) :
  All mark values are NA; plotting locations only.
6: In plot.ppp(x, ..., multiplot = FALSE, do.plot = FALSE) :
  All mark values are NA; plotting locations only.
7: In plot.ppp(x, ..., multiplot = FALSE, do.plot = FALSE) :
  All mark values are NA; plotting locations only.

现在剩下的就是将对象连接到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]

这是我现在的情况。我不知道的是为什么plot函数不能用于我的ppp对象以及如何理解linearK函数的返回。帮助(linearK)没有提供任何线索。由于我有很多曲目,每个都有一组积分,我想要的结果将是某种总结,比如x曲目分析,分组,分散和未知。

感谢您的时间,如果您能帮助我解决这个问题,我将不胜感激。

编辑:这是一个zip文件的链接,其中包含一天的shp文件,曲目和点,以及包含我的代码的txt文件。 https://drive.google.com/open?id=0B0uvwT-2l4A5ODJpOTdCekIxWUU

2 个答案:

答案 0 :(得分:1)

前两条一般建议:(1)每次创建一个复杂的对象,在终端打印,看看它是否符合预期。 (2)当出现错误时,立即键入traceback()并复制输出。这将准确显示检测到错误的位置。

ppp对象必须包含研究区域(窗口)的规范。在您的代码中,对象p1是通过将类SpatialPointsDataFrame的数据转换为类的对象来创建的,该数据不包含通过函数as.ppp.SpatialPointsDataFrame转换的研究区域的规范。 ppp,其中通过获取坐标的边界框来猜测窗口。不幸的是,在您的示例中,p1中只有一个数据点,因此默认边界框是一个宽度为0且高度为0的矩形。[这将通过打印{ {1}}。]这些对象通常可以由p1处理,但是这个特定对象会触发函数spatstat中的一个错误,该错误要求窗口具有非零大小。我会解决这个问题,但是......

在你的情况下,我建议你做

plot.solist
创建Window(p1) <- Window(t1) 后立即

。这将确保p1具有您可能想要的窗口。

如果一切都失败了,请阅读shapefile上的p1小插图......

答案 1 :(得分:0)

我设法找到了解决方案。正如Adrian Baddeley注意到owin对象存在问题。如果我以手动方式创建ppp对象而不是转换我的一组点,那么这个问题似乎被绕过(并没有真正解决)。

我还更改了readShapeFile的{​​{1}}函数,因为第一次被弃用了,这就是我收到警告的原因。

这是我现在正在使用的R脚本,评论说明:

rgdal::readOGR

因此,您可以看到此脚本正在测试CSR每个点并跟踪每一天,现在正常工作。不幸的是,我还没有设法创建报告或报告结果(甚至完全理解它们),我会继续努力。当然我可以使用你的任何建议,因为这是我第一次尝试使用R,并且会发生许多新的错误。

可以找到具有更新文件夹结构的脚本和shp文件here(113 KB大小)