2017-10-12 5 views
0

Je souhaite maximiser la fonction de vraisemblance par rapport au paramètre thêta. La fonction de vraisemblance est définie comme:Maximisation de la fonction de vraisemblance

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)) 

J'utilise:

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

Lorsque nn est un tableau numpy. Et je reçois cette erreur:

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

Quelqu'un peut-il m'aider?

+0

Essayez d'ajouter des instructions d'impression? Les arguments de paramètre de la fonction sont passés en tant que tableau, donc theta commence comme [1000]. En outre, le paramètre doit-il être un entier? Je crois que scipy.optimize.minimize ne le permet pas, car il nécessite des arguments en virgule flottante pour obtenir des dérivées, etc. – xioxox

+0

Ok, je suis nouveau sur le Python, j'utilise principalement R, quand vous dites des instructions d'impression que voulez-vous dire? – Alex

+0

Vous pouvez ajouter une impression (thêta, n, r) en haut de votre fonction pour montrer ce qui est transmis à la fonction. – xioxox

Répondre

0

Ok j'ai trouvé la solution juste au lieu de:

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

Je mets

math.lgamma(N+1) 

et au lieu de

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

Je mets

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

Mais c'est la même chose, le logarithme de la factorielle N et N-r respectivement, je ne comprends pas pourquoi il n'accepte pas la façon dont je l'ai eu précédemment.

+0

Parce que N est un tableau, pas un scalaire – xioxox