# How does autoregression work in R?

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)
ar(x)


result is

Coefficients:
1
0.5531


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?

• 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! – 李哲源 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.

ar.ols(x,demean=FALSE)

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

Coefficients:
1  2
1  1

• The same as ar(x, method = "ols"). Better set order.max=2 to get rid of warning message. – 李哲源 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


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)
#Coefficients:
#x1  x2
# 1   1