mle估计错误,即使在简单的例子中
Error in mle Estimation, even in simple example
我正在尝试使用 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 模型中导出了起始值,但是稍微向上或向下更改这些值并没有解决错误。
有没有人知道,这里有什么问题?
您使用选项 log = TRUE
告诉 dnorm
return 概率的对数,然后再次获取结果的对数。这是错误的:要么删除该选项,要么更好地删除之后对日志的调用。
最好保留该选项,因为 dnorm 的值可以非常小,如果不适合 R 使用的浮点数,则四舍五入为零,这将导致 log(0)
(通常最小正数为 2^-1074 或 4.940656e-324,其对数为 "only" -744.4401)。为了解决这个问题,您应该记下可能性的对数,简化公式,然后才对结果表达式进行编码。这基本上就是选项 log = TRUE
为您所做的。
我正在尝试使用 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 模型中导出了起始值,但是稍微向上或向下更改这些值并没有解决错误。 有没有人知道,这里有什么问题?
您使用选项 log = TRUE
告诉 dnorm
return 概率的对数,然后再次获取结果的对数。这是错误的:要么删除该选项,要么更好地删除之后对日志的调用。
最好保留该选项,因为 dnorm 的值可以非常小,如果不适合 R 使用的浮点数,则四舍五入为零,这将导致 log(0)
(通常最小正数为 2^-1074 或 4.940656e-324,其对数为 "only" -744.4401)。为了解决这个问题,您应该记下可能性的对数,简化公式,然后才对结果表达式进行编码。这基本上就是选项 log = TRUE
为您所做的。