2017-12-14 15 views
1

데이터 (패키지 'ecm'포함)에 대한 시계열 오류 수정 모델을 추정합니다. 아래 코드에서 xeq 및 xtr을 사용하여 장단 변수를 지정한다는 것을 알 수 있습니다.루프 회귀 추정 (ECM 모델)

이 변수는 독립 변수이며 종속 변수에 대한 추정치입니다 : 판매.

이 경우 풀링 된 모델이지만이 모델 단위를 단위로 추정하고 싶습니다 (모든 브랜드에 대해 별도로). 내 데이터 세트는 다소 크기가 크고 360 개의 제품 카테고리로 구성되어 있으며 각 카테고리는 3 개의 브랜드 (브랜드 2, 브랜드 3 및 브랜드 4)를 보유합니다.

xeq <- DatasetThesisSynergyClean[c('lnPrice', 'lnAdvertising', 'lnDisplay', 'IntrayearCycles', 'lnCompetitorPrices', 'lnCompADV', 'lnCompDISP' , 'ADVxDISP', 'ADVxCYC', 'DISPxCYC', 'ADVxDISPxCYC')]  
xtr <- DatasetThesisSynergyClean[c('lnPrice', 'lnAdvertising', 'lnDisplay', 'IntrayearCycles', 'lnCompetitorPrices', 'lnCompADV', 'lnCompDISP', 'ADVxDISP', 'ADVxCYC', 'DISPxCYC', 'ADVxDISPxCYC')]  
model11 <- ecm(DatasetThesisSynergyClean$lnSales, xeq, xtr, includeIntercept=TRUE) 
summary(model11) 

내가 원하는 것은 모든 카테고리의 모든 브랜드에 대한 출력을 생성하는 것입니다. 내 데이터를 한 눈에 보게하려면 다음 코드를 실행하십시오.

structure(list(Week = 7:17, Category = c("2", "2", "2", "2", 
"2", "2", "2", "2", "2", "2", "2"), Brand = c("3", "3", "3", 
"3", "3", "3", "3", "3", "3", "3", "3"), Display = c(0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0), Sales = c(0, 0, 0, 0, 13.440948, 40.097397, 
32.01384, 382.169189, 2830.748779, 4524.460938, 1053.590576), 
    Price = c(0, 0, 0, 0, 5.949999, 5.95, 5.950003, 4.87759, 
    3.787015, 3.205987, 4.898724), Distribution = c(0, 0, 0, 
    0, 1.394019, 1.386989, 1.621416, 8.209759, 8.552915, 9.692097, 
    9.445554), Advertising = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0), lnSales = c(11.4945151554497, 11.633214247508, 11.5862944141137, 
    11.5412559646132, 11.4811122484454, 11.4775106999991, 11.6333660772506, 
    11.4859819773102, 11.5232680456161, 11.5572670584292, 11.5303686934256 
    ), IntrayearCycles = c(4.15446534315765, 3.62757053512638, 
    2.92387946552647, 2.14946414386239, 1.40455011205262, 0.768856938870769, 
    0.291497141953598, -0.0131078404184544, -0.162984144025091, 
    -0.200882782749248, -0.182877633924882), `Competitor Advertising` = c(10584.87063, 
    224846.3243, 90657.72553, 0, 0, 0, 2396.54212, 0, 0, 0, 40343.49444 
    ), `Competitor Display` = c(0.385629, 2.108133, 2.515806, 
    4.918288, 3.81749, 3.035847, 2.463194, 3.242594, 1.850399, 
    1.751096, 1.337943), `Competitor Prices` = c(5.30989, 5.372752, 
    5.3717245, 5.3295525, 5.298393, 5.319466, 5.1958415, 5.2941095, 
    5.296757, 5.294059, 5.273578), ZeroSales = c(1, 1, 1, 1, 
    0, 0, 0, 0, 0, 0, 0)), .Names = c("Week", "Category", "Brand", 
"Display", "Sales", "Price", "Distribution", "Advertising", "lnSales", 
"IntrayearCycles", "Competitor Advertising", "Competitor Display", 
"Competitor Prices", "ZeroSales"), row.names = 1255:1265, class = "data.frame") 

자세히 알 수 있듯이 모든 카테고리와 브랜드는 행에 저장되어 있습니다. 모든 단일 브랜드에 대한 평가를 얻으려면 for 루프를 작성하고 싶지만이 출력을 별도로 저장하려면 올바른 카테고리와 브랜드를 지정하는 방법을 알지 못합니다.

결국 계수를 저장하려고합니다. 오류, t- 값 및 p- 값을 4 개의 개별 데이터 프레임에있는 모든 브랜드에 적용합니다. 하지만 먼저 출력을 얻어야합니다. 당신들이 저를 도울 수 있습니까?

+0

있다 'dplyr',''purr' 패키지를 사용하여 각 브랜드의 모델을 만드는 대안적인 방법. 선형 회귀 모델과 관련된 많은 게시물이 온라인에 있습니다. 그러나 당신은 당신의 경우에 그것을 조정할 수 있어야합니다. https://www.r-bloggers.com/running-a-model-on-separate-groups/ 및 https://stackoverflow.com/questions/38621556/advice-on-usage-of- 여기에서 몇 가지 정보를 참조하십시오. dplyr-do-vs-purrr-map-tidynest-for-predictions – AntoniosK

답변

0

이 같은 dplyr을 사용할 수

f <- function(.) { 
    xeq <- as.data.frame(select(., lnPrice, lnAdvertising, lnDisplay, IntrayearCycles, lnCompetitorPrices, lnCompADV, lnCompDISP, ADVxDISP, ADVxCYC, DISPxCYC, ADVxDISPxCYC)) 
    xtr <- as.data.frame(select(., lnPrice, lnAdvertising, lnDisplay, IntrayearCycles, lnCompetitorPrices, lnCompADV, lnCompDISP, ADVxDISP, ADVxCYC, DISPxCYC, ADVxDISPxCYC)) 
    print(xeq) 
    print(xtr) 
    summary(ecm(.$lnSales, xeq, xtr, includeIntercept = TRUE)) 
} 


Models <- DatasetThesisSynergyClean %>% 
    group_by(Category, Brand) %>% 
    do(Model = f(.)) 


Models$Category 
[1] "2" "3" 
Models$Brand 
[1] "3" "3" 
Models$Model 
[[1]] 

Call: 
lm(formula = dy ~ ., data = x) 
# ... and so on 

당신은 3 개 항목 (카테고리, 브랜드 및 모델 요약 개체) 및 고유의 카테고리/브랜드 조합에 동일한 길이의 목록을 끝낸다. 전체 데이터가 없기 때문에 제대로 시도 할 수 없습니다. 카테고리 3 모델 요약, 브랜드 3 : 당신은 당신이 그 (것)들에게 해당 이름을 부여하고 사용할 수있는 각 모델에 대한 독립 개체를 원하는 경우에

list2env() :

Models$Model[[which(Models$Category == 3 & Models$Brand == 3)]] 

업데이트

names(Models$Model) <- paste0("C", Models$Category, "B", Models$Brand) 
list2env(Models$Model, .GlobalEnv) 
+0

이것은 작동하는 것 같습니다! DF '모델'을 볼 수 있으며 마지막 세 줄을 실행하면 콘솔에 모든 출력이 표시됩니다. 특정 카테고리 및 브랜드에 대한 모델 산출물을 얻는 방법을 얻지 못합니다. – PimM

+0

글쎄'Models $ Model [1]]은 Cat 2, Brand 3에 해당합니다. 예를 들어 Model $ Category [1]과 Model $ Brand [1] –

+0

이렇게 할 수 있습니다 :'Models $ 모델 [[(모델 $ 카테고리 == 3 및 모델 $ 브랜드 == 3)]] ' –

0

나는 당신이 tidyverse 패키지의 일부를 한번보세요, 당신의 작은 데이터 세트의 각 기능을 적용 할 수 split(df, list(df$Category, df$Group)) 및 purrr의 map() 기능을 결합 벡터화 접근 방법을 사용하는 것이 좋습니다 것입니다. 코드는 다음과 같습니다.

df %>% 
    split(f = list(.$Category, .$Brand)) %>% 
    map(a_function_for_each_group) %>% 
    bind_rows() 

질문을 올바르게 이해했으면합니다.

+0

이것을 적용 할 수는 있지만 어떻게 진행해야합니까? – PimM

+0

'a_function_for_each_group' 출력물의 구조와 내용을 모른 채 진행할 방법을 제안하는 것은 어렵습니다. –