在R中轻松输入相关矩阵

在R中轻松输入相关矩阵,r,correlation,R,Correlation,我现在正在运行一个R脚本,它当前使用3个相关变量。我想添加第四个,我想知道是否有一种简单的方法来输入矩阵数据,特别是对于相关矩阵——一些类似于Matlab的技术,在R中输入相关矩阵,3x3或4x4,而不使用我一直使用的线性矩阵重塑 在Matlab中,可以使用分号作为结束行分隔符,因此很容易跟踪互相关的位置 在R中,我首先创建 corr <- c(1, 0.1, 0.5, 0.1, 1, 0.9, 0.5, 0.9, 1) cormat <- matrix(corr, ncol=3)

我现在正在运行一个R脚本,它当前使用3个相关变量。我想添加第四个,我想知道是否有一种简单的方法来输入矩阵数据,特别是对于相关矩阵——一些类似于Matlab的技术,在R中输入相关矩阵,3x3或4x4,而不使用我一直使用的线性矩阵重塑

在Matlab中,可以使用分号作为结束行分隔符,因此很容易跟踪互相关的位置

在R中,我首先创建

corr <- c(1, 0.1, 0.5,
0.1, 1, 0.9,
0.5, 0.9, 1)
cormat <- matrix(corr, ncol=3)
它只是感觉更笨重,这让我怀疑有一个更聪明的方式,我还没有看。想法?

欢迎访问该网站!:)您应该能够一步完成:

MyMatrix = matrix( 
    c(1, 0.1, 0.5, 
      0.1, 1, 0.9,
      0.5, 0.9, 1), 
    nrow=3, 
    ncol=3) 

如果要输入对称矩阵,可以使用
MCMCpack
库中的
xpnd()
函数

xpnd()
获取一个对应于矩阵上三角的向量(因此每个值只需输入一次)。例如,如果要输入:

$\left(\begin{array}{c} 1 & 0.1 & 0.5 \\ 0.1 & 1 & 0.9 \\ 0.5 & 0.9 & 1 \结束{array}\right)$

你会用

library(MCMCpack)
xpnd(c(1, 0.1, 0.5, 1, 0.9, 1), 3)
其中3表示矩阵中的行数


.

在处理相关矩阵时,您可能对输入对角线以及上下两部分都不感兴趣。您可以使用
diag()
upper.tri()
lower.tri()
分别操作/提取这三个部分

>M这里是另一种方式:

CorrMat <- matrix(scan(),3,3,byrow=TRUE)
1 0.1 0.5
0.1 1 0.9
0.5 0.9 1

现有解决方案的
CorrMat。这可能只适用于3*3矩阵。我试过这个

a<-diag(3)
m<-diag(3)
m[lower.tri(m,diag=F)]<-c(0.1, 0.5, 0.9)
m<-m+t(m)-a

aDo请注意,这仅适用于相关矩阵对称的情况。对于非对称矩阵,您需要添加
byrow=TRUE
看起来是最优雅的解决方案,最接近matlab的解决方案+1.
> M <- diag(3) # create 3x3 matrix, diagonal defaults to 1's
> M[lower.tri(M, diag=F)] <- c(0.1, 0.5, 0.9) # read in lower part
> M # lower matrix containing all information
      [,1] [,2] [,3]
 [1,]  1.0  0.0    0
 [2,]  0.1  1.0    0
 [3,]  0.5  0.9    1
> M[upper.tri(M, diag=F)] <- M[lower.tri(M)] # fill upper part
> M # full matrix
      [,1] [,2] [,3]
 [1,]  1.0  0.1  0.5
 [2,]  0.1  1.0  0.9
 [3,]  0.5  0.9  1.0
CorrMat <- matrix(scan(),3,3,byrow=TRUE)
1 0.1 0.5
0.1 1 0.9
0.5 0.9 1
a<-diag(3)
m<-diag(3)
m[lower.tri(m,diag=F)]<-c(0.1, 0.5, 0.9)
m<-m+t(m)-a