【发布时间】:2018-09-23 23:28:54
【问题描述】:
我正在尝试使用 R 中的最大似然法估计以下对数函数,但出现以下错误:
优化错误(start, f, method = method, hessian = TRUE, ...) : 优化中的目标函数计算为长度 10 而不是 1
我的尝试如下:
生成数据
set.seed(101)
n <- 10
u <- runif(n)
theta1 <- 1
lamba1 <- 0.5
使用分位数函数生成 PTIR 数据
x <- function(u, theta1, lamba1) {
(-theta1/(log((1+lamba1)-sqrt((1+lamba1)^2-(4*lamba1*u)))/(2*lamba1)))^(1/(2))
}
x <- x(u = u, theta1 = theta1, lamba1 = lamba1)
声明对数似然函数
LL <- function(theta, lamba) {
R = suppressWarnings((n*log(2))+
(n*log(theta))-(((2)+1)*sum(log(x)))-
(sum(theta/(x^(2))))+
(log(1+lamba-(2*lamba*exp(-theta/(x^(2)))))))
return(-R)
}
mle(LL, start = list(theta = 5, lamba=0.5))
任何建议将不胜感激。
【问题讨论】:
-
目前无法复制...需要在调用
mle之前使用library(stats4),然后...nlog是什么? -
对不起,它是“n*log”而不是“nlog”,我没明白你的意思。
-
如果您愿意,我需要更多说明
-
对于
mle和类似函数,您的目标函数需要返回单个标量值。您的函数LL显然返回一个长度为10 的向量——这并不奇怪,因为您的计算涉及一个非标量x。suppressWarning在数值计算中通常是一个非常的坏主意:你不想想忽略警告。它还有助于清晰地格式化方程式并去掉不必要的括号。 -
不管怎样,你有没有可能只是忘了
sum你的等式的最后一项?
标签: r