2014-12-16 2 views
3

dplyr을 사용하여 여러 모델을 예측하고 싶습니다. 모델은 시계열 데이터에 맞춰 지므로 매 시간마다 모델이 생성됩니다. 즉, 시간 = 1은 모델이고 시간 = 18은 모델입니다.몇 가지 시계열 모델 예측, dplyr

예 :

df.h.1 <- filter(df.h, hour == 1) 

fit = Arima(df.h.1$price, xreg = df.h.1[, 3:4], order = c(1,1,0)) 

df.f.1 <- filter(df.f, hour == 1) 
forecast.Arima(fit, xreg = df.f.1[ ,2:3])$mean 

을하지만 이런 식으로 뭔가 할 좋지 않을까 : 내가 그렇게 같은 시간에 의해 각 모델, 시간을 맞출 수

# Historical data - Basis for the models: 
df.h <- data.frame( 
    hour  = factor(rep(1:24, each = 100)), 
    price = runif(2400, min = -10, max = 125), 
    wind  = runif(2400, min = 0, max = 2500), 
    temp  = runif(2400, min = - 10, max = 25) 
) 

# Forecasted data for wind and temp: 
df.f <- data.frame(
    hour  = factor(rep(1:24, each = 10)), 
    wind  = runif(240, min = 0, max = 2500), 
    temp  = runif(240, min = - 10, max = 25) 
) 

fits <- group_by(df.h, hour) %>% 
    do(fit = Arima(df.h$price, order= c(1, 1, 0), xreg = df.h[, 3:4])) 

df.f %>% group_by(hour)%>% do(forecast.Arima(fits, xreg = .[, 2:3])$mean) 

답변

5

을 한 번의 호출로 데이터를 묶으려는 경우 데이터를 data.frame 단일 데이터로 바인딩 한 다음 다시 나눌 수 있습니다. n do 전화.

df <- rbind(df.h, data.frame(df.f, price=NA)) 
res <- group_by(df, hour) %>% do({ 
    hist <- .[!is.na(.$price), ] 
    fore <- .[is.na(.$price), c('hour', 'wind', 'temp')] 
    fit <- Arima(hist$price, xreg = hist[,3:4], order = c(1,1,0)) 
    data.frame(fore[], price=forecast.Arima(fit, xreg = fore[ ,2:3])$mean) 
}) 
res 
+0

Perfect! 나는 네가 이런 일을 할 수 있다는 것을조차도 몰랐다. – NoThanks