尽管粘贴代码的长度很长,但这个问题可能是非常基本的,并且与我在R中使用循环的困难有关。
对于这段youtube视频上关于ARMA(1,1)过程的评论,一个评论者提供了一个R模拟。我认为,对于我的问题,直接转到# 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或更高),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。
我遗漏了什么?
发布于 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。
https://stackoverflow.com/questions/33967082
复制相似问题