【问题标题】:pearson correlation皮尔逊相关
【发布时间】:2011-09-13 16:01:46
【问题描述】:

我有一个如下的数据框:

x <- data.frame(Name=c("a", "b","c", "d", "e"),A=(1:5), B=(2:6), C=(7:11), D=c(1,1,1,1,1))

我想得到一个数据框,包括 a vs b、a vs c、a vs d、a vs e、b vs a、b vs c、b vs d、b vs e 的所有 pearson 系数。等(不包括自我比较,即aa、bb等)。

换句话说,我想更改以下数据框

            A   B   C   D
a   1   2   7   1
b   2   3   8   1
c   3   4   9   1
d   4   5   10  1
e   5   6   11  1

到这样的结果数据框

a   b   0.989143436
a   c   0.963282002
a   d   0.93048421
a   e   0.89585579
b   c   0.9922798
b   d   0.974216034
b   e   0.951427811
c   d   0.994675789
c   e   0.982264673
d   e   0.996357429

请指导有效的方法。

编辑

感谢 Michaelv2 的帮助。

根据建议的代码,我发现结果如下:

   X1 X2 value  
1   A  A     1   
2   B  A     1   
3   C  A     1  
4   D  A    NA  
5   A  B     1  
6   B  B     1  
7   C  B     1  
8   D  B    NA  
9   A  C     1  
10  B  C     1  
11  C  C     1  
12  D  C    NA  
13  A  D    NA  
14  B  D    NA  
15  C  D    NA  
16  D  D     1  

错误信息是“ 警告信息: 在 cor(x[2:5], method = "pearson") 中:标准差为零"

在我看来,我可能误用了代码,您能否进一步指导如何进一步解决这个问题?谢谢。

【问题讨论】:

    标签: r pearson


    【解决方案1】:

    你可以使用类似下面的东西:

    require(reshape)
    
    y <- as.data.frame(t(x[2:5]), stringsAsFactors=FALSE)
    colnames(y) <- x[[1]]
    
    yrho <- melt(cor(y, method="pearson"))
    subset(yrho, yrho$X1 != yrho$X2)
    

    结果:

        X1 X2     value
    2   b  a 0.9891434
    3   c  a 0.9632820
    4   d  a 0.9304842
    5   e  a 0.8958558
    6   a  b 0.9891434
    8   c  b 0.9922798
    9   d  b 0.9742160
    10  e  b 0.9514278
    11  a  c 0.9632820
    12  b  c 0.9922798
    14  d  c 0.9946758
    15  e  c 0.9822647
    16  a  d 0.9304842
    17  b  d 0.9742160
    18  c  d 0.9946758
    20  e  d 0.9963574
    21  a  e 0.8958558
    22  b  e 0.9514278
    23  c  e 0.9822647
    24  d  e 0.9963574
    

    【讨论】:

    • 好吧,行标签可能是行标签,那么就没有必要省略了。另外,OP 需要行-行相关性,而不是列-列(但单个 t 就可以完成这项工作)。
    • 从技术上讲,我省略了数据框的第一列(字符或因子向量,具体取决于您的设置),而不是行标签,但您对逐行相关性非常正确。感谢您指出这一点。
    猜你喜欢
    • 2021-08-29
    • 2011-08-20
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 2014-11-13
    相关资源
    最近更新 更多