icwei

  •  
  • 2009年6月24日
  • 注册于 2009年6月1日
  • [未知用户] 你理解的基本正确,但注意不要混淆posterior distribution(后验分布)和posterior predictive distribution(后验估计分布?不知道这个中文名是否正确)的概念。他们的区别是:假设我们的参数为a,数据为y,那么后验分布是指P(a|y),而后验估计分布是指P(y_pred|y),它等于P(y_pred|y)=integral(P(y_pred|a)*P(a|y))da,既你对未来数据的预测是基于当前model的likelihood,以后验分布作为piror,进行加权而得到的。他是对你估计参数的所有值得一个综合性考量。

    我不是纯数学背景出身,我大本学的是自控和信号处理,从博士开始专攻统计信号处理,博士毕业后开始转入统计学在生物医学方面的数学建模,现在主要兴趣在Bayesian statistics, mcmc, hierarchical graphical model, differential equation 以及 stochastic system。有兴趣的话可以和我联系,我们可以共同探讨。我的email是 chen.wei@mrc-bsu.cam.ac.uk
  • [未知用户] 不好意思,我学统计学的时候用英文学的,所以可能用中文表达起来有些难懂。举个不完全恰当但简单的例子吧,像我上面说的,我有dataset={0, 0, 0, 0, 0},他们是从一个有噪音的系统产生的,噪音符合normal distribution,但均值和方差均不为0。那么我用一个normal distribution的model去fit这些data,得到的结果为mean=0, variance=0.这个model可以完美的fit我当前的data.可是当我用这个model求posterior predictive distribution的时候,我所得到的是P(y_pred|y)=N(0, 0), 其所相对应得predictive dataset为y_pred={0, 0, 0, 0, 0, .....}. 可是当我们让这个系统继续产生更多的data时,我们会发现我们model产生的值并不能很好的反映系统的特性(尽管估计的参数能够很好的fit我们原始的dataset)。

    那么,我们的疑问是:我们的model错了么???但在这个特殊的例子里,我们可以说,model没有错,只是他估计的参数错了。那么参数不正确是由什么引起的呢?那就是我们的实验设计。这个实验设计为只得到5个数据,而这5个数据不足以反映系统的全部特性,因此才估计出错误的参数。

    因此,我们说,参数是否能代表系统的特性,不但model要能反映真实系统的特性,数据也要能够反映真实系统的特性,这涉及到实验设计的问题。通常情况下,只要考虑posterior predictive distribution是否能反映系统产生的未来数据的特性就可以了。
  • [未知用户] 我的意思是原作者有一个model,他为了检验这个model的正确性,便设计了一个实验,这个实验就是先假设所有参数已知,用这些参数产生data,然后再用这些data来估计这些参数,对比求得的参数和原参数的值来证明model是否正确。这样的实验没有大问题,但实施的时候要小心,你需要的检验你所产生的这些data是否能反映model的所有特性。

    实际上,原作者提出的验证model的方法并不正确,即使他能够得到和原参数一样的值也并不能说明这个model对于实际的data就是正确的。他犯了一个基本的错误,既他用frequentist的方法来验证bayesian的正确性。在frenquentist的概念中,model是存在真值的,所以你可以提出一个hypothesis去检验估计值是否等于真值;而在bayesian中,我们是用credit interval 来表示所求的参数,既真值并不存在,而是与我们的prior knowledge相关的一个范围。

    实际问题中,我们更多的是只得到一些数据,然后用这些数据去估计我们的参数。正确的判断参数是否能够反映系统正确性的方法是看posterior predictive distribution, 既P(y_pred|y). 如果你的posterior predictive distribution能够正确的模拟你的data,那说明这个model所估计的参数是真正能够反映你系统的特性的;反之不能。
  • [未知用户] 问题不是出在你的model上,而是出在你的实验设计上。你先假设参数的值,产生y的数据集,然后用y来求出这些参数,理论上来说,只有y无限多,且产生这些y的参数遍历其所有空间时,才能返回来求出这些参数的真值。举一个简单的例子:在normal distribution P(y|theta, tau)中,我已知theta=0,tau=1,用这样的参数来产生y;假如我产生了5次data, 非常非常巧,我5次data的值都是0,因此你的数据集y={0, 0, 0, 0, 0}.那么你能用这样的数据集来估计出真正的theta和tau么?答案是否定的,你只能估计出正确的theta,而tau却非常的不一样。所以说,你产生的data要能正确地反映出你model,你才能正确的估计它的参数。这是一个parameter identifiability 的问题。希望这样的解答对你有用。
  • GeoBUGS 界面只能完成简单及有限的数据分析,要想做自己的数据分析,最简单的方式是以楼主附录中列出的model作为source code模板,根据自己的模型加以改动,然后load进你的data,进行mcmc采样分析。
  • 小弟现正在剑桥mrc-bsu做postdoc,具体的项目就是BUGS的开发以及在生物及医学方面应用。WinBUGS这个软件是我两个老板 David Spiegehalter,Dave Lunn 和其它一些牛人共同开发的。我们现在正在从WinBUGS 转向openBUGS,目的是将它做成open source的软件以应用在更广的领域。我现在正在开发BUGS中的WBDiff部分并将它应用在二型糖尿病的动态系统的数据分析中。有兴趣或有问题的同学可以和我联系:

    chen.wei@mrc-bsu.cam.ac.uk

    还有我们这里每年会举办3-4次BUGS的培训,2天的课程,在英国或能到英国出差的同学有兴趣的话可以参加,主讲人是David speigehalter 和 Dave Lunn。
  • [未知用户] 反三角函数比较难一些,比如arctan(x)用微分可以表示为darctan(x)/dx=1/(1+x^2),你需要在WBDiff中编写一个微分函数来求x,具体WBDiff的编写可以参考
    http://www.winbugs-development.org.uk/wbdiff.html

    pi的表示很简单,你在你的data中定义一个pi=3.1415926,然后在model中使用pi就可以了。
  • [未知用户] 首先,car.normal是一个用户定义的分布函数,所以你在BUGS自带的函数中无法找到,自然也就无法将它在doodle中画出来。

    其次,dflat()在distribution中有,只不过没有在user manual中列出来罢了。但是,强烈建议不要使用这个distribution,因为他的source code并没有对他的边界有一个很好的定义,以至于在一些复杂的model很容易让程序crash. 几个比较好的替代有: dunif(), dnorm(),dbeta().

    dunif(a, b)很简单,只要自己定义边界就可以了。
    dnorm(mean,precision)其实最实用,只要把precision设得小一些就可以了,比如0.000001,通常我们都会用这个来代替dunif()。
    dbeta(1,1)也可以用来代替dunif().
  • [未知用户] 你需要下载Blackbox,即BUGS的开发软件,然后自己编写需要的distribution.具体请参见
    http://www.winbugs-development.org.uk/wbdev.html
  • [未知用户] 如果你用word的话,直接ctrl-c + ctrl-v就行了。如果是LaTex的话,最好存储成.ps文件。不过我通常都将结果输出在R,然后利用R强大的图形功能作图。
  • 小弟现正在剑桥mrc-bsu做postdoc,具体的项目就是BUGS的开发以及在生物及医学方面应用。WinBUGS这个软件是我两个老板David Spiegehalter,Dave Lunn 和其它一些牛人共同开发的。我们现在正在从WinBUGS 转向openBUGS,目的是将它做成open source的软件以应用在更广的领域。 我现在正在开发BUGS中的WBDiff部分并将它应用在二型糖尿病的动态系统的数据分析中。有兴趣或有问题的同学可以和我联系:

    chen.wei@mrc-bsu.cam.ac.uk

    还有我们这里每年会举办3-4次BUGS的培训,2天的课程,在英国或能到英国出差的同学有兴趣的话可以参加,主讲人是David speigehalter 和 Dave Lunn。