R 有效的多元正态推理

R 有效的多元正态推理,r,performance,statistics,bayesian,normal-distribution,R,Performance,Statistics,Bayesian,Normal Distribution,我正在尝试实现一个改进版的卡尔曼滤波器,其中我在n个隐藏变量的向量上有一个n维正态先验,然后是m个独立的数据向量序列,这些数据向量根据隐藏变量以不同但已知的协方差矩阵分布 更正式地说: 任何给定隐藏变量的后验分布在所有先前观测变量条件下的广义解为: 因此,计算最终后验分布是相当“容易”的——你所要做的就是迭代地应用上述变换,从你的先验知识开始,使用已知的协方差矩阵和每个步骤i的观测值。假设我有一个包含已知协方差矩阵的列表Sigma,一个包含观测值向量的矩阵O,以及存储在Lambda、Delt

我正在尝试实现一个改进版的卡尔曼滤波器,其中我在n个隐藏变量的向量上有一个n维正态先验,然后是m个独立的数据向量序列,这些数据向量根据隐藏变量以不同但已知的协方差矩阵分布

更正式地说:

任何给定隐藏变量的后验分布在所有先前观测变量条件下的广义解为:

因此,计算最终后验分布是相当“容易”的——你所要做的就是迭代地应用上述变换,从你的先验知识开始,使用已知的协方差矩阵和每个步骤i的观测值。假设我有一个包含已知协方差矩阵的列表
Sigma
,一个包含观测值向量的矩阵
O
,以及存储在
Lambda
Delta
mu
中的其他变量,那么对其进行编码的一种可能方法是:

inv_Sigma = solve (Sigma [[1]])
inv_Lambda_plus_Delta = solve (Delta)
Delta_i = solve (inv_Sigma  + inv_Lambda_plus_Delta)
mu_i = Delta_i %*% (inv_Sigma %*% O [, 1] + inv_Lambda_plus_Delta %*% mu)

if (n > 1) {
    for (i in seq (2, n)) {
        inv_Sigma = solve (Sigma [[i]])
        inv_Lambda_plus_Delta = solve (Lambda + Delta_i)
        Delta_i = solve (inv_Sigma + inv_Lambda_plus_Delta)
        mu_i = Delta_i %*% (inv_Sigma %*% O [, i] + inv_Lambda_plus_Delta %*% mu_i)
    }
}

然而,随着向量维数的增加,必须一次又一次地迭代计算这些矩阵求逆,计算成本越来越高,以至于(对于我想解决的问题)难以实现。是否有一种更有效的方法来进行此计算,或者使用一些已经存在的函数或包,或者使用更有效的矩阵求逆实现?基于模拟的解决方案更适合我的问题吗?

这对Cholesky分解有帮助吗?这个问题可能更适合math.stackexchange.com或stats.stackexchange.com。这就是说,看看低秩近似值的倒数。一种方法是看对应于协方差或逆协方差的最大特征值的特征向量(我不清楚你应该看哪一个)。在那一天,有一个ARPACK,通过迭代算法计算一个大矩阵的特征值,也许可以看看这个或一些更先进的库。祝你好运,玩得开心。虽然Cholesky分解确实大大加快了计算速度,但它仍然没有达到我想要的水平,我想知道是否有任何基于模拟或近似的方法来计算更有效的东西。这可能更适合,哪一个更适合数值线性代数的东西。这对Cholesky分解有帮助吗?这个问题可能更适合math.stackexchange.com或stats.stackexchange.com。这就是说,看看低秩近似值的倒数。一种方法是看对应于协方差或逆协方差的最大特征值的特征向量(我不清楚你应该看哪一个)。在那一天,有一个ARPACK,通过迭代算法计算一个大矩阵的特征值,也许可以看看这个或一些更先进的库。祝你好运,玩得开心。虽然Cholesky分解确实大大加快了计算速度,但它仍然没有达到我想要的水平,我想知道是否有任何基于模拟或近似的方法来计算更有效的东西。这可能更适合,更适合数值线性代数的东西。