Kursinhalt
Fortgeschrittene Wahrscheinlichkeitstheorie
Fortgeschrittene Wahrscheinlichkeitstheorie
Momentenschätzung. Maximum-Likelihood-Schätzung
Betrachten wir genauer, was allgemeine Populationsparameter sind und wie wir sie schätzen können.
Momentenschätzung
Wir verwenden unsere Stichproben und wenden eine spezifische Funktion auf sie an, um den Parameter zu schätzen, an dem wir interessiert sind. Wir können jedoch nicht einfach irgendeine Funktion wählen; wir müssen die richtige finden, die uns die genaueste Schätzung liefert.
In der mathematischen Statistik gibt es zwei gängige Methoden dafür. Die erste wird als Momentenmethode bezeichnet, die wir bereits besprochen haben. Diese Methode beruht auf der Tatsache, dass bestimmte Eigenschaften einer Zufallsvariablen, wie ihr Mittelwert oder ihre Varianz, direkt mit den Parametern zusammenhängen, die wir schätzen möchten. Zum Beispiel wird die Gaußsche Verteilung vollständig durch ihren Mittelwert und ihre Varianz bestimmt. Indem wir den Mittelwert und die Varianz aus unseren Stichproben berechnen, können wir die Parameter der Verteilung schätzen.
Beispiel
Angenommen, wir haben eine exponentielle allgemeine Population und möchten den Lambda-Parameter dieser Verteilung schätzen. Wir können es wie folgt tun:
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)
Wenn wir mehr als einen Parameter schätzen müssen, dann müssen wir entsprechend nicht nur den Mittelwert, sondern auch die Varianz oder Momente höherer Ordnung verwenden. Betrachten wir ein Beispiel zur Schätzung der Parameter der Gaußschen Verteilung:
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)
Maximum-Likelihood-Schätzung
Die Momentenmethode ist recht einfach zu interpretieren; jedoch können die Eigenschaften der mit dieser Methode erhaltenen Schätzungen uns nicht immer zufriedenstellen (wir werden über die Eigenschaften der Schätzungen in den folgenden Kapiteln sprechen). Deshalb betrachten wir eine andere Methode - die Maximum-Likelihood-Schätzung.
Die Maximum-Likelihood-Methode basiert auf der Maximierung der Likelihood-Funktion. Diese Funktion wird als gemeinsame Verteilungsfunktion des Vektors konstruiert, der aus all unseren Stichproben besteht. Schauen wir uns das Bild unten an:
Da die Stichproben unabhängig aus derselben Grundgesamtheit stammen, können wir ihre Verteilungen zu einer gemeinsamen Verteilung kombinieren, indem wir die Verteilungen jeder einzelnen Stichprobe multiplizieren. Dies gibt uns die Maximum-Likelihood-Funktion, die wir dann maximieren, um die besten Parameter zu finden.
Einfacher ausgedrückt versuchen wir, die Parameter zu finden, die unsere beobachteten Stichproben am wahrscheinlichsten machen.
Die direkte Arbeit mit der Likelihood-Funktion kann komplex sein, daher ist es oft einfacher, die negative Log-Likelihood zu verwenden. Das Nehmen des Logarithmus verwandelt das Produkt der Wahrscheinlichkeiten in eine Summe, was die Berechnungen vereinfacht. Außerdem ist das Maximieren der Likelihood dasselbe wie das Minimieren der negativen Log-Likelihood.
Beispiel
Verwenden wir die Maximum-Likelihood-Methode, um die Parameter der Gaußschen Verteilung zu schätzen:
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)
Im obigen Code verwenden wir die .fit()
-Methode der norm
-Klasse, um die Maximum-Likelihood-Schätzung der Parameter zu erhalten. Sie können diese Methode auf jede kontinuierliche Verteilung anwenden, die in der scipy
-Bibliothek dargestellt ist.
Hinweis
In einigen Fällen können die Schätzung mit der Momentenmethode und die Maximum-Likelihood-Schätzung übereinstimmen.
Wir können die .fit()
-Methode für einige Verteilungen nicht verwenden. Deshalb müssen wir die Likelihood-Funktion manuell konstruieren und eine Optimierung bereitstellen. Schauen wir uns das Beispiel an:
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)
Im obigen Code haben wir die Log-Likelihood-Funktion manuell erstellt, indem wir die .logpmf()
-Methode verwendet haben, die das Logarithmus der PMF an jedem benötigten Punkt berechnet.
Danke für Ihr Feedback!