2015-02-23 2 views
2

Я пытаюсь создать прогноз на основе данных временных рядов.как вы можете прогнозировать данные временных рядов?

Моих кадр данных вызов Даты выглядят следующим образом:

dput (голова (Даты))

dat <- structure(list(out = c(5, 0, 0, 0, 0, 0), Date = c(1423825200000, 
1423825500000, 1423825800000, 1423826100000, 1423826400000, 1423826700000 
)), .Names = c("out", "Date"), row.names = c(NA, 6L), class = "data.frame") 

В настоящее время существует 81 строк в моем кадре данных DAT. Вызываются мои столбцы, а столбцы Date, Date - в эпоху.

Мне нужно построить линейную модель первым:

lin <- lm(dat[,1]~dat[,2], data=dat) 

на основе этой модели, мне нужно, чтобы предсказать почасовые точки данных в течение 7 дней и т.д. так, я делаю это:

t<-3600 
newdata <- seq(tail(dat$Date,1), tail(dat$Date,1)+604800, t) 
newdata<-data.frame(newdata) 
    colnames(newdata)<-c("Date") 
    predictions <- predict(lin, newdata=newdata, level=0.95, interval="prediction") 
    predictions <- data.frame(predictions) 
    f<-predictions 
    f<-data.frame(f) 
    f<-cbind(f, newdata) 
    f<-f[,c("fit", "Date")] 
    colnames(f)<-c("Forecast", "Date") 

I получить эту ошибку:

Error in data.frame(..., check.names = FALSE) : 
    arguments imply differing number of rows: 81, 169 In addition: Warning message: 
'newdata' had 169 rows but variables found have 81 rows 

Независимо от размера моего кадра данных (DAT), я должен быть в состоянии построить линейную модель а nd на основе newdata, я должен выполнить функцию прогнозирования. Какие-нибудь идеи, что может происходить здесь?

+0

Может быть, некоторые из ваших переменных являются факторами, которые расширены в 'lm' – kristang

+0

@kristang, они являются цифровыми. – user1471980

+0

попробуйте использовать имена переменных в формуле 'lin <- lm (out ~ Date, data = dat)' – NicE

ответ

4

Попробуйте это. Таким образом, вы все равно можете держать все динамичным.

variable.list<-names(dat) 
lin <- lm(as.formula(paste(variable.list[1],variable.list[2], sep="~")), data=dat) 

Позвольте мне знать, если он работает

+1

Что здесь происходит, так это то, что в вашем исходном коде две переменные, которые вы использовали в вашей линейной модели, называются dat [, 1] и dat [, 2] вместо «out» и «Date». Вы можете проверить имена на 'names (lin $ rates)' В результате, предсказание не смогло соответствующим образом скорректировать линейную модель с вашим новым набором данных. – Hao

Смежные вопросы