我正在进行一项小型模拟研究,以渐近方式检验矩量法和最大似然估计量的性质。
矩量估计器的方法很容易获得(它由我的代码的第二行给出)但是对于mle我必须编写一个Newton-Raphson算法(对于一个样本非常有效)。 mle需要使用矩量估计器的方法作为起点(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个样本的这些估计吗?我怎么能轻易地概括这个过程?我的主要困难是由于mle需要妈妈作为起点这一事实,并且这两者都需要从同一样本计算出来。
提前谢谢。
答案 0 :(得分:4)
我想你想这样做?
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分布中为每次重复迭代(将迭代n次)提取500个新观察,然后根据该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
这里的每一列都是观察