全部版块 我的主页
论坛 经济学人 二区 学术资源/课程/会议/讲座 论文版
3982 6
2010-05-07
用sas的nlp过程求两阶段的负二项分布的最大释然估计。数据是模拟出来的。
程序如下:
data part1(type=est);                                                                                                                                                                                                                                          
      keep _type_  expb0 expb1 theta;                                                                                                                                                                                                                                 
      _type_='parms'; expb0 = 0 ; expb1=1 ; theta=0.5; output;                                                                                                                                                                                                        
      _type_='lb'; expb0 = 1.0e-6 ; expb1 =1.0e-6 ;theta = 1.0e-6;  output;                                                                                                                                                                                          
run;                                                                                                                                                                                                                                                           
proc nlp data=sasuser.com tech=tr inest=part1 outest=opart1    /*b0=0.05,b1=2,gamma=0.2,lamda=5,n=100*/                                                                                                                                                      
outmodel=model1 cov=2 vardef=n pcov phes;                                                                                                                                                                                                                       
max logf;                                                                                                                                                                                                                                                      
parms expb0 expb1 theta;                                                                                                                                                                                                                                             
profile expb0 expb1 theta / alpha = 0.05;                                                                                                                                                                                                                             
y_th = y; x_th = x;                                                                                                                                                                                                                                             
lamda = 5.3600 ;   /* lamda is the mle of the second stage model of possion distribution */                                                                                                                                                                     
b=log(gamma(y_th+theta))-log(gamma(theta))+theta*log(theta) ;                                                                                                
if x_th=1 then c=lamda*expb0*expb1;
if x_th=0 then     c=lamda*expb0;                                                                                                                                                                                                                                          
a=y*log(c)-(y+theta)*log(theta+c);                                                                                                                                                                                                            
s=a+b;                                                                                                                                                                                                                                                         
logf = s;                                                                                                                                                                                                                                                      
run;   
最后算出来的Theta不对呢?请各位高手指点迷津!!
数据产生程序如下(R软件):
simudata<-function(b0,b1,gamma,lamda,n){
t<-rgamma(n,1/gamma,1,gamma)
m<-rpois(n,lamda)
x<-rbinom(n,1,0.5)
u<-c(1:2)
y<-c(1:2)
p<-c(1:2)
for(i in 1:n)
{ b<-x
if(b<=0)
u<-b0
else
u<-b0*b1
}
for(i in 1:n){
p<-t*u
o<-m
b<-rbinom(1,o,p)
y<-b
}
data<-data.frame(Y=y,M=m,X=x)
print(data)
}
simudata(0.05,2,0.2,5,100)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2010-5-13 18:27:17
怎么没人回复呢?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-5-14 12:02:46
呵呵,我知道哪儿错了~~~~~
参数的参数次幂用npl过程不能求出来,可以用泰勒展开近似求解
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-5-29 21:01:17
cheny600 发表于 2010-5-14 12:02
呵呵,我知道哪儿错了~~~~~
参数的参数次幂用npl过程不能求出来,可以用泰勒展开近似求解
这个也不对。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-6-1 09:57:37
最后的解决方案是:
用sas的genmod过程提供了负二项分布
最后计算出的结果需要在计算一下。哎,自问自答了,都没人关注。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-6-1 10:02:00
当然对一些极端的数据,sas的genmod过程提供的算法是不收敛的,如果遇到那种数据就只有自己编程了,建议用s-plus或者R
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群