微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R中是否有办法创建R中最接近的邻居和变量值的矩阵?

如何解决R中是否有办法创建R中最接近的邻居和变量值的矩阵?

我有如下数据:

   identity  growth x-pos y-pos
1:     Z      0.1   0.5   0.7
2:     B      0.1   0.1   0.0
3:     C      0.2   4.6   2.5
4:     D      0.3   5.6   5.0
5:     A      0.4   0.2   1.0
6:     P      0.1   0.4   2.0

我想比较一下是否具有唯一标识的每个对象的n个最近邻居之间的增长值相关。 因此,基本上创建一个矩阵,根据identityx-pos表示的位置,为每个唯一y-pos行标识5个最近的邻居,并在对象的growth值之间执行相关运算(例如Z)和Z的第一,第二,第三,第四和第五最近邻居的增长值。

我尝试制作一个欧几里得矩阵,然后使用ADE软件包使用自相关度量,但想知道是否有一种更简单的方法来构建这样的矩阵。

解决方法

在对象(例如growth)的Z值与Z的第1、2、3、4和5个最接近邻居的增长值之间进行关联。

您无法计算两点之间的相关性。

我能想到的最相似的事情是计算您的点与它们的平均邻居之间的相关性,或者进行成对测试以比较它们。但这将适用于所有“对象”,而不是每个对象的相关性(因为每个对象只有1个点)。

基于x-pos和y-pos表示的位置,创建一个矩阵,为每个唯一标识行标识5个最近的邻居

# read in data
df <- tribble(
  ~identity,~growth,~`x-pos`,~`y-pos`,"Z",0.1,0.5,0.7,"B",0.0,"C",0.2,4.6,2.5,"D",0.3,5.6,5.0,"A",0.4,1.0,"P",2.0)

# here with 3 neighbors since we have only 6 points
n_neighbors <- 3

# make matrix of coordinates
mat <- as.matrix(df[,3:4])
rownames(mat) <- df$identity

# compute [euclidian] distances
dmat <- as.matrix(dist(mat))

# find neighbors (by name)
nei_mat <- apply(dmat,1,function(crow) {names(sort(crow))[seq_len(n_neighbors+1)]})[-1,]

# match names to initial data frame to make matrix of growth
ref_growth_mat <- matrix(df$growth,dimnames=list(df$identity))
growth_mat <- matrix(ref_growth_mat[nei_mat,],nrow = n_neighbors)
colnames(growth_mat) <- df$identity

# done
growth_mat
#>        Z   B   C   D   A   P
#> [1,] 0.4 0.1 0.3 0.2 0.1 0.4
#> [2,] 0.1 0.4 0.1 0.1 0.1 0.1
#> [3,] 0.1 0.1 0.1 0.1 0.1 0.1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。