Проблема с привязкой объектов - допускается только замена элементов? - PullRequest
9 голосов
/ 03 октября 2010

Я хотел бы привязать вывод прогноза модели арима к моему исходному объекту серии ts в формате данных типа расплав. Но я получаю следующее сообщение об ошибке, которое не понимаю:

Error in `[<-.ts`(`*tmp*`, ri, value = c(12.2567768232753, -0.0141881223732589,  : 
  only replacement of elements is allowed

Вот некоторый воспроизводимый код с примерами данных из Yahoo Yahoo!

# custom function to extract years from ts object
tsyears = function (ts){

years = as.data.frame(trunc(time(ts)))
return(years)

}

library(quantmod)
sp500 = new.env()

### get some fresh data directly from yahoo finance
getSymbols("^GSPC", env = sp500, src ="yahoo", from = as.Date("1960-01-01"),to =as.Date("2010-09-29") )


GSPC = sp500$GSPC

check what we got (last 6 entries)
tail(GSPC)

#calculate annual returns from all the adjusted closes
annual=annualReturn(GSPC)

model = arima(annual,c(1,1,0))
pd = predict(model,10)

q = ts(pd$pred,start=2010,end=2020)
w = as.ts(annual,start=1960,end=2009)

e=data.frame(tsyears(q),unclass(q),"prediction")
names(e) = c("years","return","series")

w = data.frame(tsyears(w),unclass(w),"historical")
names(w) = c("years","return","series")     

rbind(w,e)

Что бы я хотел иметь:

year   return   series
2008     5        original
2009     -3       original
2010     6        prediction
2011     4        prediction

и т. Д. С тех пор я расплавляю набор данных и использую его с ggplot, назначая разные цвета значению серии.

1 Ответ

5 голосов
/ 03 октября 2010

Ваша функция tsyears возвращает data.frame, который содержит объект ts:

> str(tsyears(q))
'data.frame':   11 obs. of  1 variable:
 $ x: Time-Series  from 2010 to 2020: 2010 2011 2012 2013 2014 ...
> str(tsyears(w))
'data.frame':   50 obs. of  1 variable:
 $ x: Time-Series  from 1960 to 2009: 1960 1961 1962 1963 1964 ...

Я думаю, вы хотели, чтобы ваша функция возвращала data.frame, содержащий числовой вектор.Вам не нужно возвращать data.frame;просто возвращение числового вектора работает нормально:

tsyears <- function(ts) as.numeric(trunc(time(ts)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...