2015-11-24 54 views
2

我在一个学生研究职位,并且是新来的R.我问了一个类似的问题(贴在这里:MLE Issues)。我已经解决了最初的问题,但是我遇到了这个功能的更多问题。更多MLE麻烦

我仍然使用这个函数来试图估计θ[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) 

我被抛出的错误是:

Error: argument "theta" is missing, with no default

我道歉,如果错误是愚蠢的,我有R.

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

+1

'mle'函数来自哪个软件包?看看它的帮助文件。 –

+0

它属于stats4。我知道mle需要的功能是一个对数似然函数。我相信错误是在我的功能,我只是不知道我在做什么错了。 –

+0

我无法让我的功能在mle中工作。我知道我必须为mle功能做些什么。 –

回答

3

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

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

    ... # rest of function follows 
    } 

其中etc手段与theta_3 = 1替换此,theta_4 = 1是必要的。功能mle然后可以调用:

mle.fit <- mle(maxParam)