在R中轻松输入相关矩阵
我现在正在运行一个R脚本,它当前使用3个相关变量。我想添加第四个,我想知道是否有一种简单的方法来输入矩阵数据,特别是对于相关矩阵——一些类似于Matlab的技术,在R中输入相关矩阵,3x3或4x4,而不使用我一直使用的线性矩阵重塑 在Matlab中,可以使用分号作为结束行分隔符,因此很容易跟踪互相关的位置 在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)
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