简体   繁体   中英

Time series modelling (Arima model fitting error)

Im trying to fit a Arima model to my data but run into the following error message, does anyone know how I can fix this. I'm thinking its something to do with my df but unsure how i can change it to be univariate

code

mod1 = arima(df, order = c(1,0,0))

error message

Error in arima(df, order = c(1, 0, 0)) : only implemented for univariate time series

data snippet (already as a ts())

df
Time Series:
Start = 2 
End = 10 
Frequency = 1 
   year      Qtr1     Qtr2     Qtr3     Qtr4
 2 2005 13.950342 18.66797 21.73983 22.49755
 3 2006 17.116492 17.71430 20.50190 20.84159
 4 2007 18.918347 15.46002 17.87220 20.01701
 5 2008 18.508666 15.53064 16.06696 20.21658
 6 2009 16.255357 14.85671 15.28269 12.16084
 7 2010  8.889602 16.18042 19.74318 15.05649
 8 2011 15.130970 15.96652 17.79070 18.35192
 9 2012 15.793286 11.90334 16.37805 16.45706
10 2013 11.867353 17.07688 17.60640 18.81432

In your previous question: Setting the first column as an index , I have already advised that you likely need a "ts" object. Copying my code over there:

dat <- structure(list(year = 2005:2011, Qtr1 = c(13.950342, 17.116492, 
18.918347, 18.508666, 16.255357, 8.889602, 15.13097), Qtr2 = c(18.66797, 
17.7143, 15.46002, 15.53064, 14.85671, 16.18042, 15.96652), Qtr3 = c(21.73983, 
20.5019, 17.8722, 16.06696, 15.28269, 19.74318, 17.7907), Qtr4 = c(22.49755, 
20.84159, 20.01701, 20.21658, 12.16084, 15.05649, 18.35192)), row.names = c(NA, 
-7L), class = "data.frame")

x <- ts(c(t(dat[-1])), start = c(2005, 1), frequency = 4)

Now let's do

arima(x, order = c(1,0,0))
#Call:
#arima(x = x, order = c(1, 0, 0))
#
#Coefficients:
#         ar1  intercept
#      0.4495    17.1316
#s.e.  0.1680     0.8696
#
#sigma^2 estimated as 6.78:  log likelihood = -66.64,  aic = 139.28

You can't just do:

df <- `row.names<-`(dat[-1], dat[[1]])
fake <- ts(df)

arima(fake, order = c(1,0,0))
#Error in arima(df, order = c(1, 0, 0)) : 
#  only implemented for univariate time series

Compare the difference between x and fake :

class(x)
#[1] "ts"

class(fake)
[1] "mts"    "ts"     "matrix"

Two things that print() s alike can be completely different!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM