Re: [問題] R的MLE
temp<-rweibull(12,2,3)#產生12個隨機值從weibull(2,3)
weib.para.star<-function(x,r)#參數初值函數
{
nn<-length(x)#幾個隨機值
ifelse(r>nn,rr<-nn,rr<-r)#確定產生的是12個隨機值
x.sort<-sort(x)#排序
x.rr<-x.sort[1:rr]#取前12個,如果產生的隨機值不是12個的話
#這個我不太懂,但從這開始目的好像是先線性化,在推回參數值
x.qq<-log(-log(1-(c(1:rr)-0.5)/nn))
#plot(x.qq,log(x.rr),xlab="log(-log())", ylab="order statistics")
x.lm<-lm(log(x.rr)~x.qq)
lambda<-exp(-x.lm$coef[1])
beta<-1/x.lm$coef[2]
para<-c(lambda,beta)
return(para)
}
weib.lik<-function(para,x,r)#概似函數
{
nn<-length(x)#幾個隨機值
ifelse(r>nn,rr<-nn,rr<-r)#確定產生的是12個隨機值
x.sort<-sort(x)#排序
x.rr<-x.sort[1:rr]#取前12個,如果產生的隨機值不是12個的話
#這是weibull的概似函數
like<-rr*para[2]*log(para[1])+rr*log(para[2])+(para[2]-1)*
sum(log(x.rr))-sum((para[1]*x.rr)^para[2])
(nn-rr)*(para[1]*x.rr[rr])^para[2]
return(-like)#乘負一,因為等下用nlminb時是要最小化
}
para.star<-weib.para.star(temp,12)#參數初值
weib.mle<-nlminb(star=para.star,weib.lik,lower=c(0,0),x=temp,r=12)
#(參數初值,想最小化的目標,下界,random value,個數)
有錯請指正!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.223.194.118
推
01/06 14:10, , 1F
01/06 14:10, 1F
推
01/06 14:13, , 2F
01/06 14:13, 2F
→
01/06 14:13, , 3F
01/06 14:13, 3F
→
01/06 16:13, , 4F
01/06 16:13, 4F
→
01/06 16:14, , 5F
01/06 16:14, 5F
→
01/06 16:15, , 6F
01/06 16:15, 6F
→
01/06 16:17, , 7F
01/06 16:17, 7F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
問題
2
7