2014-10-09 89 views
1

我正在进行一个小型模拟研究,以检验矩方法和渐近最大似然估计量的性质。基于牛顿拉夫森的最大似然估计和矩量法

矩估计方法很容易获得(它由我的代码的第二行给出),但对于我必须编写牛顿 - 拉夫逊算法(对于一个样本来说工作得非常好)。因为它以这种方式享有一些最佳统计特性,因此需要使用矩估计方法作为起点(a0)。这里去

x<-rbeta(500,0.5,3) 
mom<-3*mean(x)/(1-mean(x)) 

mlea<-function(x,a0,numstp=100,eps=0.001){ 
    n=length(x) 
    numfin=numstp 
    ic=0 
    istop=0 
    while(istop==0){ 
     ic=ic+1 
     lprime=n/a0+n/(a0+1)+n/(a0+2)+sum(log(x)) 
     ldprime=-n/a0^2-n/(a0+1)^2-n/(a0+2)^2 
     a1=a0-(lprime/ldprime) 
     check=abs((a1-a0)/a0) 
     if(check<eps){istop=1} 
     a0=a1 
    } 
    list(a1=a1,check=check,realnumstps=ic) 
} 

这适用于一个样本,但我可以获得这些估计说1000样本?我怎么能轻易地概括这个过程?我的主要困难是由于母亲需要妈妈作为起点,而这两方面都需要从同一个样本计算出来。

预先感谢您。

+0

你可以用'复制(N,{...})''那里...'代表整个代码要重复'N'倍。 – 2014-10-09 19:32:01

+0

@RomanLuštrik不返回数字的矢量,如果你喜欢尝试。 – JohnK 2014-10-09 19:36:17

回答

3

我想你想这样做?

n<-100 
replicate(n, { 
    x<-rbeta(500,0.5,3) 
    mom<-3*mean(x)/(1-mean(x)) 
    mlea(x, mom) 
}) 

现在一个数字向量不会被返回,因为你的函数mlea返回一个列表。比方说,从该列表中你真正关心的值是A1,那么你可以做

n<-100 
replicate(n, { 
    x<-rbeta(500,0.5,3) 
    mom<-3*mean(x)/(1-mean(x)) 
    mlea(x, mom)$a1 
}) 

通知我称之为$ A1在函数调用结束。

所以,这是怎么回事就在这里被复制会拉从您的Beta分布500次新的观测中重复每次迭代(这将重复n次),然后计算依据是X的母亲,然后给球菌mleA

的结果

我的结果?

replicate(3, { 
      x<-rbeta(500,0.5,3) 
      mom<-3*mean(x)/(1-mean(x)) 
      list(a1=mlea(x, mom)$a1, mom=mom) 
     }) 
# [,1]  [,2]  [,3]  
#a1 0.494497 0.522325 0.5153832 
#mom 0.4955767 0.5083678 0.5206997 

其中这里的每一列是一个观察

+0

不幸的是,这只会返回mle沿检查和实例的值。那妈妈的价值呢? – JohnK 2014-10-09 19:59:04

+0

@JohnK你想要返回什么? – DMT 2014-10-09 19:59:48

+0

我想要妈妈的价值和mle。我怎么能这样做? – JohnK 2014-10-09 20:00:48