假设我有一个回归,其中响应变量是sales,并且我有各种销售驱动因素作为自变量。我想使用MCMC构建一个模型,但我不确定这是否可能(我在SAS中运行)。简化的模型结构见下文(生产模型中有更多的变量和随机交互):
Yij=β0+β1TVX1ij+γ(TV×dma)i+εi
对于上面的模型,我对β1表示的TV有一个主要效果,并在DMA (美国有210个DMA)和TV之间进行随机交互。我有我的所有参数的先验,当我在SAS中运行MCMC时,它需要几个小时才能运行。MCMC可以处理210随机项的随机交互吗?我使用MCMC是因为我想利用前几轮建模中的先验知识,但如果它需要永远运行,那就没有意义了。
proc mcmc data=modeldbsubset outpost=postout thin=1000 nmc=20000 seed=7893
monitor=(b0 b1);
ods select PostSummaries PostIntervals tadpanel;
parms b0 0 b1 0;
parms s2 1 ;
parms s2g 1;
prior b: ~ normal(0, var = 10000);
prior s2: ~ igamma(0.001, scale = 1000);
random gamma ~ normal(0, var=s2g) subject = dmanum monitor = (gamma) namesuffix = position;
mu = b0 + b1*TV + gamma;
model Y ~ normal(mu, var = s2);
发布于 2019-01-09 17:35:00
我不使用SAS,但毫不奇怪,这种规模的模型在使用默认的随机漫步Metropolis时会失败,该默认随机漫步Metropolis使用提案分布的身份覆盖矩阵进行初始化。The documentation on scale tuning说你可以调优到覆盖的MAP估计值(这是PyMC3默认做的),所以也许可以试着从那里开始。然而,文档也表示,这样做将使用MAP进行参数初始化,这是一个坏主意,因为MAP通常不在高维的典型集合中。
最后,我希望您需要针对您的数据做大量的调整,才能真正让它干净地运行,不幸的是,这只是艺术的一部分。
或者,您最好选择实现HMC/NUTS的更高级的MCMC采样框架,例如Stan、PyMC3或Edward。甚至还有一些高级包,如RStanArm,专门用于贝叶斯回归建模,但它将较低级别的MCMC内容保留在后台。
https://stackoverflow.com/questions/54012882
复制相似问题