尽管粘贴代码很长,但这个问题可能非常基础,与我在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
。
我错过了什么?
答案 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。