【问题标题】:Matlab: Calculating inverse of covariance matrix for time series modelMatlab:计算时间序列模型的协方差矩阵的逆
【发布时间】:2015-07-08 00:21:30
【问题描述】:

是一个单变量自回归 AR 模型,阶数为 p = 2,数据样本 Nu 激发,这是一个高斯零均值噪声和方差 sigma_u^2

我知道函数cov(x),但我如何使用它来获得 pxp 协方差矩阵 C(n) 及其逆矩阵,即 AR 模型系数的 S(n) = C(n)。逆协方差矩阵的数学公式 S(n) 表示为

其中 A_1 和 A_2 是下三角托普利茨矩阵。

可以直接pinv(Cov(coefficients))吗?我也不确定如何将参数作为 AR 系数传递给函数。

如何实现这个公式?谢谢你的帮助

【问题讨论】:

  • 如您所知,StackOverflow 不支持 TeX/LaTeX。请删除它(除非它实际上是代码,否则绝对不要将其格式化为代码)。如果您绝对需要显示方程式,请使用您已经完成的图像。
  • @horchler : 我已经为 AR 模型的方程放了一张图片,谢谢 :)
  • 我知道 cov 的东西,但不知道 AR。您拥有的 AR 模型的输出是什么? cov() 函数用于数值计算变量的协方差,给定变量本身的一堆观察值/样本(输入 = 观察值 x 变量数组);不确定这里是不是这样。如果你想要系数的 covs,你有一个公式来生成系数本身的样本吗? (a_i 是那些系数的值吗?)AR 可能有一个封闭形式的解决方案,但我不知道它是什么。
  • @AndrewJanke:感谢您的意见和意见。使用最大似然估计器估计系数 a_i。系数的均方误差的下限通常由 Cramer Rao 下限 (CRLB) 确定。 CRLB 的公式包含系数的 pbyp 矩阵的协方差的逆项。我知道可以找到数据的协方差,但我不知道如何找到任何时间序列模型的系数情况。 AR 模型的输出是一维时间序列,我们从中估计未知系数。
  • 我认为你的问题不恰当。考虑到您的评论,我假设您对时间序列的协方差不感兴趣,而是对模型系数的最大似然 (ML) 估计的协方差感兴趣。如果这是真的,cov 函数不是您想要的。您应该使用估计的系数a_j 简单地构建p-by-p 矩阵A_1A_2,因为ML 估计器还提供了噪声方差sigma 的估计值(假设它确实)。

标签: matlab time-series covariance matrix-inverse


【解决方案1】:

正如其他人所指出的那样,您的问题完全是错误的,所以我鼓励您先阅读并考虑您真正想做的事情。尽管如此,我可以提供一些指导,这实际上与理顺概念而不是编程有关。根据问题和 cmets,您的问题应改写为“如何估计 AR(n) 模型的参数的协方差矩阵,其中参数是通过最大似然估计获得的?”在这种情况下,我们可以回答如下。

  1. 为了便于讨论,我们首先生成一些测试数据
>> rng(0);
>> n = 10000;
>> x = rand(n,2);
  1. 首先通过运行OLS智能获取初始条件。这就是大多数人无论如何估计自回归的方式(几乎所有关于向量自回归的文献),并且 OLS 和 MLE 在某些条件下是渐近等效的。如果您想包含一个常数(如果您正在使用非贬低数据,您想要这样做),请包含一列零。在输出中,b 是您的参数估计向量,C 是相应的标准误差向量。
>> X = [x,ones(n,1)];
>> [b,C]=lscov(X,y)

b =

    4.9825
    9.9501
   20.0227


C =

    0.0347
    0.0345
    0.0266
  1. 在进行最大可能性之前,您首先需要一个可能性。我们可以构造一个作为几个简单匿名函数的组合。我们还需要构建一个包含预测误差标准差的初始条件向量,因为这是我们将使用 MLE 估计的事情之一。在这种情况下,我将假设您想要一个正态分布的错误,并以此为基础,但您没有说,当然可以选择任何东西(没有正态分布的错误通常是不这样做的动机OLS)。此外,由于我们使用的是最小化例程,因此我将建立一个负对数似然。
>> err = @(b) y - X*b

err = 

    @(b)y-X*b

>> std(err(b))

ans =

    0.9998

>> b0 = [b; std(err(b))];
>> nll = @(b) (n/2)*log(2*pi*b(end)^2) + (1/(2*b(end)^2))*sum(err(b(1:end-1)).^2);
  1. 接下来使用某种类型的最小化例程(例如,fminsearchfminunc 等)来执行 MLE
>> bmle = fminsearch(nll,b0)

bmle =

    4.9825
    9.9501
   20.0227
    0.9997

不出所料,估计值几乎与我们在 OLS 下获得的结果相同,这正是我们在误差呈正态分布时所期望的,这就是为什么大多数人选择只做 OLS,除非有一些令人信服的理由认为错误是非正常的。协方差矩阵可以通过分数的外积来估计,这在Normal情况下是一个特别简单的表达式。

>> inv(X'*X/bmle(end))

ans =

    0.0012    0.0000   -0.0006
    0.0000    0.0012   -0.0006
   -0.0006   -0.0006    0.0007

最后,标准误与我们在最小二乘情况下得到的相匹配。

>> sqrt(diag(inv(X'*X/bmle(end))))

ans =

    0.0347
    0.0345
    0.0266

编辑:抱歉,我刚刚意识到我的测试数据是横截面数据而不是时间序列数据。我会尽快解决这个问题。但是估计模型的方法保持不变。

【讨论】:

  • 抱歉这么晚才回复。我在我的实现中应用了你的技术&不幸的是有很多问题。这可能是由于我的理解不正确。你能看看吗?
  • 所以,我为 AR 拟合了一个时间序列模型,并使用带有命令 aryule() 的 OLS 估计了参数。这给了我2个参数。现在,我尝试通过改变噪声的方差来估计存在零均值高斯白噪声的情况,即 sigma^2(在我的问题中)。那么如何为每个时刻 n 实现这个协方差公式 S? : inv(sigma^2)*(A_1*A_1' - A_2*A_2') 我不知道 Toeplitz 矩阵 A_1 和 A_2 在这种情况下会是什么以及系数估计的作用。从您的示例中,很容易看出分母中使用了估计值
  • aryule() 不是内置函数,我不确定您使用的是什么函数。但我可以从名字猜到它与 Yule-Walker 方程有关。这些只是让您在自回归模型隐含的自协方差函数和自协方差函数隐含的自回归模型之间进行反转。那么您实际上是在寻找估计的自协方差函数吗?这与估计的自回归参数对应的协方差矩阵不同。无论如何,我建议关闭线程,因为这不是编程......
猜你喜欢
  • 2021-10-16
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 2020-04-13
  • 2013-06-30
  • 2011-05-16
  • 1970-01-01
相关资源
最近更新 更多