用于空间点模式分析的 Kcross - 在 R 中
Kcross for spatial point pattern analysis - in R
我正在尝试使用 Kcross 进行空间点模式分析。我希望从名为 'birds' 的数据集中比较物种 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 函数?这样做的正确方法是什么?
对于可重现的示例,请在下面找到 link 鸟类数据集和代码: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")
由于 birds
现在是一个 ppp
对象,属性现在列在 marks
下,因此您必须这样称呼它们,
marks(birds) <- factor(birds$marks$species_name)
然后您可以在不设置这些参数的情况下调用 KCross
,因为默认设置已经将 i
设置为第一级标记,将 j
设置为第二级
levels(marks(birds))
#[1] "Ordinary Snape" "Rose-crested Blue Pipit"
Kcross(birds)
您不需要加载很多库(仍然使用 tidyverse 中的 readr
)来使用 spatstat
执行此操作。下面是几行代码:
library(spatstat)
W <- owin(c(0,200), c(0,200))
birds <- readr::read_csv("https://drive.google.com/uc?export=download&id=1uaQu9LTLqnIjiIRQZLNlraRcLe6nsqkr")
#> Warning: Missing column names filled in: 'X1' [1]
species <- factor(birds$species_name)
birds <- ppp(x = birds$X, y = birds$Y, marks = species, window = W)
#> Warning: data contain duplicated points
Kbirds <- Kcross(birds, i = "Species A", j = "Species B")
plot(Kbirds)
我正在尝试使用 Kcross 进行空间点模式分析。我希望从名为 'birds' 的数据集中比较物种 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 函数?这样做的正确方法是什么?
对于可重现的示例,请在下面找到 link 鸟类数据集和代码: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")
由于 birds
现在是一个 ppp
对象,属性现在列在 marks
下,因此您必须这样称呼它们,
marks(birds) <- factor(birds$marks$species_name)
然后您可以在不设置这些参数的情况下调用 KCross
,因为默认设置已经将 i
设置为第一级标记,将 j
设置为第二级
levels(marks(birds))
#[1] "Ordinary Snape" "Rose-crested Blue Pipit"
Kcross(birds)
您不需要加载很多库(仍然使用 tidyverse 中的 readr
)来使用 spatstat
执行此操作。下面是几行代码:
library(spatstat)
W <- owin(c(0,200), c(0,200))
birds <- readr::read_csv("https://drive.google.com/uc?export=download&id=1uaQu9LTLqnIjiIRQZLNlraRcLe6nsqkr")
#> Warning: Missing column names filled in: 'X1' [1]
species <- factor(birds$species_name)
birds <- ppp(x = birds$X, y = birds$Y, marks = species, window = W)
#> Warning: data contain duplicated points
Kbirds <- Kcross(birds, i = "Species A", j = "Species B")
plot(Kbirds)