Vorlesung: Rechnernutzung in der Physik Anpassung von Parametern Günter Quast Fakultät für Physik Institut für Experimentelle Kernphysik KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft WS 2016/17 www.kit.edu
Parameteranpassung χ2 und Likelihood Parameterschätung (= Funktionsanpassung) mit der Methode der kleinsten Fehlerquadrate (χ2-methode) Maximum Likelihood Methode Anpassungen mit kafe Fertige Programmpakete
Parameterschätzung (neudeutsch fitten ) Anpassung von Modellen = parameterabhängige an statistische Daten = Messwerte Funktionen y Messdaten ( xi, yi ) mit angepasster Funktion f(x;p) p ist der Vektor der Parameter der Funktion Benötigen ein Abstandsmaß für Übereinstimmung von (xi, yi) und f(xi) Mathematisch: yi und fi = f(xi) sind Elemente eines Vektorraums: Vektoren y und f 2 Abstand = Betrag des Differenzvektors, d = (y also: Finde Parameterwerte, die d2 minimieren - f) (y f) (Skalarprodukt) (für geeignet definiertes Skalarprodukt) Frage: wie werden Messfehler berücksichtigt?
Beziehung Messung Funktionswert Wahrscheinlichkeitsverteilung um den wahren Wert wahrer Wert Messung mit Fehlerbalken übliche Darstellung = Messpunkt Fehlerbalken entspricht ±1σ dieser Gaußkurve eigentliche Bedeutung Messung mit Fehlerbalken bedeutet: Beobachtung eines Messergebnisses, das der Summe aus einem wahren Wert und einer Zufallszahl aus einer Verteilungsdichte entspricht
Parameterschätzung 2 Methode der kleinsten Quadrate (χ - Methode) 5
Parameterschätzung mit der Methode der kleinsten Quadrate ( χ2-methode ) Entwickelt zu Beginn des 19. Jahrhunderts von Legendre, Gauß und Laplace. Ziel: finden der besten Funktion, die Fehler-behaftete Datenpunkte annähert. zunächst für Geraden (Ausgleichsgerade oder lineare Regression), aber mit numerischen Minimierungsalgorithmen (z.b. MINUIT) auf beliebige Funktionen und Anzahl Parameter anwendbar! Minimiere bzgl. der Parameter {p} S: Summe der Residuen-Quadrate = f (x; {p}) σi2 sind die Varianzen der N Messunge Falls die Fehler korreliert sind, ersetze 1/σi2 cov -1 (Inverse der Kovarianzmatrix) Methode ist auch aus Likelihood-Prinzip herleitbar später
Minimieren von S N Messungen k Parameter Wie minimiert man analytisch: als notwendige Bedingung für ein Minimum lösbar in Spezialfällen, z. B. für lineare Probleme: i. a. numerisch numerische Optimierung: Algorithmen zur Suche nach dem (eine Minimum einer Skalaren Funktion im k-dimensionalen Paramete In der Praxis werden heute auch für lineare Probleme die (effizienten) numerischen Minimierungsmethoden verwendet. (außer in Spezialfällen, z. B. bei zeitkritischen oder immer wieder vorkommenden Problemstellungen)
Beispiel mit einem Parameter Mittelwert von 10 Messungen yi mit Unsicherheiten σ entspricht der Anpassung einer konstanten Funktion f(x;c)=c analytisch: identisch zum Mittelwert numerisch : berechnen und grafisch darstellen Script PlotAverage-withChi2.py
Mittelung bei unterschiedlichen Unsicherheiten N Messungen yi mit individuellen Unsicherheiten σi 1/σ - quadrat gewichtete Summe Wichtiges Ergebnis zur Mittelwertbildung bei Messungen mit unterschiedlichen Unsicherheiten
Zusammenhang von S mit der χ2 - Verteilung Quadrat einer standard-normal verteilten Größe; folgt χ2verteilung Smin, die gewichtete Summe der Residuen-Quadrate am Minimum, folgt bei Gauß-verteilten Fehlern σi einer χ2-verteilung mit nf = N-k Freiheitsgraden. Erwartungswert: <χ2>=nf oder <χ2 /nf > = 1 Die χ2-wahrscheinlichkeit dient zur Quantifizierung der Qualität einer Anpassung Aussage, mit welcher Wahrscheinlichkeit ein größerer Wert von χ2 am Minimum als der tatsächlich beobachtete zu erwarten wäre.
Güte der Anpassung χ2-wahrscheinlichkeit in python: scipy.stat.chi2.cdf(s, nf) E[Smin] = nf E[Smin / nf] = 1 Die Wahrscheinlichkeit, einen χ2 - Wert größer nf zu erhalten, ist ca. 40% (ziemlich unabhängig von n) Mit wachsender Zahl der Freiheitsgrade sollte Smin / nf immer näher bei 1 liegen in python: chi2prb= 1. - scipy.stat.chi2.cdf(s, nf)
Das (allg.) Lineare Problem lineares Problem: anzupassende Funktion ist linear in den Parametern Beispiele: Allgemein lassen sich also die N Messwerte yi durch eine Linearkombination von Funktionswerten von k Funktionen an Stützstellen xi darstellen: Dies lässt sich sehr kompakt in Matrix-Scheibweise darstellen: mit Kovarianzmatrix V der N Messungen ergibt sich für S(aj ): dann: Minimieren von S(aj ) bzgl. der Parameter aj, d.h.
Lösung des allg. linearen Problems Notwendigen Bedingung für ein Minimum von S(aj ): Für lineare Probleme analytisch lösbar. Anm.: häufig führt aber eine Erweiterung des anzupassenden Modells dazu, dass Parameter in einer der nicht-linearen Funktionen auftreten, dann muss auf andere (=numerische) Methoden zurück gegriffen werden. [ s. nächste Folien ] Lösung ist lineare Funktion der Messwerte: Kovarianzmatrix der Parameter durch Fehlerfortpflanzung:
Analytische Lösung des allg. linearen Problems Kleine (Matrix-) Rechnung: Produktregel, a auf 1. und 2. Term mit a anwenden nach dem Vektor der Schätzwerte auflösen Die Lösung für die Parameter ist also eine Linearkombination der Messwerte, mit der Lösungsmatrix B: Die Kovarianz-Matrix ist damit durch das Fehlerfortpflanzungsgesetz gegeben: Einsetzten der expliziten Form von B und ausnutzen, dass V und ATA symmetrische Matrizen sind
Spezialfall: Lineare Regression (Geradenanpassung) Durch Einsetzen in die Lösungsformeln von vorhin erhält man mit den Abkürzungen die Lösung: Diese Formeln waren für Generationen von Studierenden die Basis einer jeden Anpassung ( Regression ).
Anmerkung: Lineare Regression Das Kovarianzelement V12 verschwindet für Sx=0, d. h. wenn der Erwartungswert der Abszissenwerte 0 ist Dies lässt sich durch Änderung der Parametrisierung erreichen: setze Man erhält dann diese einfacheren, unkorrelierten Lösungen für die Parameter
Bestimmung der Parameterfehler χ2 χ2 2 Je schärfer das Minimum von χ (a), desto kleiner die Parameterfehler: a a scharfes Mimimum: große Krümmung flaches Mimimum: kleine Krümmung Parameterunsicherheiten sind umgekehrt proportional zu Krümmung(en) von χ2(a) am Minimum bzw. bei mehreren Parametern.
Erinnerung: lineares Problem Für das lineare Problem mit ergab sich die Kovarianzmatrix der Parameter durch Fehlerfortpflanzung Bilden der zweiten Ableitungen von S, liefert das gleiche Ergebnis:
Beispiel: Fehler des Mittelwerts Erinnerung: Mittelwertbestimmung von 10 Messungen yi mit Unsicherheiten σ Unsicherheit nach Formel: Identisch zu früherem Ergebnis (das wir mittels Fehlerfortpflanzung erhalten hatten)
Beispiel: Qualität der Anpassung Erinnerung Mittelwertbestimmung: Numerische Lösung Script PlotAverage-withChi2.py Qualität der Anpassung: χ2 = 6.23 bei 10 Messwerten und 1 Parameter, d. h. nf = 9 Freiheitsgrade χ2 - Wahrscheinlichkeit = 0.72 bestimmt mit der kumulativen Verteilung der χ2-verteilung chi2prb= 1. - scipy.stat.chi2.cdf(6.2, 9)
Numerische Verfahren
Numerische Anpassung I. a. (heute) Anpassungen mittels numerischer Optimierung durch: Gittermethode: z.b. Minuit: SCAN-Algorithmus k gleichverteilte Testwerte pro Dimension Erfordert kd Berechnungen bei d Dimensionen Ungeeignet für große d Monte-Carlo-Methode: Funktionsberechnung an zufällig verteilten Testpunkten Auch bei großen d geeignet gut für Bestimmung von Startwerten Einfache Parametervariation: Eindimensionale Minimierung in einem Parameter, dann Minimierung in nächstem Parameter Iteration I.a. schnelle Konvergenz, wenn Minimierung in Richtung der Eigenvektoren der Matrix der 2. Ableitung erfolgt weitere numerische (deterministische) Verfahren: Simplex-Verfahren (ohne Ableitungen) Methoden mit angepasster Schrittweite, numerische Auswertung der Ableitungen z.b. Minuit: SIMPLEX-Algorithmus MIGRAD-Algorithmus
Beispiel Simplex-Verfahren Illustration der Simplex-Methode am Beispiel der Rosenbrock'schen Bananenfunktion Simplex: n-dimensionaler Polyeder aus n+1 Punkten im Rn Bei jedem Schritt wird der schlechteste Punkt xr mit größtem Funktionswert F(xr) durch einen neuen, besseren, ersetzt, oder der Simplex ggf. verkleinert oder vergrößert.
[** Simplex-Verfahren ] n+1 Punkte x1,..., xn + 1 im Rn n-dimensionaler Polyeder oder Simplex Sortierung, so dass F(x1 ) < < F(xn + 1 ) Schwerpunkt der n besten Punkte: c = i = 1 n xi / n Spiegelung des schlechtesten Punktes an c: xr = c + (c xn + 1 ) Falls F(x1 ) < F(xr ) < F(xn ) xr ersetzt xn + 1 Falls F(xr ) < F(x1 ) gute Richtung Streckung: xs =c+ (xr c), > 1 Falls F(xs ) < F(xr ): xs ersetzt xn+1, ansonsten xr ersetzt xn + 1 Falls F(xr ) > F(xn ): Simplex zu groß Abflachung: xs = c (c xn + 1 ), 0 < < 1 Falls F(xs ) < F(xn + 1 ): xs ersetzt xn + 1 Ansonsten Kontraktion um x1 : xj = x1 + (xj x1 ), 0 < < 1
Beispielcode: numerische Anpassung mit kafe In der Praxis setzt man Programmpakete ein, die - Strukturen zur Verwaltung von Daten und deren Fehlern - Definition von Modellen - Anpassung mittels numerischer Optimierung - grafische Darstellung - Ausgabe der Ergebnisse bereit stellen. Zuverlässige Konvergenz zum globalen Minimum bei nicht-linearen Problemstellungen erfordert meist das Setzen geeigneter Startwerte! Beispiel mit dem python-framework kafe : Anpassung der drei Parameter einer quadratischen Funktion an Datenpunkte mit Unsicherheiten nur in Ordinatenrichtung. siehe Script fitexample_kafe.py 68%-Konfidenzband der Modellanpassung
Behandlung von Fehlern in x- und y-richtung 1. Ableitung nutzen, um x-fehler in y-fehler umzurechnen und Quadratisch zu den y-fehlen addieren Iteratives Verfahren: 1. Anpassung ohne x-fehler 2. f '(xi) bilden und neue Fehler bestimmen: 3. Schritt analog 2 zur Kontrolle wiederholen; χ2 am Minimum darf sich nicht stark ändern! Geometrische Interpretation: Mimimierung des auf projizierte Messfehler normierten Abstands d der Punkte von der Tangente an die Funktion: Implementeirung: Methode Fit() der Root-Klasse TGraphErrors
Parameteranpassung mit ROOT Klasse TGraphErrors void TGraphFit() { //Draw a graph with error bars and fit a function to it. //set global options gstyle->setoptfit(111); //superimpose fit results // make nice Canvas TCanvas *c1 = new TCanvas("c1","Daten",200,10,700,500); c1->setgrid(); //define some data points const Int_t n = 10; Float_t x[n] = {-0.22, 0.1, 0.25, 0.35, 0.5, 0.61, 0.7, 0.85, 0.89, 1.1}; Float_t y[n] = {0.7, 2.9, 5.6, 7.4, 9., 9.6, 8.7, 6.3, 4.5, 1.1}; Float_t ey[n] = {.8,.7,.6,.5,.4,.4,.5,.6,.7,.8}; Float_t ex[n] = {.05,.1,.07,.07,.04,.05,.06,.07,.08,.05}; // copy data to TGraphErros object TGraphErrors *gr = new TGraphErrors(n,x,y,ex,ey); gr->settitle("tgrapherrors mit Fit"); gr->draw("ap"); // now perform a fit(with errors in x and y!) gr->fit("pol3"); c1->update(); Script TGraphFit.C Anpassung mittels Root Macro: > root TGraphFit.C
Behandlung von Fehlern in x- und y-richtung (2) Allgemein bei korrelierten Fehlern: Kovarianzmatrizen Cx und Cy im zweiten Schritt x-fehler zur Kovarianzmatrix addieren: Geschrieben mit dem Residuenvektor und dem Vektor der 1. Ableitungen, ergibt sich Implementiert in kafe
kafe: Beispiele zu kafe gibt es eine Anzahl von gut dokumentierten Beispielen, s. http://www.ekp.kit.edu/~quast/kafe/html oder https://github.com/dsavoiu/kafe
Hinweis: kafe update Es gibt eine neue Version von kafe mit einigen (meist kosmetischen) Änderungen;!!! setzt matplotlib 1.5.0 voraus Installation: pip install -- upgrade kafe bzw. sudo pip install --upgrade kafe (Linux systemweit) Eine beliebige kafe-version im Nuztzer-Bereich installiert man mittels pip install --user kafe==1.x.x (x.x: 0.1 oder 1.0) (kann auf den CIP-Pool Rechnern notwendig sein) Wesentliche Neuerung: Fit() enthält eine Option: fit_name='name' name wird für Log-Files und Grafiken verwendet, erleichtert die Buchführung bei vielen Fits im gleichen Skript
Beispielcode: numerisch Anpassung mit kafe siehe Script fitexample_kafe.py # example fit with kafe import kafe from kafe.function_tools import FitFunction, LaTeX, ASCII ( # fit function definition (with decorators for nice output) @ASCII(expression='a * x^2 + b * x + c') @LaTeX(name='f', parameter_names=('a','b','c'), expression=r'a\,x^2+b\,x+c') @FitFunction def poly2(x, a=1.0, b=0.0, c=0.0): return a * x**2 + b * x + c # --------- begin of workflow ---------------------# set data xm = [.05,0.36,0.68,0.80,1.09,1.46,1.71,1.83,2.44,2.09,3.72,4.36,4.60] ym = [0.35,0.26,0.52,0.44,0.48,0.55,0.66,0.48,0.75,0.70,0.75,0.80,0.90] ye = [0.06,0.07,0.05,0.05,0.07,0.07,0.09,0.1,0.11,0.1,0.11,0.12,0.1] # create a kafe Dataset kdata = kafe.dataset(data=(xm, ym), basename='kdata', title='example data') kdata.add_error_source('y', 'simple', ye) # add uncertainties kfit=kafe.fit(kdata, poly2) # create the fit from data & fit function kfit.do_fit() # perform fit kplot=kafe.plot(kfit) # create plot object kplot.axis_labels = [r'$st\"utzstellen \, x $', r'$data\,\&\,f(x)$'] kplot.plot_all() # make plots kplot.show() # show the plots kafe nutzt das CERN-Paket MINUIT zur numerischen Optimierung ) nur zur Verschönerung der wichtige Code für kafe
Beispielcode: numerische Anpassung (scipy ) Tool curve_fit aus scipy.optimize import matplotlib.pyplot as plt import numpy as np zur χ2-anpassung und numerischen Optimierung from scipy.optimize import curve_fit # -------------------------------------------------------------------------------def chi2_fit(): #-- set data points xm = np.array([.05,0.36,0.68,0.80,1.09,1.46,1.71,1.83,2.44,2.09,3.72,4.36,4.60]) ym = np.array([0.35,0.26,0.52,0.44,0.48,0.55,0.66,0.48,0.75,0.70,0.75,0.80,0.90]) ye = np.array([0.06,0.07,0.05,0.05,0.07,0.07,0.09,0.1,0.11,0.1,0.11,0.12,0.1]) #-- least-squares fit with scipy.optimize.curve_fit p, cov = curve_fit( poly2, xm, ym, sigma=ye, absolute_sigma=true ) print "Fit parameters:\n", par print "Covariance matrix:\n", cov #-- plot data and fit result xp = np.linspace( 0., 5., 100 ) ffit = poly2(xp, p[0], p[1], p[2]) plt.errorbar(xm, ym, yerr=ye, fmt='o') plt.plot( xp, ffit, '-' ) plt.xlim( 0, 5 ) plt.ylim( 0, 1 ) plt.show() #-- define fit function def poly2(x, a=1., b=0., c=0.): return a * x**2 + b * x + c if name == ' main ': # ----------curvefit_example.py chi2_fit()
Unsicherheiten mit Toy-MC Die Unsicherheiten können ganz allgemein bestimmt werden, indem man die Anpassung für viele Stichproben wiederholt und die Verteilungen der Parameterwerte analysiert. Auf diese Weise lassen sich - Parameterunsicherheiten - Korrelationen der Parameter bestimmen. Das Verfahren ist aufwändig, aber exakt! Im Zweifelsfall wird die Exaktheit statistischer Verfahren mit solchen Toy Monte Carlos untersucht. Ergebnisse der Anpassung eines Polynoms 2. Grades an 10'000 den beobachteten Messwerten entsprechende Stichproben toymcerros.py
Maximum Likelihood Methode
Kleinste Quadrate & Maximum Likelihood Zwei Möglichkeiten, die am besten zur Messung passende Verteilung zu finden: kleinster Abstand Messung Erwartungswert Minimiere Abstand vom Sollwert Messung Maximale Wahrscheinlichkeit Maximiere Höhe der pdf Likelihood-Methode Beide Methoden bevorzugen in diesem Beispiel die durchgezogene Verteilung
Likelihood-Methode Mehrere unabhängige Messgrößen xi, i =1,, n einer Größe folgen einer Verteilungsdichte p(x,a) mit Parametern ai. Als Verteilungsdichte ist p(x;a) positiv und normiert (bzgl. x, aber nicht bzgl. a!) Beispiel von 7 Messungen und Likelihood bzgl. zweier Verteilungen Skript likelihood-pdf.py Likelihood ist das Produkt der Wahrscheinlichkeiten p(xi a) aller Messungen
Anmerkung Likelihood-Methode Mit Hilfe der Likelihood-Methode können neben der Parameterabhängigkeit auch verschiedene Verteilungen verglichen werden: Wichtig für Hypothesentests
Maximum Likelihood-Prinzip Likelihood-Funktion: Produkt der Werte der Wahrscheinlichkeitsdichte, Pi, für n unabhängige Messungen xi : hängt nur noch von den Parametern a ab! Maximum-Likelihood-Prinzip: Der beste Schätzwert für den Parametervektor, der die Likelihood-Funktion maximiert, ist derjenige,
Anmerkungen zur Likelihood-Methode Maximum Likelihood (ML) Eingeführt von Sir Ronald A. Fisher 1912 zur bestmöglichen Schätzung von Parametern von Verteilungen aus Stichproben engl. likelihood = Wahrscheinlichkeit (ähnlich probability ); im Deutschen wird der Begriff Likelihood übernommen Basis der mathematischen Statistik ( Fisher-Information) sehr universell einsetzbare Methode ( ältere Methode der kleinsten Quadrate ist Spezialfall) Likelihood ist eine zentrale Größe in der klassischen (frequentistischen) und in der Bayes'schen Statistik erlaubt die Schätzung von Konfidenzintervallen für Parameterwerte Für gegebene Stichprobenwerte xi aus einer zu Grunde liegenden Verteilungsdichte f ist die Likelihood-Funktion eine Funktion der Modellparameter: (L lebt im Parameterraum)
Maximum Likelihood in der Praxis Technische und theoretische Gründe: Minimiere den negativen Logarithmus der Likelihood-Funktion: Likelihood-Gleichung definiert Schätzwert(e)
Beispiel: Likelihood der Gaußverteilung = χ2! const. bzgl. a Für Gauß-förmig um f(xi, a) verteilte Messungen yi ist χ2 äquivalent zu lnl Ist f(xi, a) zusätzlich eine lineare Funktion der Parameter a = (ai ), dann ist lnl (ai yi) ( und χ2 (ai, yi) ) eine Parabel lnl (ai yi) kann in der Nähe des Minimums häufig durch eine Parabel approximiert werden!
Parameterunsicherheiten mit Hilfe der Likelihood-Funktion
Maximum-Likelihood: Prameterunsicherheiten Parabel aus Krümmung am Minimum F(a) näherungsweise quadratisch um das Minimum; ± 1σ - Intervall (=68%) aus ΔF = 0.5 ±1σ 1. Ableitung näherungsweise linear, =0 am Minimum 2. Ableitung ~ konstant Varianz 1 / Krümmung 1/σ2 2F / a2 bei mehreren Parametern ai: (cov-1)ij 2F / ai aj Typischer Verlauf einer negativen log-likelihood Funktion und ihrer 1. und 2. Ableitungen Mathematisch exakt: die angegebenen Fehlerabschätzungen sind Untergrenzen Nur für Parabel-förmigen Verlauf von F(a) sind die beiden Fehlerdefinitionen äquivalent
Prameterunsicherheiten (2) Plausibilitätserklärung (kein Beweis, Stichwort Cramer-Rao-Frechet Grenze ) nur ein Parameter a, betrachten Taylor-Entwicklung von F(a) um Minimum: näherungsweise parabelförmig Likelihood = exp(-f(a)) als Verteilungsdichte in a auffassen: ist Gauß-Verteilung (mit Normierungsfaktor A) Standardabweichung gegeben durch weiter gilt mit dieser Beziehung für σ:
Einschub: Parabel-Eigenschaften allg. Darstellung einer Parabel Wenn F(a) eine negative Log-Likelihood Funktion ist, dann ist
Prameterunsicherheiten (3) zur Fehlerbestimmung aus F(a): Log-Likelihood- Differenz bestimmt Fehler. Vorteil dieser Methode: invariant unter Variablentransformation a a'(a): F(a) F(â) = F( a'(a) ) F( a'(â) ) Das so bestimme Unsicherheitsintervall entspricht 1σ einer Gaußverteilung (68% Konfidenz-Intervall) Fehlerbestimmung: Δ (-ln L ) Δχ2 1σ 2σ 3σ nσ 0.5 2.0 4.5 n2/2 Wichtig, wenn ln L nicht parabelförmig in der Nähe des Minimums: Angabe eines asymmetrischen Fehlerintervalls 1 4 9 n2
Übersicht: Methoden zur Bestimmung der Unsicherheiten Lineare Probleme mit gaußförmigen Unsicherheiten: - analytische Lösung möglich (χ2 -Minimierung) - Position des Minimums gegeben durch Linearkombination der Messwerte: - Varianz der Parameterschätzung durch Fehlerfortpflanzung: Nicht- lineare Probleme oder andere als gaußförmige Unsicherheiten: - Likelihood-Analyse: Ausnutzen der Cramer-Rao-Frechet-Grenze: Nicht-lineare Probleme mit nicht-parabolischer Likelihood am Minimum: - Scan der (Profil-) Likelihood in der Nähe des Minimums 2. Ableitungen am Minimum: (für Grenzfall hoher Statistik) Bei Unklarheit oder sehr kleiner Statistik: Monte-Carlo-Studie: Anpassung an viele der Genauigkeit und Verteilung der Daten entsprechende Stichproben, Verteilungen der Parameter studieren. Achtung: nur die letzten beiden Methoden liefern Konfidenz-Intervalle (z. B. 1σ 68%)
Beispiel: Likelihood für Poisson-Prozess Ein typisches Beispiel für die Anwendung der neglogl-methode sind kleine Stichproben von Poission-verteilten Beobachtungen mit kleinem Erwartungswert: Stichprobe: Poisson-verteilte Zufallszahlen {ki }= { 0, 2, 4, 4, 2,1, 1, 1, 1 } allg. Implementierung ist etwas anders, s. Codebeispiel nllexample.py Darstellungen von ln L (λ {ki, i n }) für die jeweils n ersten Elemente der Stichprobe
Beispiel: Likelihood für Poisson-Prozess (2) Im Grenzfall großer Ereigniszahlen ist -lnl von vorne herein parabelförmig (in solch einem Fall wäre auch eine χ2 -Anpassung gerechtfertigt) 2. Stichprobe: Poisson-verteilte Zufallszahlen {ki}= {41,48,62,49,58,45,38,52,46} Darstellungen von ln L (λ {ki, i n }) für die jeweils n ersten Elemente der Stichprobe
Zusammenhang -ln L und χ2 Für Gauß-förmig um f(xi; a) verteilte Messungen yi ist die χ2 Methode äquivalent zur -lnl-methode : χ2 Fehlerbestimmung: Δ (-ln L) Δχ2 const. bzgl. a 2 Minimieren von -ln L Minimieren von χ (-ln L) = ½ χ2 2(-ln L) / ai aj = ½ χ2 / ai aj 1σ 2σ 3σ nσ 0.5 2.0 4.5 n2/2 1 4 9 n2 Bei anderen als Gauß-förmigen Fehlerverteilungen ist χ2 eine eigenständige Methode; - bei unbekannter Fehlerverteilung haben wir keine bessere - χ2 ist optimal für die Anpassung von Linearkombinationen von Fit-Funktionen
Maximum Likelihood vs. Kleinste Quadrate Vergleich: Voraussetzung Maximum - Likelihood Kleinste Quadrate Mittelwert und Varianz PDF exakt bekannt bekannt Methode Höhe der PDF Abweichung vom Mittelwert der PDF Effizienz maximal maximal bei linearen Problemen Komplexität Robustheit korrelierte Datenfehler Güte der Anpassung aufwändig, meist nichtoft linear und exakt lösbar linear nein - PDF muss exakt bekannt sein nein ( Ausreißer ) u.u. kompliziert einfach über Kovarianzmatrix nein ja: χ2-wahrscheinlichkeit 53
Parameterschätzung Parameteranpassung mit Root 54
Parameteranpassung mit ROOT ROOT enthält einige Minimierungsalgorithmen, u.a. das aus der FORTRAN-Zeit stammende (und nach C++ umgeschriebene) MINUIT, entstanden am CERN - gut getestet und anerkannt Standard in der Teilchenphysik Auswahl von Minimierern über die Klasse TvirtualFitter (s. später) In vielen Fällen reicht die von ROOT per GUI zur Verfügung gestellte Funktionalität: -2 logl (!) und χ2-anpassungen an Histogramme χ2-anpassungen in Klasse TGraphErrors Vordefinierte Funktionen: Polynome bis zum 9. Grad, Gauss, Exponential- und Landauverteilung χ2-wert FCN=82.016 FROM MIGRAD STATUS=CONVERGED 12 CALLS1 3 TOTAL EDM=9.82506e-16 STRATEGY= 1 ERROR MATRIX ACCURATE EXT PARAMETER STEP FIRST NO. NAME VALUE ERROR SIZE DERIVATIVE 1 p0 1.54084e+02 3.51831e+00 1.56525e-02 1.25994e-08 Text-Ausgabe von MINUIT 55
Anpassen mit ROOT GUI Root-Klassen TH1, TH2 und TH3 sowie TGraph und TgraphErrors enthalten eine Methode.Fit() zur Funktionsanpassung (TF1 bzw.tf2 u.tf3) In der graphischen Darstellung kann durch Rechtsklick das FitPanel aktiviert werden, um Anpassungen interaktiv vorzunehmen. root[0]tgrapherrors gr=new TGraphErrors("ExampleData.txt"); root[1]gr >Draw("AP"); // Achsen und Daten root[2]gr->fit("pol1"); // Gerade Ein einfaches Beispiel 56
Parameteranpassung mit ROOT Man kann auch eigene Fit-Funktionen aus dem Repertoire von ROOT definieren: Root > TF1 *myfit = new TF1("myfit","[0]*sin(x) + [1]*exp(-[2]*x)", 0, 2); // set parameters Root > myfit->setparameters(1,0.05,0.2); // Fitten Root > hist->fit("myfit"); oder beliebige Funktionen selbst schreiben: Double_t myfunc (Double_t *x, Double_t *par) { // IHR CODE!!! } Root > TF1 *myf = new TF1("myf",myfunc, <min>, <max>, <npar>); // set parameters Root > myf->setparameters(<startv_1>,, <startv_n); Root > hist->fit("myf"); Im allgemeinsten Fall kann man auch die χ2- oder -2lnL- Funktion selbst vorgeben: Die Methode von TVirtualFitter void SetFCN(void (*fcn)(int_t &, Double_t *, Double_t &f, Double_t *, Int_t)) erlaubt das Setzen der zu minimierenden Funktion (mit Namen fcn ) void fcn(int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag) f ist dabei der Rückgabewert, im Array par übergibt Root die Parmeter 57
Parameteranpassung mit ROOT Ein Code-Fragment zur Berechnung von χ2 mit Kovarianz-Matrix // fcn function for fit with covariance matrix double arr_poi; // global array pointer TMatrix *icovp; // global matrix pointer int nval = 3; // global for number of measurements int main() { arr_poi = new double[3]; TMatrix cov(3,3); cov(0,0) =..., cov(2,2) =...; // Invert matrix TMatrix icov = cov.invert(); icovp = &icov;...; } void fcn(int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag) {... for (int i; i < nval; i++ ) { for (int j; j < nval; j++ ) { chi += (arr_poi[i] - fit_func(i)) * (arr_poi[j] - fit_func(j)) * (*icovp)(i,j) ; } }... } 58
Anpassen von Funktionen an Histogramme b: Binbreite 1. χ2 -Methode: Probleme: * Bins mit Ni=0, d.h Fehler 0 Abhilfe: setze * Ni folgen Binomial- oder Poisson-Verteilung, χ2-methode nimmt Gauß-Fehler an: Methode nur gut für große Ni 59
Anpassen an Histogramme: Binned Likelihood-Fit 2. Binned Likelihood-Fit hängt nicht von der Funktion ab : Schätzung für Parameter a χ2 und Likilood-Anpassung für Histogramme in ROOT implementiert ( χ2 ist default! ) Achtung: ROOT verwendet -2 ln L 60
Anpassen mit ROOT Beispiel Histogramm-Fit Vorsicht b. kleinen Zahlen! 10'000 Histogramme dieser Art, jeweils Gauß(x;μ,σ) anpassen mit der χ2-methode Test: Pull p = Beispiel: pull.c (fitted mean μ) /error muss standard-normalverteilt sein ist es aber in diesem Fall nicht! Grund: angenommene Fehler in jedem Bin sind ni - falls ni nach unten fluktuiert, wird auch der Fehler kleiner angenommen, die Folge ist einer verzerrte Parameterschätzung (betrifft hier vor allem den Parameter σ!) Abhilfe: -Log L Anpassung: Mean 0.0020 RMS 1.007 61
Anpassung von Parametern: abschließende Bemerkungen Hier konnte nicht alles angesprochen werden; es gibt noch viele weitere Fragestellungen Anpassen mit Nebenbedingungen: - Parameter innerhalb von Grenzen, a< λi <b - Einschränkungen an Parameter, z.b. durch Funktionen ej( λ1,, λp) = 0 Wie funktioniert numerische Optimierung / Minimierung? Weitere praktische Beispiele? Wie man es nicht machen sollte: beliebte Fehler. (einige) Antworten in Teil 2 im nächsten Semester: MasterKurs: Moderne Methoden der Datenanalyse 62
Parameterschätzung Fertige Programmpakete 63
(freie) Programme zur Parameteranpassung qtiplot http://wiki.ubuntuusers.de/qtiplot 64
(freie) Programme zur Parameteranpassung qtiplot http://wiki.ubuntuusers.de/qtiplot 65
(freie) Programme zur Parameteranpassung gnuplot 66
(freie) Programme zur Parameteranpassung RooFiLab http://www-ekp.physik.uni-karlsruhe.de/~quast/roofilab Eigenentwicklung (HiWi Thomas Müller) - Fehler in x- und y-richtung - korrelierte Fehler - geführte, grafische Oberfläche, fit-by-eye und automatisierte Anpassung mit Skript (angelehnt an gnuplot) - weitgehende Editierbarkeit der grafischen Ausgabe mittels ROOT-GUI - 67
(freie) Programme zur Parameteranpassung: kafe kafe (Karlsruhe Fit Environment) Vollständige Kapselung der ROOT-Klasse TMinuit in Python from kafe import * from kafe.function_tools import FitFunction, LaTeX, ASCII from kafe.function_library import quadratic_3par # fit function definition with decorators for nice output @ASCII(expression='a * x^2 + b * x + c') @LaTeX(name='f', parameter_names=('a', 'b', 'c'), expression='a\\,x^2+b\\,x+c') @FitFunction def poly2(x, a=1.0, b=0.0, c=0.0): return a * x**2 + b * x + c # set fit function fitf=poly2 # own definition #fitf=quadratic_3par # from kafe function library # Workflow # ####### load data from a file my_dataset = parse_column_data( 'kafe_fitexample.dat', field_order='x,y,yabsstat', title='example data') # Create the Fit my_fit = Fit(my_dataset, fitf) # Do the Fits my_fit.do_fit() # Create the plots my_plot = Plot(my_fit) # Set the axis labels my_plot.axis_labels = ['$x$', 'data \& $f(x)$'] # Draw the plots my_plot.plot_all() # Plot output # ############### # Save the plots my_plot.save('kafe_fitexample.pdf') # Show the plots my_plot.show() fitexample_kafe.py 68
(freie) Programme zur Parameteranpassung: kafe (2) - ansprechende Grafik - volle Steuerung aus Python - korrelierte Fehler auf Abszisse und Ordinate - 1σ - Unsicherheits-Band um angepasste Modellfunktion Ausgabe von kafe 69