【问题标题】:Attribute pairs via correlation over multiple tables通过多个表关联的属性对
【发布时间】:2020-05-11 01:01:22
【问题描述】:

我有一个数据框,正在计算列之间的相关性以确定要删除的属性。我想创建一个表,其中行是我的数据框的属性,并且在每个属性旁边都有一个列表,这些列表与该属性具有 >= 0.65 或 use="complete.obs",一组使用use="pairwise.complete.obs")。

一个例子:

set.seed(1234)
n=8
df <- as.data.frame(matrix(runif(n^2,min=0,max=1),nrow=n,ncol=n))
colnames(df) <- LETTERS[1:ncol(df)]

df$A[3] <- NA
df$C[2] <- NA
df$E[7] <- NA

cor1 <- cor(df, use="pairwise.complete.obs")
cor2 <- cor(df, use="complete.obs") 

在这里,你可以形成如下的相关个体矩阵

cor1[-0.65<cor1 & cor1<0.65] <- NA
cor2[-0.65<cor2 & cor2<0.65] <- NA

此时我想知道如何创建一个属性表,然后(对于每个属性)只有那些在 both 上述两个矩阵@987654325 中具有相关性的非 NA 值的表@ 和 cor2。所以例如在此示例中,所需的输出将是:

A:     G
B:     D, H
C:     E
D:     B, H
E:     C
F:
G:     A
H:     B, D

请注意,例如 G 未针对 F 列出,或 F 未针对 G 列出,因为在 cor1 中,相关性为 -0.01899381,即使 cor2 中的相关性为 -0.9186308346。两个相关性必须高于 0.65 或低于 0.65 才能包含在列表中。

编辑:一种理想的方法可以解决我上面未能解决的问题——cor1 中的相关性可能 >0.65,cor2 中的相关性可能为 >0.65 并通过,这不太可能。我们宁愿只列出在两个矩阵上 >=0.65 或在两个矩阵上

【问题讨论】:

    标签: r correlation


    【解决方案1】:

    这是一种考虑方式。创建一个逻辑矩阵,其中每个相关的绝对值大于 0.65,并将对角线设置为 FALSE。将applypaste 一起使用矩阵中TRUE 的名称,逗号分隔。

    mat <- abs(cor1)>.65 & abs(cor2)>.65
    
    diag(mat) <- F
    
    as.matrix(apply(mat, 1, function(x) paste (names(which(x)), collapse = ",")))
    

    输出

      [,1] 
    A "G"  
    B "D,H"
    C "E"  
    D "B,H"
    E "C"  
    F ""   
    G "A"  
    H "B,D"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 2011-11-10
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多