gpt4 book ai didi

返回矩阵中的所有组合集,使得每组中没有成员与另一组高度相关

转载 作者:行者123 更新时间:2023-12-04 02:59:34 24 4
gpt4 key购买 nike

如果我有一个对称矩阵(例如变量之间的相关性),我正在寻找一种方法来返回那些高于或低于某个阈值相关性的变量的所有组合。我现在不太明白如何使用 expand.gridcombn(如果可以的话)做到这一点。请注意,我不要只想要成对的变量。

假设我想返回一组数字的所有可能组合(无序,因此不关心每组数字的位置)。如果有两个数字,我只需要 {1}、{2}、{1,2}。如果有 3 个数字,则为 {1}、{2}、{3}、{1,2}、{1,3}、{2,3}、{1,2,3}。

我想在这里对变量做同样的事情,但我想限制返回的组合,以便集合中没有成员具有高于特定阈值的相关性(在低于阈值的示例中,> 0.7 ) 与集合中的任何其他成员。

set.seed(8) # to reproduce the numbers I have
n <- 5
m <- diag(n)
m[lower.tri(m, diag=F)] <- round( runif( sum( 1:(n-1) ) ) , 2 )
m[upper.tri(m, diag=F)] <- m[lower.tri(m, diag=F)]
m

#In this case I want to return the combinations:
1,2
1,3
1,4
1,5
2,4
4,5
1,2,4 # meaning that none of the pairs {1,2} {1,4} {2,4} share a correlation greater than 0.6
1,4,5 # ditto for {1,4} {1,5} {4,5}

[,1] [,2] [,3] [,4] [,5]
[1,] 1.00 0.47 0.21 0.65 0.29
[2,] 0.47 1.00 0.80 0.32 0.93
[3,] 0.21 0.32 1.00 0.72 0.77
[4,] 0.80 0.72 0.93 1.00 0.64
[5,] 0.65 0.29 0.77 0.64 1.00

谁能帮忙推荐一个方法?

最佳答案

这不是最漂亮的解决方案,但它有效:

o <- unlist(lapply(2:nrow(m), function(x) {
i1 <- combn(seq_len(nrow(m)), x)
apply(i1, 2, function(y) {
if (all(combn(y, 2, function(z) m[z[1], z[2]] < 0.7) == TRUE))
y
else
NA
})
}), recursive=F)
o[!is.na(o)]

# [[1]]
# [1] 1 2
#
# [[2]]
# [1] 1 3
#
# [[3]]
# [1] 1 4
#
# [[4]]
# [1] 1 5
#
# [[5]]
# [1] 2 4
#
# [[6]]
# [1] 4 5
#
# [[7]]
# [1] 1 2 4
#
# [[8]]
# [1] 1 4 5

关于返回矩阵中的所有组合集,使得每组中没有成员与另一组高度相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15253549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com