【问题标题】:Calculate nearest neighbor distance between data points within a previously identified Kmeans cluster in R计算 R 中先前识别的 Kmeans 集群中数据点之间的最近邻距离
【发布时间】:2019-11-30 23:30:37
【问题描述】:

我想使用 nndist.ppx() 计算到给定 Kmeans 集群内最近邻居的距离(df$cluster 是 as.factor)。首先使用 kmeans(df,2) 识别集群,然后我将集群向量 cbind 到原始 df,然后使用 ppx(df,simplify=F) 将其转换为类 ppx,因为 df 是 3D (xyz) 和 nndist( ) 需要类 ppx。

问题是我只能得到 nndist.ppx 来计算到 df 中所有点的距离,而不管集群。 This question 接近于我正在寻找的那个距离,正在有节制地计算。

从练习数据开始,这是一个包含 df 类的 2 个元素的列表

library(spatstat)
library(stats)

df_a1 <- data.frame(X = c(9,9,10,10,17,20,22,25,40,40,42), 
Y=c(10,10,11,11,105,106,108,109,112,113,114), Z=c(1,1,1,1,3,4,4,6,8,8,8))

df_a2 <- data.frame(X = c(9,9,10,10,15,22,26,30,40,40,42), 
Y=c(10,10,11,11,105,106,108,109,112,113,114), Z=c(1,1,1,1,5,5,4,5,7,7,8))

list_a <- list(df_a1,df_a2)
df_a_list_names<-c("control", "variable")

运行 kmeans 聚类: 这是我的 Kmeans fxn,它也将 Kmeans 聚类向量绑定到原始 df。然后我将 kmeans_fxn 应用到 dfs 列表上。输出存储在一个新列表中。

kmeans_fxn<-function(x){
kmeans(x,(3))->results
results$cluster->cluster
cluster->x$cluster
as.factor(x$cluster)->x$cluster
return(x)
}

lapply(list_a, kmeans_fxn)->kmean_results_list

计算最近邻的距离:
这是我写的 fxn,用于计算每个数据点与其前 2 个最近邻居之间的距离。然后我将 fxn 应用到先前创建的列表中

distance_fxn<-function(x){
x<-ppx(x, simplify=F)->df.ppx
nndist.ppx(df.ppx,k=2)->x
as.data.frame(x)->x
return(x)
}

lapply(kmean_results_list, distance_fxn)->nearest_list

输出是与整个 df 中最近邻居的距离,与集群无关(我在没有集群列的情况下重复,输出相同...未显示)。

我也试过了

kmeans_results_list[[1]]->fob
ppx(fob, simplify=F)->fob.ppx
by(fob.ppx[[1]], cluster, function(x) nndist.ppx(fob.ppx, k=2))   

这个,但都没有用

by(fob.ppx, fob.ppx[[1]], function(x) nndist.ppx(fob.ppx, k=2))

【问题讨论】:

    标签: r lapply k-means spatstat


    【解决方案1】:

    不要将簇标签视为坐标,而是将其视为标记。使用 as.ppp 将您的数据框转换为带有分类标记的二维点模式(ppp 类)。然后使用 Y

    【讨论】:

    • 这种方法在计算距离时会忽略Z值吗? (原始df是3D)。 Y[1] 将 Z 显示为标记变量。它确实按集群成功拆分。
    • 抱歉,我不清楚 Z 是否是第三个空间坐标。在这种情况下,您应该使数据框 df 的列标题为 x,y,z,cluster。然后创建 3D 点模式 X
    猜你喜欢
    • 1970-01-01
    • 2015-01-07
    • 2019-06-11
    • 2019-01-14
    • 2021-10-16
    • 2020-01-26
    • 2018-12-02
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多