R 与p值矩阵的相关性

R 与p值矩阵的相关性,r,matrix,correlation,R,Matrix,Correlation,我有以下资料: x1 = sample(1:10, 100, replace=T) x2 = sample(1:3, 100, replace=T) x3 = sample(50:100, 100, replace=T) y1 = sample(50:100, 100, replace=T) y2 = sample(50:100, 100, replace=T) mydf = data.frame(x1,x2,x3,y1,y2) head(mydf) x1 x2 x3 y1 y2 1

我有以下资料:

x1 = sample(1:10, 100, replace=T)
x2 = sample(1:3, 100, replace=T)
x3 = sample(50:100, 100, replace=T)
y1 = sample(50:100, 100, replace=T)
y2 = sample(50:100, 100, replace=T)

mydf = data.frame(x1,x2,x3,y1,y2)
head(mydf)
  x1 x2 x3  y1 y2
1  2  2 96 100 73
2  5  2 77  93 52
3 10  1 86  54 80
4  3  2 98  59 94
5  2  2 85  94 85
6  9  2 56  79 99
我有以下资料:

x1 = sample(1:10, 100, replace=T)
x2 = sample(1:3, 100, replace=T)
x3 = sample(50:100, 100, replace=T)
y1 = sample(50:100, 100, replace=T)
y2 = sample(50:100, 100, replace=T)

mydf = data.frame(x1,x2,x3,y1,y2)
head(mydf)
  x1 x2 x3  y1 y2
1  2  2 96 100 73
2  5  2 77  93 52
3 10  1 86  54 80
4  3  2 98  59 94
5  2  2 85  94 85
6  9  2 56  79 99
我希望进行相关性分析并产生以下输出:

        x1                      x2                  x3
y1  r.value; p.value    r.value; p.value    r.value; p.value

y2  r.value; p.value    r.value; p.value    r.value; p.value
R值需要四舍五入到2位,p_值需要四舍五入到3位

如何做到这一点?谢谢你的帮助

我尝试了以下几点:

library(Hmisc)
res = rcorr(as.matrix(mydf), type="pearson")
res

      x1    x2    x3    y1    y2
x1  1.00 -0.01 -0.16 -0.28 -0.21
x2 -0.01  1.00 -0.20 -0.10 -0.13
x3 -0.16 -0.20  1.00  0.14 -0.09
y1 -0.28 -0.10  0.14  1.00  0.12
y2 -0.21 -0.13 -0.09  0.12  1.00

n= 100 

P
   x1     x2     x3     y1     y2    
x1        0.9520 0.1089 0.0047 0.0364
x2 0.9520        0.0444 0.3463 0.1887
x3 0.1089 0.0444        0.1727 0.3948
y1 0.0047 0.3463 0.1727        0.2482
y2 0.0364 0.1887 0.3948 0.2482       

matrix(paste0(round(res[[1]][,1:3],2),';',round(res[[3]][1:2,],4)),ncol=3)
     [,1]           [,2]           [,3]          
[1,] "1;NA"         "-0.01;0.0444" "-0.16;NA"    
[2,] "-0.01;0.952"  "1;0.0047"     "-0.2;0.952"  
[3,] "-0.16;0.952"  "-0.2;0.3463"  "1;0.952"     
[4,] "-0.28;NA"     "-0.1;0.0364"  "0.14;NA"     
[5,] "-0.21;0.1089" "-0.13;0.1887" "-0.09;0.1089"
但是组合不正确。

试试看

r2 <- matrix(0, ncol=3, nrow=2, 
         dimnames=list( paste0('y',1:2), paste0('x',1:3)))
r2[] <- paste(round(res$r[4:5,1:3],2), round(res$P[4:5,1:3],4), sep="; ")
r2试试看

r2试试看

r2试试看


r2您还可以执行以下操作,无需精确确定所需行/列的位置:

matrix(paste(unlist(round(res[[1]],2)),unlist(round(res[[3]],3)),sep=";"),
       nrow=nrow(res[[1]]),dimnames=dimnames(res[[1]]))
更新:我添加了一个dimnames参数,以便dimnames“传输”到结果矩阵

例如,通过我的随机抽样,您将得到:

   x1            x2            x3            y1            y2           
x1 "1;NA"        "-0.2;0.052"  "0.02;0.833"  "-0.04;0.674" "0.02;0.819" 
x2 "-0.2;0.052"  "1;NA"        "-0.13;0.202" "-0.01;0.896" "0.05;0.653" 
x3 "0.02;0.833"  "-0.13;0.202" "1;NA"        "-0.05;0.636" "-0.13;0.185"
y1 "-0.04;0.674" "-0.01;0.896" "-0.05;0.636" "1;NA"        "-0.02;0.858"
y2 "0.02;0.819"  "0.05;0.653"  "-0.13;0.185" "-0.02;0.858" "1;NA"

您还可以执行以下操作,无需精确确定所需行/列的位置:

matrix(paste(unlist(round(res[[1]],2)),unlist(round(res[[3]],3)),sep=";"),
       nrow=nrow(res[[1]]),dimnames=dimnames(res[[1]]))
更新:我添加了一个dimnames参数,以便dimnames“传输”到结果矩阵

例如,通过我的随机抽样,您将得到:

   x1            x2            x3            y1            y2           
x1 "1;NA"        "-0.2;0.052"  "0.02;0.833"  "-0.04;0.674" "0.02;0.819" 
x2 "-0.2;0.052"  "1;NA"        "-0.13;0.202" "-0.01;0.896" "0.05;0.653" 
x3 "0.02;0.833"  "-0.13;0.202" "1;NA"        "-0.05;0.636" "-0.13;0.185"
y1 "-0.04;0.674" "-0.01;0.896" "-0.05;0.636" "1;NA"        "-0.02;0.858"
y2 "0.02;0.819"  "0.05;0.653"  "-0.13;0.185" "-0.02;0.858" "1;NA"

您还可以执行以下操作,无需精确确定所需行/列的位置:

matrix(paste(unlist(round(res[[1]],2)),unlist(round(res[[3]],3)),sep=";"),
       nrow=nrow(res[[1]]),dimnames=dimnames(res[[1]]))
更新:我添加了一个dimnames参数,以便dimnames“传输”到结果矩阵

例如,通过我的随机抽样,您将得到:

   x1            x2            x3            y1            y2           
x1 "1;NA"        "-0.2;0.052"  "0.02;0.833"  "-0.04;0.674" "0.02;0.819" 
x2 "-0.2;0.052"  "1;NA"        "-0.13;0.202" "-0.01;0.896" "0.05;0.653" 
x3 "0.02;0.833"  "-0.13;0.202" "1;NA"        "-0.05;0.636" "-0.13;0.185"
y1 "-0.04;0.674" "-0.01;0.896" "-0.05;0.636" "1;NA"        "-0.02;0.858"
y2 "0.02;0.819"  "0.05;0.653"  "-0.13;0.185" "-0.02;0.858" "1;NA"

您还可以执行以下操作,无需精确确定所需行/列的位置:

matrix(paste(unlist(round(res[[1]],2)),unlist(round(res[[3]],3)),sep=";"),
       nrow=nrow(res[[1]]),dimnames=dimnames(res[[1]]))
更新:我添加了一个dimnames参数,以便dimnames“传输”到结果矩阵

例如,通过我的随机抽样,您将得到:

   x1            x2            x3            y1            y2           
x1 "1;NA"        "-0.2;0.052"  "0.02;0.833"  "-0.04;0.674" "0.02;0.819" 
x2 "-0.2;0.052"  "1;NA"        "-0.13;0.202" "-0.01;0.896" "0.05;0.653" 
x3 "0.02;0.833"  "-0.13;0.202" "1;NA"        "-0.05;0.636" "-0.13;0.185"
y1 "-0.04;0.674" "-0.01;0.896" "-0.05;0.636" "1;NA"        "-0.02;0.858"
y2 "0.02;0.819"  "0.05;0.653"  "-0.13;0.185" "-0.02;0.858" "1;NA"


是否需要每个单元格的字符串输出(基于
)?是。这就是问题所在。我需要为每个组合同时显示两个值。您具体的编程问题是什么?请向我们展示您尝试过的代码,以及为什么它不能满足您的需求。分享你的尝试对每个人都有帮助。它表明你花了时间来帮助自己,它避免了我们重复显而易见的答案,它帮助你得到一个更具体和相关的答案。谢谢您指出。您是否需要每个单元格的字符串输出(基于
)?是的。这就是问题所在。我需要为每个组合同时显示两个值。您具体的编程问题是什么?请向我们展示您尝试过的代码,以及为什么它不能满足您的需求。分享你的尝试对每个人都有帮助。它表明你花了时间来帮助自己,它避免了我们重复显而易见的答案,它帮助你得到一个更具体和相关的答案。谢谢您指出。您是否需要每个单元格的字符串输出(基于
)?是的。这就是问题所在。我需要为每个组合同时显示两个值。您具体的编程问题是什么?请向我们展示您尝试过的代码,以及为什么它不能满足您的需求。分享你的尝试对每个人都有帮助。它表明你花了时间来帮助自己,它避免了我们重复显而易见的答案,它帮助你得到一个更具体和相关的答案。谢谢您指出。您是否需要每个单元格的字符串输出(基于
)?是的。这就是问题所在。我需要为每个组合同时显示两个值。您具体的编程问题是什么?请向我们展示您尝试过的代码,以及为什么它不能满足您的需求。分享你的尝试对每个人都有帮助。它表明你花了时间来帮助自己,它避免了我们重复显而易见的答案,它帮助你得到一个更具体和相关的答案。谢谢你指出。这正是我想要的。谢谢,没问题。您可以将
数值索引
更改为更通用的
res$r[paste0('x',1:3),paste0('y',1:2)]
我们可以创建一个函数f(mydf,1:3,4:5)并使用正确放置的列名获得输出吗?(名称可以是任何名称,而不仅仅是x1、y1等)。@rnso它取决于
x
y
变量的位置。假设
mydf
中的列顺序不同,首先需要对其进行排序。@rnso好的,然后我会尝试这正是我想要的。谢谢,没问题。您可以将
数值索引
更改为更通用的
res$r[paste0('x',1:3),paste0('y',1:2)]
我们可以创建一个函数f(mydf,1:3,4:5)并使用正确放置的列名获得输出吗?(名称可以是任何名称,而不仅仅是x1、y1等)。@rnso它取决于
x
y
变量的位置。假设
mydf
中的列顺序不同,首先需要对其进行排序。@rnso好的,然后我会尝试这正是我想要的。谢谢,没问题。您可以将
数值索引
更改为更通用的
res$r[paste0('x',1:3),paste0('y',1:2)]
我们可以创建一个函数f(mydf,1:3,4:5)并使用正确放置的列名获得输出吗?(名称可以是任何名称,而不仅仅是x1、y1等)。@rnso它取决于
x
y
变量的位置。假设
mydf
中的列顺序不同,首先需要对其进行排序。@rnso好的,然后我会尝试这正是我想要的。谢谢,没问题。您可以将
数值索引
更改为更通用的
res$r[paste0('x',1:3),paste0('y',1:2)]
我们可以创建一个函数f(mydf,1:3,4:5)并使用正确放置的列名获得输出吗?(名称可以是任何名称,而不仅仅是x1、y1等)。@rnso它取决于
x
y
变量的位置。假设
mydf
中的列顺序不同,首先需要对其进行排序。@rnso好的,然后我会尝试