如何在平方协方差矩阵中组织协方差对列表?
How to organize a list of covariance pairs in a squared covariance matrix?
我在 R 中工作,我有一个由三列组成的小标题:
V1
:第一个变量的名字
V2
:第二个变量的名称
cov
:V1
和V2
之间的协方差值。
此小标题扩展到 n
列 n
协方差对。
我想要一个看起来像经典协方差矩阵的矩阵,即其中包含协方差对的正方形 n
x n
矩阵。
知道如何实现吗?
类似于
## find row/column names
n <- unique(c(dd$V1,dd$V2))
## construct matrix
M <- matrix(NA, length(n),length(n), dimnames=list(n,n))
## fill in values
M[cbind(dd$V1,dd$V2)] <- dd$V3
如果您的初始数据集中只有 lower/upper 三角形,您将需要类似 M[lower.tri(M)] <- t(M)[upper.tri(M)]
的东西来对称化...
你可以构造一个稀疏矩阵:
DF <- data.frame(var1 = c("a", "a", "b", "a", "b", "c"),
var2 = c("b", "c", "c", "a", "b", "c"),
cov = c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6))
DF$var1 <- factor(DF$var1, levels = sort(unique(c(DF$var1, DF$var2))))
DF$var2 <- factor(DF$var2, levels = levels(DF$var1))
library(Matrix)
sparseMatrix(i = as.integer(DF$var1),
j = as.integer(DF$var2),
x = DF$cov,
dimnames = list(levels(DF$var1), levels(DF$var2)),
symmetric = TRUE)
#3 x 3 sparse Matrix of class "dsCMatrix"
# a b c
#a 0.4 0.1 0.2
#b 0.1 0.5 0.3
#c 0.2 0.3 0.6
如果需要,请使用 as.matrix
创建密集矩阵。
我在 R 中工作,我有一个由三列组成的小标题:
V1
:第一个变量的名字V2
:第二个变量的名称cov
:V1
和V2
之间的协方差值。
此小标题扩展到 n
列 n
协方差对。
我想要一个看起来像经典协方差矩阵的矩阵,即其中包含协方差对的正方形 n
x n
矩阵。
知道如何实现吗?
类似于
## find row/column names
n <- unique(c(dd$V1,dd$V2))
## construct matrix
M <- matrix(NA, length(n),length(n), dimnames=list(n,n))
## fill in values
M[cbind(dd$V1,dd$V2)] <- dd$V3
如果您的初始数据集中只有 lower/upper 三角形,您将需要类似 M[lower.tri(M)] <- t(M)[upper.tri(M)]
的东西来对称化...
你可以构造一个稀疏矩阵:
DF <- data.frame(var1 = c("a", "a", "b", "a", "b", "c"),
var2 = c("b", "c", "c", "a", "b", "c"),
cov = c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6))
DF$var1 <- factor(DF$var1, levels = sort(unique(c(DF$var1, DF$var2))))
DF$var2 <- factor(DF$var2, levels = levels(DF$var1))
library(Matrix)
sparseMatrix(i = as.integer(DF$var1),
j = as.integer(DF$var2),
x = DF$cov,
dimnames = list(levels(DF$var1), levels(DF$var2)),
symmetric = TRUE)
#3 x 3 sparse Matrix of class "dsCMatrix"
# a b c
#a 0.4 0.1 0.2
#b 0.1 0.5 0.3
#c 0.2 0.3 0.6
如果需要,请使用 as.matrix
创建密集矩阵。