Je essaie de minimiser une fonction qui produit du chi-square via scipy et trouver les mu, sigma, normc qui fournissent le meilleur ajustement pour une superposition gaussienne.
from math import exp
from math import pi
from scipy.integrate import quad
from scipy.optimize import minimize
from scipy.stats import chisquare
import numpy as np
# devinez les valeurs initiales pour le chi-square minimisé
mu, sigma = np.mean(mydata), np.std(mydata) # mes points de données sont dans mydata
normc = 1/(sigma * (2*pi)**(1/2))
gauss = lambda x: normc * exp( (-1) * (x - mu)**2 / ( 2 * (sigma **2) ) ) # Distribution gaussienne
# supposons que j'ai des limites de classe pré-définies en tant que liste appelée binbound
def expvalperbin(binbound,mu,sigma,normc):
# calcule la valeur d'attente par classe
ans = []
for index in range(len(binbound)):
if index != len(binbound)-1:
ans.append( quad( gauss, binbound[index], binbound[index+1])[0] )
return ans
expvalguess = expvalperbin(binbound,mu,sigma,normc)
obsval = countperbin(binbound,mydata)
arglist = [mu,sigma,normc]
def chisquareopt(obslist,explist):
return chisquare(obslist,explist)[0]
chisquareguess = chisquareopt((obsval,expvalguess), expvalguess, args=arglist)
result = minimize( chisquareopt(obsval,expvalguess), chisquareguess )
print(result)
En exécutant ce code, cela me donne cette erreur :
TypeError: chisquareopt() got an unexpected keyword argument 'args'
J'ai quelques questions :
1) Comment puis-je écrire une fonction pour permettre aux arguments d'être passés à ma fonction chisquareopt ?
2) Comment puis-je dire si scipy optimisera les paramètres [mu, sigma, normc] qui donnent le chi-square minimum ? Comment pourrais-je trouver ces paramètres à partir de l'optimisation ?
3) Il est difficile de savoir si je progresse ici ou non. Suis-je sur la bonne voie ?
EDIT : Si c'est pertinent, j'ai une fonction qui prend en entrée [mu, sigma, normc] et renvoie une liste de sous-listes, chaque sous-liste contenant une combinaison possible de [mu, sigma, normc] (où la liste externe couvre toutes les combinaisons possibles de paramètres dans des plages spécifiées).