首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环回归估计(ECM模型)

循环回归估计(ECM模型)
EN

Stack Overflow用户
提问于 2017-12-14 13:26:29
回答 2查看 140关注 0票数 1

我正在估计一个时间序列错误修正模型对我的数据(与包'ecm')。在下面的代码中,您可以看到我使用xeq和xtr指定了短期和长期变量。

这些变量是自变量,是对因变量: Sales的估计。

在这种情况下,它是一个集合模型,但我想估计这个模型的单位单位(因此每个品牌分开)。因为我的数据集相当大,包括360种产品类别,每种产品都有3个品牌(品牌2,品牌3和品牌4)。

代码语言:javascript
复制
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)

我想要的是为每一个类别的每一个品牌生成一个输出。为了让您了解我的数据,请运行以下代码:

代码语言:javascript
复制
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循环,但我不知道如何指定正确的类别和品牌,以便单独保存这个输出。

最终想要存储系数,std。错误,t-值和p-值,所有品牌在4个单独的数据.但是首先我需要得到输出,你们能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-14 13:57:36

您可以像这样使用dplyr

代码语言:javascript
复制
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的示范摘要:

代码语言:javascript
复制
Models$Model[[which(Models$Category == 3 & Models$Brand == 3)]]

更新:

如果您想要每个模型的独立对象,您可以给它们相应的名称并使用list2env()

代码语言:javascript
复制
names(Models$Model) <- paste0("C", Models$Category, "B", Models$Brand)
list2env(Models$Model, .GlobalEnv)
票数 0
EN

Stack Overflow用户

发布于 2017-12-14 13:55:38

我建议您查看一些潮间带包,并考虑使用一种矢量化方法,将split(df, list(df$Category, df$Group))和purrr的map()函数结合起来,将一个函数应用于每个较小的数据集。代码应该是这样的:

代码语言:javascript
复制
df %>% 
  split(f = list(.$Category, .$Brand)) %>% 
  map(a_function_for_each_group) %>%
  bind_rows()

我希望我已经正确地理解了你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47814486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档