首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一个具体例子中理解R循环中迭代的编码

在一个具体例子中理解R循环中迭代的编码
EN

Stack Overflow用户
提问于 2015-11-28 02:35:46
回答 1查看 78关注 0票数 3

尽管粘贴代码的长度很长,但这个问题可能是非常基本的,并且与我在R中使用循环的困难有关。

对于这段youtube视频上关于ARMA(1,1)过程的评论,一个评论者提供了一个R模拟。我认为,对于我的问题,直接转到# Moving-average componentARMA函数是可以的:

代码语言:javascript
复制
ARMA = function(phi, theta, n = 100, init = 0, burn = 0)
{
  m = n + burn # Optional burn-in
  z = rnorm(m) # White noise sample

  x = init
  for (i in 2:m) # Generate the time series
  {
    # Autoregression component

    p = min(length(x), length(phi)) # Prevent out-of-bounds
    AR = sum(phi[1:p] * x[1:p])

    # Moving-average component

    q = min(i - 1, length(theta)) # Prevent out-of-bounds
    MA = sum(theta[1:q] * z[(i - 1):(i - q)])

    # Combined AR+MA component

    new = AR + MA + z[i]
    x = c(new, x) # x is built in reverse
  }

  # Truncate the burn-in
  # Re-reverse x vector
  # Return time series

  ts(rev(x[1:n]))
}

plot(ARMA(0.3, 0.2))

在我看来,q = min(i - 1, length(theta))看起来是一个常量,因为无论i迭代数是什么(我们从2开始,i - 11或更高),i - 1总是相等的(在1的情况下)或大于length(theta)theta是一个常量(因此,length(theta) = 1)。因此,q,作为min将永远是1

因此,我不理解sum(theta[1:q] * z[(i - 1):(i - q)])z[(i - 1):(i - q)]将是z[(i - 1):(i - 1)],也就是z[i]theta[1:q]将是theta[1],这是没有意义的,因为theta只有一个值,除非theta是一个向量。但事实是,我可以使用一个ARMA值来运行theta

我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-28 11:26:34

您可以运行ARMA,因为n等于100,循环生成2:m (在本例中为99)值。1:99中的每一个都与θ相乘,得到99个不同的值(MA = sum(theta[1:q] * z[(i - 1):(i - q)]))。z[(i - 1):(i - q)])不是z[i],而是z[i-1],θ有length=1。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33967082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档