我正在尝试转换一个"im";我制作的像素图像变成了光栅图像。";im";使用以下代码创建:
library(sf)
library(spatstat)
library(rgeos)
library(raster)
# read ebird data
ebd_species <- ("ebd_hooded.txt") %>%
read_ebd()
# extracting coordinates
latitude_species <- ebd_species$latitude
longitude_species <- ebd_species$longitude
#convert to spatial object
coordinates1 <- data.frame(x = longitude_species, y = latitude_species) %>% st_as_sf(coords = c("x", "y"))
# converting to point pattern data
coordinates <- as.ppp(coordinates1)
# density image
a <- density(coordinates,2)
plot(a)
这是我得到的情节:绘制
我想做的是将其转换为光栅。然后我想使用ebird数据的坐标从光栅中提取密度值。
这里是一个最小的、自包含的、可重复的示例(基于?im
中的第一个示例(:
library(spatstat)
mat <- matrix(1:1200, nrow=30, ncol=40, byrow=TRUE)
m <- im(mat)
解决方案
library(raster)
r <- raster(m)
看起来您直接在spatstat中使用地理坐标(经度、纬度(。你确定这在你的情况下可以吗?对于远离赤道的地区来说,这可能会产生很大的误导。考虑使用sf::st_transform()
投影到平面坐标(请参阅我在本网站上的其他答案,了解执行此操作的代码(。此外,在较新版本的sf
中,您可以使用例如as.ppp()
直接从sf
转换为spatstat
格式。
如果您想要对数据点的强度进行内核密度估计,可以使用density.ppp()
:中的选项at = "points"
a <- density(coordinates, 2, at = "points")
则a
只是长度等于包含每个数据点的强度估计的点的数量的向量。这使用";省略一个";默认情况下的估计,以最大限度地减少偏差(请参阅density.ppp
的帮助文件(。