我试图用mle估计模型,因此从一个简单的示例开始,对此也进行了here的解释:
不幸的是,即使重现此代码,我也总是会收到错误消息:
Error in optim(start, f, method = method, hessian = TRUE, ...) : initial value in 'vmmin' is not finite
我的代码如下
library(stats4)
N=100
x <- runif(N)
y <- 5 * x + 3 + rnorm(N)
LL <- function(beta0, beta1, mu, sigma) {
R = y - x * beta1 - beta0
R = dnorm(R, mu, sigma, log = TRUE)
-sum(log(R))
}
fit <- mle(LL, start = list(beta0 = 5.9, beta1 = 2.8, sigma=1), fixed = list(mu=0))
fit
我从线性ols模型中得出了起始值,但是将它们向上或向下更改一点都不能解决错误。 有人有想法吗,这是怎么了?
答案 0 :(得分:1)
您告诉dnorm
使用选项log = TRUE
返回概率的对数,然后再次获取结果的对数。错了:要么删除该选项,要么更好的是,删除以后的日志记录调用。
最好保留该选项,因为dnorm的值可能非常小,如果它们不适合R使用的浮点数,则四舍五入为零,这将导致log(0)
(通常是最小值正数是2 ^ -1074或4.940656e-324,其日志为“仅” -744.4401)。为了解决这个问题,您应该写下可能性的对数,简化公式,然后对结果表达式进行编码。这基本上就是选项log = TRUE
为您所做的。