2015-11-24 53 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)