由于长度原因,使用优化功能时出错

时间:2018-09-23 23:28:55

标签: r

我正在尝试使用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))

任何建议将不胜感激。

1 个答案:

答案 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