2015-01-16 5 views
2

으로 그룹화합니다. 여러 수준의 요인에 대한 수치를 예측하거나 여러 요인 (예 : 성별 및 연령 조건. 지금까지의 프로세스는 꽤 수동적이었습니다. 아래처럼, 2-5 레벨을 가진 하나의 변수/요소에 대해서는 괜찮습니다. 그러나 여러 수준 또는 여러 요소가있는 요인에 대해 조건을 정할 수는 없습니다.그룹별로 예측 패키지 R

예상 패키지 내에 "그룹화"또는 "하위 집합"기능이 있습니까? 나는 가장 일반적인 경우 (즉, 여러 요소와 레벨에 대해) 아래 프로세스를 수행하는 프로그램을 작성했지만 너무 성공적이지 못했습니다.

불행히도 내 데이터는 비공개이며 여기에서 공유 할 수 없습니다. 그러나 아래 코드가 효과적이며 확장 가능한 솔루션을 찾고 있기 때문에 실제로는 중요하지 않습니다.

# Example code 

# category is a factor with levels A and B; amt is the variable to model/forecast 
# using data.table syntax to create a vector for each category 
vec1 <- dt[category == 'A']$amount 
vec2 <- dt[category == 'B']$amount 

# Create ts objects from above vectors 
ts1 <- ts(vec1, start=c(start_year, start_month), end=c(end_year, end_month), frequency=12) 
ts2 <- ts(vec2, start=c(start_year, start_month), end=c(end_year, end_month), frequency=12) 

# Fit model 
fit1 <- auto.arima(ts1, trace = TRUE, stepwise = FALSE) 
fit2 <- auto.arima(ts2, trace = TRUE, stepwise = FALSE) 


# Forecast out using selected models 
h <- 12 
fcast1 <- forecast(fit1, h) 
fcast2 <- forecast(fit2, h) 

# funggcast pulls out data from the forecast object into a df (needed for ggplot2) 
# output columns are date, observed, fitted, forecast, lo80, hi80, lo95, hi95 
fcastdf1 <- funggcast(ts1, fcast1) 
fcastdf2 <- funggcast(ts2, fcast2) 

# Add in category 
fcastdf1$category <- 'A' 
fcastdf2$category <- 'B' 


# Merge into one df 
df <- merge(fcastdf1, fcastdf2, all=T) 

# Basic qplot from ggplot2 package, I am actually incorporating quite a bit more formatting but this is just to give an idea 
qplot(x=date, 
     y=observed, 
     data=df, 
     color=category, 
     group=category, geom="line") + 
geom_line(aes(y=forecast), col='blue') 
+0

대부분의 코드는 'vec'(예 :'dt [category == 'A'] $ amount')를 사용하는 함수에서 래핑 할 수 있으며 해당 fcastdf를 반환합니다. 그러면 주어진 vec 목록에 대해'lapply'와'as.data.frame'을 사용하여 원하는 결과를 얻을 수 있습니다. –

+0

답장을 보내 주셔서 감사합니다. 당신은 맞고, 아마 내 문제의 90 %를 해결하기 때문에 거기에서 시작할 것입니다. 최종 합병증은 초기 벡터를 선택하고 작성하는 과정조차도 자동화하려는 욕망에 있습니다. 충분한 조각이 있으면 50 개 이상 작성해야 할 수도 있기 때문입니다. – efh0888

+0

선택 프로세스뿐만 아니라 입력 데이터 세트에 대한 더 많은 지식이이 프로세스를보다 간단하게 만들 수 있다고 생각합니다. 데이터 세트의 모든 카테고리에 대한 예측을 수행하고 싶습니까? 그런 다음 데이터를''녹여서 'plyr' 패키지의'dlply' 또는'dplyr' 또는'data.table' 패키지의 비슷한 도구를 사용할 수 있습니다 (이미 사용하고있는 것처럼 후자가 선택 될 수도 있습니다). data.table). –

답변

0

당신은 tapply으로이 작업을 수행 할 수 있습니다

res <- tapply(amount, category, function(x) { 
    ts <- ts(x, start = start, frequency = 12) 
    fit <- auto.arima(ts, trace = TRUE, stepwise = FALSE) 
    fcastdf <- forecast(fit, h = h) 
    return(fcastdf) 
    }) 

이것은 예측의 이름 목록을 반환합니다.

데이터 세트에서 가장 빠른 날짜로 시작을 설정해야합니다.