Contenu du cours
Théorie Avancée des Probabilités
Théorie Avancée des Probabilités
Estimation des Moments. Estimation du Maximum de Vraisemblance
Examinons plus en détail ce que sont les paramètres de la population générale et comment nous pouvons les estimer.
Estimation par les moments
Nous utilisons nos échantillons et appliquons une fonction spécifique pour estimer le paramètre qui nous intéresse. Cependant, nous ne pouvons pas choisir n'importe quelle fonction ; nous devons trouver celle qui nous donne l'estimation la plus précise.
En statistique mathématique, il existe deux méthodes courantes pour cela. La première est appelée la méthode des moments, que nous avons déjà abordée. Cette méthode repose sur le fait que certaines caractéristiques d'une variable aléatoire, comme sa moyenne ou sa variance, sont directement liées aux paramètres que nous voulons estimer. Par exemple, la distribution gaussienne est entièrement déterminée par sa moyenne et sa variance. Ainsi, en calculant la moyenne et la variance de nos échantillons, nous pouvons estimer les paramètres de la distribution.
Exemple
Supposons que nous ayons une population générale exponentielle et que nous souhaitions estimer le paramètre lambda de cette distribution. Nous pouvons le faire comme suit :
import pandas as pd samples = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/Advanced+Probability+course+media/expon_samples.csv', names=['Value']) # Calculate mean value over samples estim_mean = samples.mean()['Value'] # We know that samples are from exponential distribution with has parameter lambda. # We also know that mean value of exponentially distributed variable equals 1/lambda # So to estimate lambda using momentum method we can simple use 1/estim_mean print('Momentum estimation of lambda parameter is: ', 1/estim_mean)
Si nous devons estimer plus d'un paramètre, alors, en conséquence, nous devons utiliser non seulement la valeur moyenne mais aussi la variance ou les moments d'ordre supérieur. Considérons un exemple d'estimation des paramètres de la distribution gaussienne :
import pandas as pd samples = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/Advanced+Probability+course+media/gaussian_samples.csv', names=['Value']) # Estimate the mean and standard deviation using method of moments mu = samples.mean()['Value'] sigma = samples.std()['Value'] print('Estimated mean:', mu) print('Estimated standard deviation:', sigma)
Estimation du maximum de vraisemblance
La méthode des moments est assez simple à interpréter ; cependant, les propriétés des estimations obtenues avec cette méthode peuvent ne pas toujours nous satisfaire (nous parlerons des propriétés des estimations dans les chapitres suivants). C'est pourquoi nous allons considérer une autre méthode - l'estimation du maximum de vraisemblance.
La méthode du maximum de vraisemblance repose sur la maximisation de la fonction de vraisemblance. Cette fonction est construite comme la fonction de distribution conjointe du vecteur constitué de tous nos échantillons. Regardons l'image ci-dessous :
Puisque les échantillons proviennent de la même population générale de manière indépendante, nous pouvons combiner leurs distributions en une seule distribution conjointe en multipliant les distributions de chaque échantillon individuel. Cela nous donne la fonction de maximum de vraisemblance, que nous cherchons ensuite à maximiser pour trouver les meilleurs paramètres.
En termes plus simples, nous essayons de trouver les paramètres qui rendent nos échantillons observés les plus probables.
Travailler directement avec la fonction de vraisemblance peut être complexe, il est donc souvent plus facile d'utiliser le log-vraisemblance négatif. Prendre le logarithme transforme le produit des probabilités en une somme, simplifiant les calculs. De plus, maximiser la vraisemblance revient à minimiser le log-vraisemblance négatif.
Exemple
Utilisons le maximum de vraisemblance pour estimer les paramètres de la distribution Gaussienne :
import pandas as pd from scipy.stats import norm # Generate some random data samples = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/Advanced+Probability+course+media/gaussian_samples.csv', names=['Value']) # Estimate the parameters using maximum likelihood mu_ml, sigma_ml = norm.fit(samples) print('Maximum likelihood estimates:') print('mu = ', mu_ml) print('sigma = ', sigma_ml)
Dans le code ci-dessus, nous utilisons la méthode .fit()
de la classe norm
pour obtenir l'estimation du maximum de vraisemblance des paramètres. Vous pouvez appliquer cette méthode à toute distribution continue représentée dans la bibliothèque scipy
.
Remarque
Dans certains cas, l'estimation utilisant la méthode des moments et l'estimation du maximum de vraisemblance peuvent coïncider.
Nous ne pouvons pas utiliser la méthode .fit()
pour certaines distributions. C'est pourquoi nous devons construire manuellement la fonction de vraisemblance et fournir une optimisation. Regardons l'exemple :
import numpy as np import pandas as pd from scipy.stats import poisson from scipy.optimize import minimize samples = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/Advanced+Probability+course+media/pois_samples.csv', names=['Value']) # Define the log-likelihood function for a Poisson distribution def poisson_log_likelihood(params, data): lam = params[0] # Compute log-likelihood as sum of logarithms of Poisson PMF log_likelihood = -np.sum(poisson.logpmf(data, lam)) return log_likelihood # Use maximum likelihood estimation to fit a Poisson distribution to the data initial_guess = [5] # starting value for lambda parameter result = minimize(poisson_log_likelihood, initial_guess, args=samples) estimate_lambda = result.x[0] # Print the estimated value of lambda print('Estimated value of lambda:', estimate_lambda)
Dans le code ci-dessus, nous avons créé manuellement la fonction de log-vraisemblance en utilisant la méthode .logpmf()
qui calcule le logarithme de la PMF à chaque point dont nous avons besoin.
Merci pour vos commentaires !