2012-10-12 124 views
1

我是R新手,遇到優化問題。R中的優化

d <- c(0, 9.017, -9.017, 0, 9.017, 0, -8.579, -7.849, 0, 0, -7.849, 
    -9.017, 0, -7.849, -7.849, 0, 0, 0, 8.579, 1.168, 8.579, 8.579, 
    -7.849, 0.729, 8.579, 9.017, 0, -0.438) 

x <- c(0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 
    1, 1, 0, 1, 1, 1, 0, 1) 

log.like<-function (sigma){ 
    theta = pnorm(d,mean=0,sd=sigma) 
    logl = sum(log((theta^x) * ((1-theta)^(1-x)))) 
    -logl 
} 

optim(0,fn=log.like,method="L-BFGS-B",lower=0,upper=1) 

它給了我下面的錯誤:

Error in optim(0, fn = log.like, method = "L-BFGS-B", lower = 0, upper = 1) : 
    L-BFGS-B needs finite values of 'fn' 
+0

這不是非常接近'glm(x〜d,family = binomial(link =「probit」))'...? –

+0

我檢查過了,實際上'g1 < - glm(x〜d,family = binomial(link =「probit」)); 1/coef(g1)'將解決這個問題。 –

回答

5
> log.like(0) 
[1] Inf 

您使用0作爲初始值,但是,讓你的功能無限價值。這就是功能抱怨的原因。選擇一個實際合適的起始值,它應該可以正常工作。我不明白你爲什麼設置參數的上限爲1。你也可能想要增加它。

+0

最佳估計值約爲5.8,因此增加參數上限是一個好主意(除非有一些*先驗*理由將邊界設置爲[0,1])[我已經做了一些更多關於此的信息,如果我有機會發布它]。 –