R语言 利用nndist.ppx求多维点模式的近邻距离

vngu2lb8  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(134)

我是相当新的R和编程一般,所以我感谢您的投入。
我试图获得一组点的最近邻距离。我的数据由不同物种形态特征PCA的前4个主成分(PC)的得分组成,每个物种有几个个体,总共276行。
因此,我创建了我的ppx,将每一个PC(PC 1、PC 2、PC 3、PC 4)的一列和我的标记(每一个物种的学名)的一列组合在一起。我按列从原始PCA对象提取坐标。

Multidimensional point pattern 
276 points 
4-dimensional space coordinates (PC1,PC2,PC3,PC4)
1 column of marks: ‘Species_marks’

我一开始尝试只获取第一个和第二个PC之间的距离,但现在我意识到我想要的是每个物种返回的所有4个维度上的距离,我想要的是每个个体的最近邻,由物种分隔(因此是每个物种的最近邻)。
我把这一行的输出解释为我上面所描述的,对吗?

PPX_nndistance <- nndist.ppx(My_PCA_Points, by=Species_marks)

输出结果是一个矩阵,其点数/行数(276)与原始数据相同,每个物种各占一列,其中包含每个点与每个物种的最近邻点之间的距离值。
你能确认这个函数是在计算四维空间中两点之间的欧几里德距离吗?
非常感谢你的帮助。

x759pob2

x759pob21#

是的,当您在nndist()中使用参数by = "marks"时,您可以获得从每个数据点到由模式标记指定的每个物种的最近其他点的距离(无论您的点在什么维度上-在本例中为维度4)。

library(spatstat)
co <- as.data.frame(matrix(runif(10*4), ncol = 4))
dat <- cbind(co, species = rep(c("a","b"), each = 5))
dat
#>            V1         V2         V3          V4 species
#> 1  0.63445421 0.02342485 0.81973509 0.747078710       a
#> 2  0.64659444 0.08671850 0.41461989 0.479899769       a
#> 3  0.98141590 0.91534392 0.11993177 0.225535950       a
#> 4  0.08795223 0.08288239 0.50009446 0.604776775       a
#> 5  0.10289099 0.48330815 0.68406240 0.035143386       a
#> 6  0.11829745 0.19811870 0.65028245 0.482867938       b
#> 7  0.32563624 0.55886364 0.17271701 0.001583984       b
#> 8  0.28140749 0.38131846 0.09478723 0.404689925       b
#> 9  0.14586923 0.86017444 0.20450944 0.786701343       b
#> 10 0.95229731 0.94235418 0.94513459 0.605581855       b
X <- ppx(dat)
X
#> Multidimensional point pattern
#> 10 points 
#> 4-dimensional space coordinates (V1,V2,V3,V4)
#> 1 column of marks: 'species'
nndist(X, by = "marks")
#>            a         b
#> 1  0.4895471 0.6288539
#> 2  0.4895471 0.5728002
#> 3  0.9748167 0.7810672
#> 4  0.5787884 0.2271969
#> 5  0.7203404 0.5321360
#> 6  0.2271969 0.6122530
#> 7  0.5638479 0.4494952
#> 8  0.5728002 0.4494952
#> 9  0.8532317 0.6369029
#> 10 0.9093800 1.1128385

相关问题