我正在尝试使用R中的最大似然法来估算以下对数函数,但出现以下错误:
optim中的错误(开始,f,方法=方法,粗麻布= 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))
任何建议将不胜感激。
答案 0 :(得分:0)
我不知道如何解决您的问题,但希望我能帮助您诊断出问题。正如@KonradRudolph在评论中所建议的那样,在这种情况下,通常的建议“如果不确定,请添加更多括号”可能弊大于利……我已经以与您所匹配的方式重写了函数ve以上,但括号较少,换行/缩进更一致。下面的每一行都是一个单独的加法项。您的特定问题是,最后一项涉及x
(在这种情况下,其长度为10),但没有相加,因此返回值最终为长度为10的向量。
LL2 <- function(theta, lambda) {
R <- n*log(2)+
n*log(theta)-
((2)+1)*sum(log(x))-
sum(theta/(x^2))+
log(1+lambda-(2*lambda*exp(-theta/x^2)))
return(-R)
}
all.equal(LL(1,1),LL2(1,1)) ## TRUE
length(LL2(1,1)) ## 10