2012-10-12 93 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])[我已经做了一些更多关于此的信息,如果我有机会发布它]。 –