【问题标题】:increasing correlation values - R增加相关值 - R
【发布时间】:2023-04-05 04:32:01
【问题描述】:

我想通过使用阈值来获得降低两个向量之间相关性的值对,并找到使相关性最大化的值,并限制至少具有三对值。我正在使用 R。

例如,假设有这个数据框:

df <- data.frame(val1 = c(1,2,4,8,10,20), val2 = c(2,4,8,16, 35, 14)) 
rownames(df) <- c('a','b','c','d','e','f')

我想删除不允许我获得大于 0.6 的相关性的值对,因此在这种情况下,我想发现 f 元素(行)降低了我的相关性。最后,如果容易的话,我想发现通过使用 a,b,c,d 元素(行)可以获得最高的相关性。

你知道我该怎么做吗?

提前感谢您的热心帮助。

最好的

【问题讨论】:

  • 您需要更多限制。如果删除除 2 之外的所有行(任意 2),则相关性为 +1 或 -1。
  • 感谢您的回答和帮助!我更新了文本并添加了至少 3 行的限制。

标签: r correlation maximize


【解决方案1】:

至少 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 点相关性。这更简单,但通常您会想要移除一个点,计算移除该点的主成分,然后确定下一个要移除的点。

【讨论】:

  • 感谢您的帮助!我有一个问题.. 你为什么看 PC2 而不是 PC1?提前谢谢!
  • PC1 是 val1 和 val2 之间相关性的主轴。偏离该线(并因此降低相关性)是 PC2。如果相关性为 +1 或 -1,则所有点都将位于 PC1 定义的线上。
猜你喜欢
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 2019-12-28
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多