I don't understand results of ar() function in R.

I made up a very simple case, Fibonacci sequence:

x <- c(1,1,2,3,5,8,13,21,34,55)

result is


I would expect result of 1,1 - for the model x(n) = 1* x(n-1) + 1 * x(n-2)

Can anyone explain me please why I don't get expected result?

  • 7
    $\begingroup$ Fibonacci sequence is not a stationary process. There is no way you can use ar or arima to estimate it. Be careful, auto-regressive process and difference equation are different concepts! $\endgroup$ – 李哲源 Aug 24 '16 at 20:31

You may use ar.ols to estimate this non-stationary series.

From the docs,

ar.ols fits the general AR model to a possibly non-stationary and/or multivariate system of series x.

Example with your data:


ar.ols(x = x, demean = FALSE)

1  2  
1  1 
| cite | improve this answer | |
  • 3
    $\begingroup$ The same as ar(x, method = "ols"). Better set order.max=2 to get rid of warning message. $\endgroup$ – 李哲源 Aug 24 '16 at 21:02

As I said in my comment, you are going toward a wrong direction.

ar is assuming x as a stationary process AR(p). The default estimation method "yule-walker" is a moment estimator. Please see Yule-Walker equations of autoregressive process for more.

ar selects order p by minimizing AIC. For you example Fibonacci sequence x, it has selected p = 1. The resulting coefficient, by Yule-Walker equations, matches the sample ACF at lag 1:

z <- acf(x, lag.max = 1)
#    0     1
#1.000 0.553

enter image description here

Since model assumption is wrong, you definitely can not get c(1, 1) as the answer. A crude way to get you to the right estimation is using least squares linear regression:

N <- length(x)
y <- x[3:N]
x1 <- x[2:(N-1)]    # lag-1 
x2 <- x[1:(N-2)]    # lag-2

lm(y ~ x1 + x2 - 1)  ## drop intercept (as you know it for sure)
#x1  x2  
# 1   1  
| cite | improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.