2016-09-02 3 views
1

Ich versuche, in der folgenden Arbeit (Methode 5) http://dx.doi.org/10.1016%2FS0076-6879(05)09012-9 in Python2.7 einen Algorithmus zu implementieren, um meine Programmierkenntnisse zu verbessern. Implementierungen können an folgenden Orten gefunden werden: Anscheinend kann ich nicht so viele Links posten. Wenn mein Ruf steigt, werde ich die Links hier posten.Die MSS-Maximum-Likelihood-Methode für Fluktuationstest

This is the function I am trying to implement

Im Wesentlichen wird der Algorithmus für die biologische Forschung verwendet und findet die Mutationsrate der Zellen unter einer Bedingung. Hier ist mein Versuch, die Fehler hat (Anmerkung: Ich habe diesen Code aktualisiert jedoch einen Fehler zu entfernen, ich bin immer noch nicht die richtige Antwort zu bekommen):

import numpy as np 
    import sympy as sp 
    from scipy.optimize import minimize 


    def leeCoulson(nparray): 
      median=np.median(nparray) 
      x=sp.Symbol('x') 
      M_est=sp.solve(sp.Eq(-x*sp.log(x) - 1.24*x + median,0),x) 
      return M_est 

    def ctArray(nparray,max): 
      list=[0] * int(max+1) 
      for i in range(int(max)+1): 
        list[i]=nparray.count(i) 
      return list 

    values='filename1.csv' 
    data=np.genfromtxt(values,delimiter=',') 
    mVal=int(max(data)) 
    ctArray_=ctArray(np.ndarray.tolist(data),mVal) 

    ef mssCalc(estM,max=mVal,count=ctArray_): 
      def rec(pi,r): 
        pr=(estM/r)+sum([(pi[i]/(r-i+1)) for i in range(0,r-1)]) 
        return pr 
      prod=1 
      pi=[0]*max 
      pi[0]=np.exp(-1*estM) 
      for r in range(1,max): 
        pi[r]=rec(pi,r) 
        prod=prod*(pi[r]**count[r]) 
      return -1*prod 

    finalM=minimize (mssCalc,leeCoulson(data),method='nelder-mead',options={'xtol':1e-3,'disp':True}) 
      print finalM 

Dieser Code gibt die folgenden Fehler:

 mss-mle_calc.py:37: RuntimeWarning: overflow encountered in multiply 
     prod=prod*(pi[r]**count[r]) 
    /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scipy/optimize/optimize.py:462: RuntimeWarning: invalid value encountered in subtract 
     numpy.max(numpy.abs(fsim[0] - fsim[1:])) <= ftol): 
    Warning: Maximum number of function evaluations has been exceeded. 

Bitte helfen Sie mir, diesen Code besser zu machen, wenn Sie etwas Zeit haben.

+0

Ich wollte nur die Ironie bemerken, dass Ihr Problem ist. „Maximale Anzahl der Funktionsauswertungen überschritten worden ist“, und wenn sie versuchen, danach zu fragen, Sie erhalten einen Fehler "Maximale Anzahl der Hyperlinks überschritten". –

+0

Im Ernst, es sieht so aus, als ob Sie versuchen [eine unbegrenzte Funktion zu optimieren] (http://stackoverflow.com/questions/29229810/optimization-using-scipy). –

+0

Ich hatte den Witz nicht bemerkt, danke für ein Lachen. –

Antwort

0

Vielen Dank für die Suche, es gab ein paar dumme Fehler in meinem Code. Hier ist der Arbeitscode (soweit ich das beurteilen kann):

import numpy as np 
    import sympy as sp 
    from scipy.optimize import minimize 


    def leeCoulson(nparray): 
      median=np.median(nparray) 
      x=sp.Symbol('x') 
      M_est=sp.solve(sp.Eq(-x*sp.log(x) - 1.24*x + median,0),x) 
      return float(M_est[0]) 

    def ctArray(nparray,max): 
      list=[0] * int(max+1) 
      for i in range(int(max)+1): 
        list[i]=nparray.count(i) 
      return list 




    values='filename1.csv' 
    data=np.genfromtxt(values,delimiter=',') 
    mVal=int(max(data)) 
    ctArray_=ctArray(np.ndarray.tolist(data),mVal) 

    def mssCalc(estM,max=mVal,count=ctArray_): 
      def rec(pi,r): 
        pr=(estM/r)*sum([(pi[i]/(r-i+1)) for i in range(0,r)]) 
        return pr 
      prod=1 
      pi=[0]*(max+1) 
      pi[0]=np.exp(-1.0*estM) 
      for r in range(1,max+1): 
        pi[r]=rec(pi,r) 
        prod=prod*(pi[r]**count[r]) 

      return -1*prod 

    finalM=minimize (mssCalc,leeCoulson(data),method='nelder-mead',options={'xtol':1e-3,'disp':True}) 
    print finalM 
+0

Wenn jemand diesen Code verwenden möchte, finden Sie in der verbesserten Version unter https://github.com/jgardin/MSS-MLE-Fluktuation-Test-Python2.7, die auch Konfidenzintervall Berechnung und eine einfachere Benutzeroberfläche für den Benutzer enthält. –

Verwandte Themen