更麻烦的麻烦

时间:2015-11-24 10:15:39

标签: r mle

我是一名学生研究职位并且是R的新手。我提出了类似的问题(在此发布:MLE Issues)。我已经解决了最初的问题但是我遇到了这个函数的更多问题。

我仍在使用此功能试图估算theta [i],enter image description here 其中每个其他变量目前都已知。

以下是我的代码:

  maxParam <- function(theta) {
    logl <- sum(for (i in 1:length(doses)) {
      sum(
        for (j in 1:LITTERS.M) {
          sum(
            for (k in 0:(litterResponses[i,j]-1)) {
              sum(log10(probabilityResponses[i] + k * theta[i]))
            }
            +
            for (k in 0:(litterSizes[i,j]-litterResponses[i,j]-1)) {
              sum(log10(1 - probabilityResponses[i] + k * theta[i]))
            }
            -
            for (k in 0:(litterSizes[i,j] - 1)) {
              sum(log10(1 + k * theta[i]))
            }
          )
        }
      )
    })

    return (-logl)
  }

  mle.fit <- mle(maxParam, start=list(theta=c(1,1,1,1,1,1)))
  print(mle.fit)

我被抛出的错误是:

  

错误:缺少参数“theta”,没有默认值

如果错误是愚蠢的,我很抱歉,我对R知之甚少。

备注: 我使用(1,1,1,1,1,1)的向量作为theta的测试。这不是实际数据。剂量是6的载体,其对应于血清的剂量水平。凋落物响应是一个矩阵,描述每剂量每剂量血清的反应。 LitterSizes是一个矩阵,描述每窝每窝剂量的大小。 LITTERS.M是与血清接触的初始窝数。 ProbabilityResponses是一个向量,描述了给定小鼠受血清影响的概率。

2 个答案:

答案 0 :(得分:3)

函数mle不接受初始起始值的向量。通过优化找到的每个参数都需要作为标量传递。将函数声明更改为:

就足够了
maxParam <- function(theta_1 = 1, theta_2 = 1, etc) {
    theta <- unlist(as.list(environment()))

    ... # rest of function follows
  }

其中etc表示根据需要将其替换为theta_3 = 1theta_4 = 1。然后可以使用以下函数调用函数mle

mle.fit <- mle(maxParam)

答案 1 :(得分:1)

我有一段时间没有同样的问题。 mle不接受向量参数,而mle2则为{1}}。 Have look at this.