在R数据框中实现行向量与相关矩阵的二次型计算
在R中对数据框每行执行二次型矩阵乘法并新增结果列
需求说明:对数据框的每一行,将该行元素组成的1×6行向量,与一个6×6的相关矩阵相乘,再与该行向量的转置(6×1)相乘得到单个数值结果;最终将所有行的结果新增为数据框的一列。
示例数据与相关矩阵
首先构造示例数据框和指定的相关矩阵:
# 构造示例数据框 A <- c(2,3,4,5,6) B <- c(4,5,6,7,8) C <- c(6,7,8,9,10) D <- c(8,9,10,11,12) E <- c(10,11,12,13,14) F <- c(12,13,14,15,16) df <- data.frame(A,B,C,D,E,F) # 定义6×6相关矩阵 corr <- matrix( c(1,0,0,0,0,0, 0,1,0,0,0,0, 0,0,1,.6,.6,.5, 0,0,.6,1,.6,.7, 0,0,.6,.6,1,.6, 0,0,.5,.7,.6,1), nrow = 6, ncol = 6, byrow = TRUE)
实现方法
方法1:逐行计算(直观易懂)
使用apply函数遍历数据框的每一行,对每行执行矩阵乘法:
# 新增result列存储计算结果 df$result <- apply(df, 1, function(row) { # 执行二次型矩阵乘法:行向量转置 × 相关矩阵 × 行向量 t(row) %*% corr %*% row })
方法2:整体矩阵运算(高效)
当数据量较大时,整体矩阵运算的效率远高于逐行循环:
# 将数据框转换为矩阵格式 X <- as.matrix(df) # 计算所有行的二次型结果,提取对角线值(每行自身的计算结果) df$result <- diag(X %*% corr %*% t(X))
结果验证
以第一行[2,4,6,8,10,12]为例,计算结果为639.2,可通过以下代码单独验证:
row1 <- c(2,4,6,8,10,12) t(row1) %*% corr %*% row1
内容的提问来源于stack exchange,提问作者1forest1
相关产品推荐
相关产品推荐

