2016-06-10 42 views
3

我想中的R錯誤的Optim():尋找全球最小的一元函數

功能租期,提高一個函數估計只有mu參數時爲負二項分佈的似然函數。這不應該是一個問題,因爲函數顯然只有一個最大值。但是,我無法達到理想的結果。

功能被optmized是:

EMV <- function(data, par) { 

    Mi <- par 
    Phi <- 2 
    N <- NROW(data) 

    Resultado <- log(Mi/(Mi + Phi))*sum(data) + N*Phi*log(Phi/(Mi + Phi)) 
    return(Resultado) 
} 

數據是負二項式變量與參數2的載體和2

data <- rnegbin(10000, mu = 2, theta = 2) 

當我繪製具有mu作爲變量具有以下功能代碼:

x <- seq(0.1, 100, 0.02) 
z <- EMV(data,0.1) 
for (aux in x) {z <- rbind(z, EMV(data,aux))} 
z <- z[2:NROW(z)] 
plot(x,z) 

我得到以下曲線:

Generated Curve

和Z的最大值接近的參數值 - > 2

x[which.max(z)] 

但優化不與BFGS

Error in optim(par = theta, fn = EMV, data = data, method = "BFGS") : 
non-finite finite-difference value [1] 

工作,不會以SANN爲例:

$par 
[1] 5.19767e-05 

$value 
[1] -211981.8 

$counts 
function gradient 
    10000  NA 

$convergence 
[1] 0 

$message 
NULL 

的問題是:

  1. 我在做什麼錯?
  2. 有沒有辦法告訴optim param應該大於0?
  3. 有沒有辦法告訴optim我想最大化該功能? (恐怕optim試圖最小化,並去一個很小的值,其中函數返回最小值)
+0

謝謝。我使用了'optim(par = theta,fn = EMV,data = data,method =「Brent」,lower = 0,upper = 1E5)'',我得到1E5。看來,優化是最小化該區間的功能。 – Nizam

+0

請將您的評論作爲回答,我很樂意接受它。非常感謝。 – Nizam

+0

當然...慢慢來。我的問題已經解決了。 – Nizam

回答

3

最小化還是最大化?

雖然?optim說,它可以做到最大化,但畢竟是在一個支架上,所以最小化是默認:

fn: A function to be minimized (or maximized) ... 

因此,如果我們想最大限度的目標函數,我們需要乘以一個-1到它,然後將其最小化。這是很常見的情況。在統計中,我們經常希望找到最大對數似然性,所以要使用optim(),我們別無選擇,只能將負對數似然性降至最低。

使用哪種方法?

如果我們只做一維最小化,我們應該使用方法"Brent"。該方法允許我們指定搜索區域的下限和上限。搜索將從一個邊界開始,向另一個邊界搜索,直到達到最小值,或者到達邊界。這樣的規範可以幫助你限制你的參數。例如,您不希望mu小於0,那麼只需設置lower = 0

當我們移動到2D或更高維度時,我們應該求助於"BFGS"。在這種情況下,如果我們想限制我們的參數之一(例如a)爲正,我們需要採取日誌變換log_a = log(a),並使用log_a重新參數化我們的目標函數。現在,log_a沒有限制。當我們想要限制多個參數爲正數時也是如此。

如何更改代碼?

EMV <- function(data, par) { 

    Mi <- par 
    Phi <- 2 
    N <- NROW(data) 

    Resultado <- log(Mi/(Mi + Phi))*sum(data) + N*Phi*log(Phi/(Mi + Phi)) 
    return(-1 * Resultado) 
} 

optim(par = theta, fn = EMV, data = data, method = "Brent", lower = 0, upper = 1E5) 
0

optim幫助文件說:「在默認情況下的Optim進行最小化,但它會最大限度地提高,如果控制$ fnscale是負值。「因此,如果您將函數輸出乘以-1或更改控制對象輸入,則應該得到正確的答案。