楼主: qcy_qin
7403 22

[学科前沿] 请问OLS 和MCMC的适用场合 [推广有奖]

11
mac1220 发表于 2012-11-10 18:12:17
qcy_qin 发表于 2012-11-10 08:51
MCMC虽然是SAMPLING ,实际上它的目的通过抽样出一个马尔科夫链,最后还是对未知参数进行估计的吧!
MCMC根据时可逆原则从条件概率出发,迭代出目标函数的模拟值,因为条件概率,所以是MARKOV CHAIN,你完全搞颠倒顺序了。

12
mac1220 发表于 2012-11-10 18:16:32
TaskShare 发表于 2012-11-10 13:12
抱歉,没说的很清楚。我的意思是:已知那100个数据~Gamma分布,可以用贝叶斯(Bayes)的方法去估计参数,在 ...
用GAMMA,因为他是一种GENERATING DISTRIBUTION,可以用来做各种分布的CANDIDATE. APLHA和BETA其实很重要,你拿MATLAB PLOT一下就知道了,GAMMA的DISTRIBUTION形状完全会不一样……用错CANDIDATE,然后还用MCMC,根本不会收敛的。所以这个意义上,MCMC根本不是万能的。

13
mac1220 发表于 2012-11-10 18:18:52
qcy_qin 发表于 2012-11-10 14:46
谢谢你啊,感激你这方面的造诣确实比较深。我面临的问题是这样:现在已经收集到几个月的交易数据,建立 ...
Logistic模型用BAYESIAN不见得好,用常规ML方法估计,然后BOOTSTRAP……效果一样的

14
mac1220 发表于 2012-11-10 18:26:13
TaskShare 发表于 2012-11-10 15:07
MCMC的缺点是计算量大(所以影响计算速度),优点是万能(别的方法算不出的,但它行)。很多model只能用M ...
你这么说误导很严重,做BAYESIAN的都有共识,MCMC是不得已而为之的,在很多情况下都可能导致MCMC彻底失败,比如MULTIMODAL,跑了千万甚至上亿次之后,不收敛那可不是闹得。数据量大,虽然PRIOR的影响变小,但是对MCMC来说,improper prior的结果就完全是灾难性的了。

15
TaskShare 发表于 2012-11-10 20:49:30
qcy_qin 发表于 2012-11-10 14:46
谢谢你啊,感激你这方面的造诣确实比较深。我面临的问题是这样:现在已经收集到几个月的交易数据,建立 ...
mac1220兄弟有点激动了。其实,学习讨论,没有对错,都是交流一下。
既然mac1220兄弟对我那个关于non-informative先验分布有点意见,为了对MCMC负责,我就做出了那个GAMMA分布的例子。
即:已知有100个数据(数据见下面DATA部分)符合GAMMA分布,但参数(alpha, beta)不知,求alpha, beta. [注意:我用自编程序生成了alpha=5, beta (rate)=0.33333的GAMMA分布随机数100个来测试我所说的。]
解:用WINBUGS(免费软件)编程(注:此软件全名Baysian analysis Using Gibbs Sampling, 故名BUGS,大概是这个版本在Windows下运行,所以这个版本叫WINBUGS),程序全文在最下面。

计算结果(运行15万次,WINBUGS运行大约1分钟):
alpha估计的期望值是=4.728,95%置信区间=(3.57,6.07);
beta估计的期望值是=0.344,95%置信区间=(0.255,0.447).
注意:我试验用数据是来自于alpha=5, beta (rate)=0.33333的GAMMA分布,可见,运行结果精度颇好。如果不是100个数,而是1000个数,相信运行后效果还要好。注意,下面运行的先验分布是相当粗糙的(non-informative),即:我先验估计alpha是0-100的均匀分布,beta是0.01-1的均匀分布(注意作为rate变量的beta算作0.01-1均匀分布也是很粗糙的先验分布)。

抱歉我用万能来形容MCMC,主要因为我是Monte Carlo方法的粉丝,可能用词过当,mac1220指正是对的,没有东西是万能的。我只想表达“很有用”的意思,希望此词形容MCMC不太过分。

估计GAMMA分布数据的参数的WINBUGS程序全文:

MODEL {
for( j in 1 : N ) {
x[j] ~ dgamma(alpha, beta) #beta is rate, not scale
}
alpha~dunif(0,100)#it is a very non-informative prior
beta~dunif(0.01,1)#it is a very non-informative prior
}

DATA
list(N=100, x=c(11.84524767, 9.708104972, 16.49415807, 10.99153794, 5.385304998, 9.418692202, 9.072621943, 21.38534992, 17.34950565, 23.9611375, 15.43633211, 20.8442679, 15.75218542, 10.37746788, 17.86907719, 9.783414683, 12.58412357, 7.942704961, 5.564122853, 16.80276375, 14.71883864, 6.071883448, 22.73573137, 14.07994764, 14.65396108, 17.59253501, 9.530853926, 8.71994181, 8.501434976, 17.54338337, 24.3890357, 14.49163717, 10.46117615, 6.251054951, 5.139936399, 11.99244901, 6.436172461, 17.0739699, 6.881424755, 27.68744206, 5.306163629, 3.420765455, 7.395404743, 13.02700524, 29.64616639, 28.1788055, 18.20303018, 9.926019888, 7.11322463, 10.52217018, 15.70333865, 17.17850051, 13.82554226, 13.75681583, 19.41797552, 15.67165051, 10.49164377, 14.75079051, 9.691549028, 17.82475442, 18.99192082, 10.72737194, 14.21925723, 14.81770279, 27.53697511, 10.31232338, 12.56286656, 8.017582225, 10.04121424, 21.41362956, 22.70887882, 17.90629383, 8.072237433, 6.681193511, 5.207311642, 12.6722237, 8.101531152, 18.97004853, 12.48270646, 3.196478158, 22.91477947, 9.802356111, 10.39960976, 15.38522656, 3.801874068, 11.62363503, 10.65275324, 16.07606418, 15.43313882, 7.362055508, 20.79578481, 10.33514018, 7.140794509, 12.50320922, 13.55792908, 22.83272614, 21.47858176, 7.821753948, 30.32392129, 26.6399079))

FIRST INIT
list(alpha=0.5, beta=0.9)

SECOND INIT
list(alpha=50, beta=0.1)

Third INIT
list(alpha=99, beta=0.05)

16
TaskShare 发表于 2012-11-10 21:06:33
mac1220 发表于 2012-11-10 18:26
你这么说误导很严重,做BAYESIAN的都有共识,MCMC是不得已而为之的,在很多情况下都可能导致MCMC彻底失败 ...
抱歉我用万能来形容MCMC,主要因为我是Monte Carlo方法的粉丝,可能用词过当,你指正是对的,没有东西是万能的。我只想表达“很有用”的意思,希望“很有用”形容MCMC不太过分。

我跟MCMC打了些交道,觉得MCMC挺好的,只要仔细对待,没用过“千万上亿次”运算、“灾难性”后果不常出现。我常用non-informative prior,只有处理得好,边试边改,效果还好,没有想象中那么可怕。

当然,MCMC缺点的确有很多:耗时久;可能不收敛(或收敛慢);有时会让人错以为已收敛,其实没有,从而导致错误的估计和结论。

17
mac1220 发表于 2012-11-10 22:05:08
TaskShare 发表于 2012-11-10 21:06
抱歉我用万能来形容MCMC,主要因为我是Monte Carlo方法的粉丝,可能用词过当,你指正是对的,没有东西是 ...
应该说,non-info prior在构建POSTERIOR的初始阶段是可以用用的,特别在UNI-MODAL或者不使用其他算法探索目标分布的边界的情况下,(比如简单的DIFFUSE PRIOR)但是如果正式SIMULATION,绝对应该避免使用,或者尽量用INFO PRIOR.收敛问题放一边,精度也会差一个数量级。

说计算时间,二、三十维左右的MLE的问题,用MCMC(哪怕不用任何IS),在一台50万欧元级别RISC运算工作站上可能就要算差不多一天了。万一事后才发现设定有问题……然后…………

同样这个情况,如果用GIBBS,可能也就几个小时的事情……

所以有时候真的不是很好玩了……

18
mac1220 发表于 2012-11-10 22:18:59
TaskShare 发表于 2012-11-10 20:49
mac1220兄弟有点激动了。其实,学习讨论,没有对错,都是交流一下。
既然mac1220兄弟对我那个关于non- ...
1)你这里只有PRIOR啊,LIKELIHOOD在哪里啊?
2)ALPHA,BETA怎么可以用均匀分布随便DRAW啊?这两个数值的些微差别,整个分布函数的形状就完全不一样了啊。。。。。

19
mac1220 发表于 2012-11-10 22:19:47
TaskShare 发表于 2012-11-10 20:49
mac1220兄弟有点激动了。其实,学习讨论,没有对错,都是交流一下。
既然mac1220兄弟对我那个关于non- ...
汗,你把ALPHA和BETA当PRIORS?拜托,这些是HYPERPARAMETERS啊……我服了你了……

20
TaskShare 发表于 2012-11-10 22:42:28
mac1220 发表于 2012-11-10 22:19
汗,你把ALPHA和BETA当PRIORS?拜托,这些是HYPERPARAMETERS啊……我服了你了……
似乎,我们谈的不是同一件事。我谈的只是根据数据来进行GAMMA分布参数估计的一种方法,以及使用WINBUGS来达到目的。正如上面的15楼的例子。WINBUGS有其使用方法,不需要告诉WINBUGS后验分布的表达式,只需上面的程序中MODEL,DATA(INIT也可以省),它自动会利用GIBBS法从后验分布中取sample,从而完成计算。15楼也写出了计算结果,有何不对,请指正。

要么,你也举个具体的例子,或写点可以实际计算的东东,让我学习学习。MCMC的或其他的方法都行。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-10 07:19