论坛里面的各位高手,菜鸟请教个问题:
用极大似然估计,如何设定估计参数的上下界? 下面是写的程序,我想设定要估计的参数param为[-1,1],可是R里面的极大似然估计包里面的函数好像都没有设置参数的上下界!在这里请赐教啦!
f=read.table("f:/data1.txt",header=TRUE) #导入数据
cdf1=ecdf(f$x)
cdf2=ecdf(f$y)
u1=cdf1(f$x)
u2=cdf2(f$y) #得出经验分布函数值
n=length(u1)
#对u1,u2的数据进行处理,防止出现求逆的时候出现无穷大,这里把1约等于0.99
for(i in 1:n)
{ if(u1[i]==1) u1[i]=0.99
if(u2[i]==1) u2[i]=0.99
}
y1=qnorm(u1)
y2=qnorm(u2)
# 进行极大似然估计
library('maxLik')
loglik=function(param){
ll=-n*log(1-param^2)/2-(1/(2*(1-param^2)))*(sum(y1^2)-2*param*sum(y1*y2)+sum(y2^2))
ll
}
res=maxLik(loglik,start=0,method="BFGS")
运行后出现:
Warning messages:
1: In log(1 - param^2) : 产生了NaNs
2: In log(1 - param^2) : 产生了NaNs
3: In log(1 - param^2) : 产生了NaNs
4: In log(1 - param^2) : 产生了NaNs
5: In log(1 - param^2) : 产生了NaNs
6: In log(1 - param^2) : 产生了NaNs
7: In log(1 - param^2) : 产生了NaNs
8: In log(1 - param^2) : 产生了NaNs
9: In log(1 - param^2) : 产生了NaNs
所以这里肯定是参数的界限出了问题!