从subs计算分区矩阵

时间:2014-02-04 21:21:12

标签: r matrix partitioning

假设您有一个矩阵A,其大小为P×P且数字Q < P可以用来 取一个所述矩阵的分区,其中:

  • 1 是左上角的子矩阵,尺寸为Q×Q,
  • 2 是右上角的子矩阵,尺寸为Q×(P-Q),
  • 3 是左下方的子矩阵,维度为(P-Q)×Q,
  • 4 是较低权利的矩阵,其维度为(P-Q)×(P-Q)。

看起来像这样:

      A1 | A2
A =   ---+----
      A3 | A4

如何计算矩阵:

Matrix B

其中0 q 是具有零元素的Q×Q矩阵。

我正在从一本名为“使用R发现统计数据”的书中学习,虽然它讨论了分区矩阵,但它没有显示如何计算一个像上面给出的那个,不幸的是我没有运气编程或基于数学的搜索...

任何帮助,无论是数学还是示例R代码都会很棒。提前谢谢。

1 个答案:

答案 0 :(得分:1)

R有多种方法可以从矩阵中获取块。例如,您可以使用索引向量使用提取函数[引用一组行或一组列,如此示例所示。 (如果必须处理p = 1或q = 1的情况,则需要选项drop=FALSE,以便R继续将结果视为矩阵而不仅仅是向量。)

#
# Create a symmetric p-d matrix of size p+q.
#
p <- 2; q <- 3 # Both must be 1 or greater
x <- matrix(rnorm((p+q)^2 * 2), ncol=p+q)
a <- cov(x)
#
# Compute b.
#
i <- 1:p; j <- 1:q + p                         # Indexes of the blocks
b <- a[i,i, drop=FALSE] - 
     a[i,j, drop=FALSE] %*% solve(a[j,j, drop=FALSE], a[j,i, drop=FALSE])

矩阵求逆由solve实现(在数值上比计算a[j,j]的倒数并将其乘以a[j,i]更稳定和有效),单个剩余乘法由%*%-从另一个组件中逐个减去一个矩阵。以这种方式,代码与问题中的数学表达式非常相似。