假设您有一个矩阵A,其大小为P×P且数字Q < P可以用来 取一个所述矩阵的分区,其中:
看起来像这样:
A1 | A2
A = ---+----
A3 | A4
如何计算矩阵:
其中0 q 是具有零元素的Q×Q矩阵。
我正在从一本名为“使用R发现统计数据”的书中学习,虽然它讨论了分区矩阵,但它没有显示如何计算一个像上面给出的那个,不幸的是我没有运气编程或基于数学的搜索...
任何帮助,无论是数学还是示例R代码都会很棒。提前谢谢。
答案 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]
更稳定和有效),单个剩余乘法由%*%
和-
从另一个组件中逐个减去一个矩阵。以这种方式,代码与问题中的数学表达式非常相似。