【问题标题】:Plotting Jaccard Index against spatial data (lat-long)针对空间数据绘制 Jaccard 索引(经纬度)
【发布时间】:2021-07-22 13:32:10
【问题描述】:

我正在尝试找到一种方法来绘制矩阵(在本例中为带有 jaccard 索引的矩阵)与空间距离​​(我有纬度和经度数据)的关系。我被告知要使用“geosphere”包,但我无法完全理解如何使用它。

所以如果这里有人精通这些事情,请帮助我

亲切的问候

【问题讨论】:

  • 我应该补充一点,我需要将空间距离转换为以米为单位的常规距离向量
  • 有很多包可以根据longlat数据计算大圆距离。最古老和最经典的是具有spDists 功能的 sp 包。这将返回以米为单位的大圆距离。但是,还有许多其他和更现代的软件包。

标签: vegan geosphere


【解决方案1】:

geosphere确实是一个不错的选择,因为它基于椭球而不是球体,并且比许多其他替代方案(并且直接以米为单位)提供更准确的结果。但是,使用起来更加繁琐,因为它只计算两点之间的距离,或者在矩阵中计算从点到下一个点的轨道长度,而不是整个矩阵。以下是一种简单的方法,可以进行很多不必要的计算,但它比其他方法要简单得多(并且对于任何实际目的来说都足够快)。

假设您有维度为 N 乘以 2 的矩阵 x,其中两列是十进制度的经度和纬度(按此顺序),N 是观察次数:

library(geosphere)
N <- NROW(x)
geodists <- matrix(0, N, N)
for (i in 1:N) for(j in 1:N) geodists[i,j] <- distGeo(x[i,], x[j,])
## alternative for only lower diagonal:
## for(j in 1:(N-1)) for(i in (j+1):N) geodists[i,j] <- distGeo(x[i,], x[j,])
geodists <- as.dist(geodists)

geodists 然后将与 Jaccard 距离类似地排列(假设您使用 vegan 或其他返回标准 dist 结构的包)并且这些可以直接相互绘制。如果你使用了一些包,它给你一个矩阵(它是对称的并且对角线为零),最好将结果更改为距离(as.dist()),它只有下三角形而没有零对角线,因为这些给出了更好的图。

sp 包也使用 WGS84 椭球,但它的结果与 geosphere 给出的结果相差不大(在我的测试中,距离高达 2500 公里的距离小于 0.01%)。 geosphere 可能更准确(并且它还允许替代 WGS84 椭球)。但是,sp 更容易使用,并且会直接为您提供距离的对称矩阵(但以公里而不是米为单位,尽管我在评论中如此声明),您可以使用一个命令:

library(sp)
geodists <- as.dist(spDists(x, longlat=TRUE))*1000 # in metres

【讨论】:

  • sp::spDists 使用 Meeus 算法,geosphere::distMeeus 也有,但geosphere::distGeo 应该更准确。数值上 sp::spDistsgeosphere::distMeeus 在数值精度范围内给出相同的结果。
猜你喜欢
  • 1970-01-01
  • 2015-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
相关资源
最近更新 更多