【发布时间】:2018-06-24 03:20:06
【问题描述】:
我正在尝试使用 Kcross 进行空间点模式分析。我希望从我的名为“鸟类”的数据集中比较物种 A 和物种 B。感兴趣的变量是species_name。它只有 2 个级别 - species A 和 species B。
以下是我尝试将species_name 设置为多类型对象的代码。
marks(birds) <- factor("species_name") #where birds is a ppp object
Kcross(birds,i = "species A", j = "species B")
但是,我遇到了错误消息:No points have mark i = species A。
我尝试了所有方法但无济于事,需要在这两个物种之间进行 K 杂交。我是否错误地定义了我的多类型对象或 Kcross 函数?这样做的正确方法是什么?
对于一个可重复的例子,请在下面找到鸟类数据集和代码的链接:https://drive.google.com/file/d/1uaQu9LTLqnIjiIRQZLNlraRcLe6nsqkr/view?usp=sharing
library(tidyverse)
library(spatstat)
library(sp)
library(sf)
library(rgdal)
birds = read_csv("birds_sample1.csv")
#create 200x200 polygon as window
x_coord <- c(0,0,200,200,0)
y_coord <- c(0,200,200,0,0)
xym <- cbind(x_coord, y_coord)
p <- Polygon(xym)
ps <-Polygons(list(p),1)
sps <- SpatialPolygons(list(ps))
raster_owin <- as(sps, "owin")
raster_owin
#create ppp object for birds
birds <- st_as_sf(birds, coords = c("X", "Y"))
birds <- as(birds , 'Spatial')
birds<- as(birds, "ppp")
birds<- birds[raster_owin]
#attempt for Kcross, which failed
marks(birds) <- factor("species_name") #where birds is a ppp object
Kcross(birds,i = "species A", j = "species B")
【问题讨论】:
-
marks(birds)返回什么?我认为您的设置不正确,您不应该在"species_name"周围加上引号,它应该是一个与点数长度相同的向量。然后你就调用Kcross(birds),默认设置i为第一级标记,j为第二级 -
感谢您的帮助。
marks(birds)没有返回任何输出。当我删除"species_name"周围的引号并更改为birds$species_name时,出现以下错误:Error inmarkstmp, value = integer(0)) : number of points != 标记数。. When I change tospecies_name, the message becomes,因子错误(species_name) : object 'species_name' not found`。 -
检查 ppp 对象
npoints(birds)中的点数与标记向量length(birds$species_name)的长度。它们需要匹配,以便您可以正确设置每个点的标记。如果您仍然有错误,您可以显示str(birds)或reproducible 示例的输出吗? -
我已经尝试了上述但没有输出。当然,我已经编辑了上面的一个可重复的例子,希望能提供更多信息......
-
谢谢,您能否添加您正在使用的库?
标签: r spatial point spatstat ppp