Rechnernutzung in der Physik

Vorlesung: Rechnernutzung in der Physik Anpassung von Parametern Günter Quast Fakultät für Physik Institut für Experimentelle Kernphysik KIT – Die ...
Author: Sara Sauer
2 downloads 4 Views 7MB Size
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: =nf oder = 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, , , ); // set parameters Root > myf->SetParameters(, … , 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