2017-10-12 80 views
0

我想最大化關於theta參數的似然函數。似然函數被定義爲:使似然函數最大化

from scipy.optimize import minimize 

def prloglik(theta,n,r): 
    N=theta;k=len(n) 
    ar1=np.sum(np.log(np.array(range(N))+1)) 
    ar2=np.sum(n)*np.log(np.sum(n)/(k*N)) 
    ar3=(k*N-np.sum(n))*np.log(1-(np.sum(n))/(k*N)) 
    par=np.sum(np.log(np.array(range(N-r))+1)) 

    return(-(ar1+ar2+ar3-par)) 

我使用:

res=minimize(prloglik,1000,method='BFGS',args=(nn,962)) 

nn是numpy的陣列。我得到這個錯誤:

TypeError: only integer arrays with one element can be converted to an index 

任何人都可以幫我嗎?

+0

嘗試添加一些打印語句?該函數的參數參數作爲數組傳遞,所以theta以[1000]開始。另外,該參數是否必須是一個整數?我相信scipy.optimize.minimize不允許這樣做,因爲它需要浮點參數來獲得衍生物等。 – xioxox

+0

好吧,我是Python的新手我主要使用R,當你說打印語句是什麼意思? – Alex

+0

您可以在函數頂部添加print(theta,n,r)來顯示傳遞給函數的內容。 – xioxox

回答

0

好,我找到了解決辦法,而不是僅僅的:

 np.sum(np.log(np.array(range(N))+1)) 

我把

math.lgamma(N+1) 

,而是

np.sum(np.log(np.array(range(N-r))+1)) 

我把

math.lgamma((N-r)+1) 

但是它是同樣的事情,分別是階乘N和N-r的對數,我不明白爲什麼它不接受我以前的方式。

+0

因爲N是一個數組,而不是標量 – xioxox