至少 3 行的限制有帮助。有两种方法可以解决这个问题。哪个最好取决于您要完成的工作。我们可以从所有点开始,一次删除一个,或者我们可以从 3 个点开始,一次添加一个。您的示例有 6 分,因此差别不大。这是找到最佳 3 点组合的代码:
combos <- combn(6, 3)
corrs <- combn(6, 3, function(x) cor(df[x, ])[1, 2])
results <- cbind(t(combos), corrs)
head(results[order(corrs, decreasing=TRUE), ])
# corrs
# [1,] 1 2 3 1.0000000
# [2,] 1 2 4 1.0000000
# [3,] 2 3 4 1.0000000
# [4,] 1 3 4 1.0000000
# [5,] 1 2 5 0.9988739
# [6,] 1 2 6 0.9940219
我们使用combn() 函数两次,一次是为了得到一个包含 6 个项目中 3 个的可能组合的矩阵,第二次是对每个组合应用相关函数
然后我们结合结果并列出最好的 6 个。三个最佳 3 点解决方案的相关性为 +1。对于 5 点解决方案,我们得到以下结果:
combos <- combn(6, 5)
corrs <- combn(6, 5, function(x) cor(df[x, ])[1, 2])
results <- cbind(t(combos), corrs)
head(results[order(corrs, decreasing=TRUE), ])
# corrs
# [1,] 1 2 3 4 5 0.9381942
# [2,] 1 2 3 4 6 0.7514174
# [3,] 1 2 3 5 6 0.4908234
# [4,] 1 2 4 5 6 0.4639890
# [5,] 1 3 4 5 6 0.4062324
# [6,] 2 3 4 5 6 0.3591037
现在有一个明确的解决方案,它排除了点 6(“f”),相关性为 +.938。一般来说,相关性的大小会随着点数的减少而增加,直到达到 +1 或 -1。随着点数的增加,计算所有备选方案将花费更多的处理时间。一个捷径是查看与第一个主成分的偏差:
df.pca <- prcomp(df)
abval <- abs(df.pca$x[, "PC2"])
df.pca$x[order(abval, decreasing=TRUE), "PC2"]
# f e a b c d
# -11.4055987 5.3497271 2.1507072 1.9191656 1.4560825 0.5299163
点 f(第 6 个点)与第一个主成分的偏差最大,因此删除它应该会提高相关性。同样,去除 e 和 f 可以得到最好的 4 点相关性。这更简单,但通常您会想要移除一个点,计算移除该点的主成分,然后确定下一个要移除的点。