R函数mle出现错误:L-BFGS-B需要'fn'的有限值。

3

我试图在R中对我的数据使用MLE,但是我出现了这个错误,我不知道为什么:

optim(start,f,method = method,hessian = TRUE,...)中的错误:L-BFGS-B需要'fn'的有限值

这是我的代码:

negative_likelihood <- function(mu, sigma){
    -sum(dnorm(my_data, mean=mu, sd=sigma, log=TRUE))
}

mle(negative_likelihood, 
                    start=list(mu=1, sigma=1), 
                    method="L-BFGS-B")

这是我的数据:

my_data <- c(4.94586, 6.12280, 4.81591, 5.50351, 5.50545, 5.15068, 6.16997, 5.46339, 5.06350, 5.51779, 4.56657,
6.29238, 5.34117, 4.91623, 5.32503, 4.89550, 5.96892, 5.53120, 5.39801, 6.52902, 6.39206, 5.40570,
5.05369, 6.25207, 6.22229, 5.07920, 4.86948, 5.27202, 5.87191, 4.67544, 5.29845, 6.61682, 5.84775,
6.23129, 5.64602, 5.47904, 4.86500, 5.73270, 5.04059, 5.32655, 4.94984, 5.21750, 5.49940, 5.80918,
5.62308, 5.17108, 5.30865, 4.68632, 6.08171, 4.97175, 5.01062, 6.11321, 4.87875, 6.44020, 5.40842,
4.62120, 6.32134, 4.66841, 5.15763, 4.94830, 5.42050, 5.60300, 6.41332, 5.84598, 5.43916, 6.26707,
5.77663, 4.86735, 4.72968, 4.75750, 6.09207, 4.86551, 6.61289, 6.12277, 5.67457, 5.35039, 5.03592,
6.06066, 5.36947, 5.24907, 6.19433, 6.24891, 6.22482, 5.45656, 5.67550, 6.05438, 5.72339, 4.78657,
6.28039, 6.25110, 6.41801, 4.91509, 5.78600, 5.20904, 5.00558, 5.50219, 5.21147, 5.11444, 5.00882,
6.47516, 6.38823, 5.24394, 5.33561, 5.54943, 6.45429, 6.39522, 6.48763, 5.64982, 4.66434, 5.34011,
5.63098, 4.67009, 4.96963, 6.15372, 6.58736, 5.53276, 5.48312, 5.93943, 5.75046, 5.24359, 5.85595,
5.97529, 5.68883, 5.06501, 4.99481, 6.30492, 5.36067, 5.85319, 4.56297, 5.00996, 6.40176, 6.48352,
5.61199, 5.71818, 6.39520, 5.39979, 5.87741, 4.69639, 6.18796, 5.97227, 5.92887, 4.94455, 4.85209,
5.02248, 4.98821, 5.48650, 6.33475, 4.54574, 4.98732, 4.80852, 5.57595, 6.51516, 5.64974, 4.58779,
5.03896, 4.65786, 6.29632, 4.94102, 4.52586, 4.76241, 5.66072, 4.72090, 5.71862, 5.26193, 6.33256,
6.04895, 4.48541, 4.68550, 5.03825, 5.97953, 6.01831, 5.02418, 6.27500, 5.95202, 5.59450, 5.36699,
5.66311, 6.04644, 6.25481, 4.72681, 6.55935, 4.78016, 6.27429, 4.85316, 5.68597)

@jared_mamrot 我不知道如何在这个教程中使用正态分布,因为正态分布有两个参数,而这个教程只有一个参数(它是二项式)。 - MMRA
1个回答

3
这个错误的发生是因为您函数的参数正在趋向于返回非有限值的数值。特别地,如果 sigma = 0,将会出现以下情况:
> -sum(dnorm(my_data, mean=1, sd=0, log=TRUE))
[1] Inf

为了解决这个问题,您可以指定sigma估计值的下限:
mle(negative_likelihood, 
    start=c(mu = 1, sigma = 1),
    method="L-BFGS-B",
    lower = c(-Inf, 0.01),
    upper = c(Inf, Inf))

这将返回一个合理的结果:

Coefficients:
       mu     sigma 
5.5271686 0.5849431 

由于mean(my_data) = 5.527,且sd(my_data) = 0.586,因此我认为这是一个很好的估计。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接