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

时间:2015-11-28 02:35:47

标签: r loops

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

关于ARMA(1,1)流程的this youtube video评论,评论者在# Moving-average component中提供模拟。我认为,对于我的问题,可以直接转到ARMA函数的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 - 1开始,所以1是{{1} }及以上),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

我错过了什么?

1 个答案:

答案 0 :(得分:1)

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