我将两个栅格与逐个细胞图的简单散点图进行比较,发现我有两个看似不同的人群:
现在我正在尝试提取每个群体的位置(通过隔离行ID,例如),这样我就可以看到它们落入栅格的位置,也许可以理解为什么我会得到这种行为。这是一个可重复的例子:
X <- seq(1,1000,1)
Z <- runif(1000, 1, 2)
A = c(1.2 * X * Z + 100)
B = c(0.6 * X * Z )
df = data.frame(X = c(X,X), Y = c(A,B))
plot(df$X,df$Y)
此外,我的原始数据有大约1,000,000行,因此解决方案也需要支持大型数据帧。
关于如何隔离这些群体的任何想法?
感谢
答案 0 :(得分:5)
光谱聚类可用于识别具有清晰边界的点群。一个很大的优点是它是无人监督的,即不依赖于人类判断,尽管该方法很慢并且需要提供一些超参数(例如,簇的数量)。
以下是群集的代码。在您的情况下,代码大约需要几分钟。
library(kernlab)
specc_df <- specc(as.matrix(df),centers = 2)
plot(df, col = specc_df)
答案 1 :(得分:3)
您的数据具有线性分隔线。你可以找到它:
plot(df$X,df$Y)
Pts = locator(2)
您需要点击两个组之间的一个点,然后是最右侧(组之间)。有你的数据
Pts
$x
[1] 0.8066296 994.9723687
$y
[1] 48.56932 1255.32870
## Slope
(Pts$y[2] - Pts$y[1]) / (Pts$x[2] - Pts$x[1])
[1] 1.213841
## Draw the line to confirm
abline(48,1.2, col="red")
## use the line to distinguish the groups
Group = rep(1, nrow(df))
Group[df$X*1.2 + 48 < df$Y] = 2
plot(df, pch=20, col=Group)