• 统计学数理统计
  • WinBUGS问题:Panel data模型中的Incidental Parameter Problem.有人知道如何解决吗?

最近正在做一个简单的panel data probit模型.这个是根据Tony Lancaster 书"An Introduction to Modern Bayesian Econometics(2004)"上的代码改写.根据他的建



议,为了解决面板数据中的Incidental Parameter Problem,我改写了代码.代码可以参见307页.我把这个代码和初始值及数据(极小版)放在最后面了.



但是问题是,Tony的书里面只给了一个自变量x[i,j]的代码.数据是二维的(N*T).他在这个代码后面说道,如果自变量是一个向量,包含x=(x1,x2,x3,.......)的话,就是我的情况。必须对代码进行改写,数据也要变成3维的(N*T*K,K就是自变量的数量,比如=4).我不知道该如何改写代码和数据,请大家帮我看看吧.



另外我在网上找的关于WinBUGS的Panel data的例子和论文,都没有人处理过Incidental parameter problem.按照Tony的书上所说,这是一个可能导致偏差的问题,所以要解决。虽然他没有说是不是必须要解决.我做了两个模型,一个是非常简单的没有处理Incidental parameter Problem的,包含一个自变量x,另一个也是同样的自变量但是处理了Incidental parameter problem(我把这个复杂模型附载最后了).使用同样的数据,两个模型的结果beta值不一样,符号相反.我想一定有哪一个模型是错的。大家的意见呢?





模型简介:y[i,j]是公司在t期的进入情况(0或者1),x[i,j]是该公司t-1期或者t-2期的进入情况.也就是滞后一到两年的y.alpha是一个公司特性的变量,yr[j]是时间dummy variables.我关心的就是beta.当然还有其他一些自变量我先不放进去了.P=c(...)里面的0.076923约等于1/13.是prof david spiegelhalter建议我的.软件不能识别1/13,只能用数字.


MODEL2            treating incidental parameter problem<br />
model{<br />
for( i in 1 : N ) {<br />
for( j in 1 : T ) {<br />
y[i, j] ~ dbern(mu[i, j])<br />
mu[i, j] <- phi(alpha[i] +beta * x[i, j] +beta.yr[j])}<br />
alpha[i] ~ dnorm(nu[i], 1)<br />
nu[i] <- lam [i, z[i]]<br />
z[i] ~ dcat (p[ ])<br />
lam[i, 1]   <-   -beta * x[i, 1]<br />
lam[i, 2]   <-   -beta * x[i, 2]<br />
lam[i, 3]   <-   -beta * x[i, 3]<br />
lam[i, 4]   <-   -beta * x[i, 4]<br />
lam[i, 5]   <-   -beta * x[i, 5]<br />
lam[i, 6]   <-   -beta * x[i, 6]<br />
lam[i, 7]   <-   -beta * x[i, 7]<br />
lam[i, 8]   <-   -beta * x[i, 8]<br />
lam[i, 9]   <-   -beta * x[i, 9]<br />
lam[i, 10] <-   -beta * x[i, 10]<br />
lam[i, 11] <-   -beta * x[i, 11]<br />
lam[i, 12] <-   -beta * x[i, 12]<br />
lam[i, 13] <-   -beta * x[i, 13]<br />
}<br />
for(j in 1:T){<br />
beta.yr[j] ~ dnorm(0,0.001)<br />
}<br />
beta ~ dnorm(0, 0.001)<br />
}<br />
<br />
init<br />
list(alpha=c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),<br />
     beta  = 0,<br />
     beta.yr = c(NA,0,0,0,0,0,0,0,0,0,0,0,0),<br />
)<br />
<br />
Data<br />
list(<br />
     N=10,T=13,<br />
     p=c(0.076923, 0.076923, 0.076923, 0.076923, 0.076923, 0.076923, 0.076923, 0.076923, 0.076923, 0.076923, 0.076923, 0.076923, 0.076923),<br />
     y=structure(<br />
          .Data=c(<br />
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,<br />
0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,<br />
1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,<br />
0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1,<br />
0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0,<br />
0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,<br />
0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,<br />
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<br />
0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,<br />
0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0),<br />
               .Dim=c(10,13)<br />
),<br />
         x=structure(<br />
              .Data=c(<br />
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, <br />
0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, <br />
1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, <br />
1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, <br />
1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, <br />
0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, <br />
1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, <br />
0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, <br />
0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, <br />
1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0),<br />
               .Dim=c(10,13)      <br />
                   )<br />
)<br />
END
不会用WINBUG, 不过帮你顶以下,其实自己写个程序也用不了多长时间,而且肯定比winbug效率高。
上次跟谢益辉说过要开发一个软件,现在底层基本做完了,正在写GUI,不过最近被导师逼的紧,实在抽不出时间,真是怀念以前自由自在的日子。

以后还是用咱们国产软件吧,呵呵,绝对免费。底层,GUI, plot全部C++, 那叫个快,而且全部standard C,所有平台都可以编译。等我写完了一定传上来。
真的吗 楼上的打算把它做成自由软件吗?

崇拜一下先
这个要顶,一定要顶。
虽然严重跑题,但还是要严重顶hangover大哥!
真的是严重跑题了 . 各位大虾快点帮我看看吧.两维的数据我还有数,三维的就要抓瞎了.
谢谢各位鼓励。等忙过这段就我一定全力写这个软件。



想问一下,谁手里有好的优化算法的C++代码? 比如simulated annealing, Bill Goffe有fortran code. 但是俺不懂fortran. 现在MCMC simulation最方便的方法就是laplace approximation, 但是需要算mode, 所以需要好的优化的算法。gratident算法虽然也行,不过感觉有点落伍了。



先谢了。
[quote]引用第7楼revell2007-04-12 00:36发表的“”:

真的是严重跑题了 . 各位大虾快点帮我看看吧.两维的数据我还有数,三维的就要抓瞎了.[/quote]



说实话对panal data真没啥研究,但是真的很想学习学习。 我们图书馆没有你说的那本书 (:

你能用latex把你的模型放上来么?
An Introduction to Modern Bayesian Econometrics这本书我也想看,可惜图书馆没有,LZ是amazon买的还是影印的?
[quote]引用第8楼hangover2007-04-12 05:58发表的“”:

谢谢各位鼓励。等忙过这段就我一定全力写这个软件。



想问一下,谁手里有好的优化算法的C++代码? 比如simulated annealing, Bill Goffe有fortran code. 但是俺不懂fortran. 现在MCMC simulation最方便的方法就是laplace approximation, 但是需要算mode, 所以需要好的优化的算法。gratident算法虽然也行,不过感觉有点落伍了。



先谢了。[/quote]



最优化计算原理与算法程序设计 [专著] / 粟塔山, 彭维杰, 周作益等编著



这本书出得比较早 我在九章看到粟塔山有本比较新的



GSL(GNU科学与工程计算函数库)里也许有你需要的

但是如果你用了它,你必须要把你的软件作成自由软件



Fortran我会一点 但是不懂MCMC

其他这个语言还是挺好学的 如果他没有用别的函数库的话
An introduction to modern Bayesian econometrics

哪里可以买到,有同学知道不?
回楼上的话.我是借图书馆的书.此书不错,但是有点typo.我想等第二版出来再买,如果一年内出版的话.



另外我的模型很简单的,就是一个单变量Probit模型.当然以后会加入更多的变量.Code里面已经写了这个模型.
另外我原始数据有200多个公司,其中一些自变量缺失了.我用NA在数据中代替了缺失变量.可是prof david spiegelhalter告诉我不可以用NA(尽管我看其他人的例子里面是可以用的).大家认为为什么呢?难道是和Panel data或Probit 有关?我问过David不少问题了,好像人家有点烦了. 汗,不想再问了.



不过我打算使用missing data imputation来弥补缺失的数据
[quote]引用第11楼ypchen2007-04-12 09:35发表的“”:



.......[/quote]





http://emlab.berkeley.edu/Software/abstracts/goffe895.html



这个是William Goffe fortran code的连接,好像没多少行,实在没有时间去学了,现在我的c库用的都是gradient算法,听朋友说william Goffe的算法不错,哪位fortran高手帮忙重新写个C的?

其实也可以用f2c转换,但是感觉不是很爽。



GSL里面的优化算法需要加强,现在很弱的。刚才看了一下V 1.9还是老样子。
[quote]引用第14楼revell2007-04-13 17:55发表的“”:

另外我原始数据有200多个公司,其中一些自变量缺失了.我用NA在数据中代替了缺失变量.可是prof david spiegelhalter告诉我不可以用NA(尽管我看其他人的例子里面是可以用的).大家认为为什么呢?难道是和Panel data或Probit 有关?我问过David不少问题了,好像人家有点烦了. 汗,不想再问了.



不过我打算使用missing data imputation来弥补缺失的数据 [/quote]



如果用Likelihood可以做的,何必再用MCMC?missing data 可否用prior补一下?posterior is propotional to the product of likelihood and prior。 likelihood principal 还是有效的。

如果spiegelhalter说不行,winbugs肯定不行,至少现在。那你只能自己写code了。你把模型放上来,我可以帮你想想。winbugs我用过,很久以前了,不过现在实在没有时间去查manual 去翻译模型。隔行如隔山, 我觉得你的模型很复杂, 但是也很想学习一下。
请问hangover,你知道profile likelihood是什么检验吗?

它和likelihood的区别是什么呢?

谢谢
听说spiegelhalter和Brooks都要离开现在的单位了......

有时候我的模型里也不能用NA,一到NA就说什么超过什么向量数什么的,这是为啥呢

有的模型里不用NA表示删失数据的,说不定可以试试