Multi-Parameter Fit und Korrelationen

Wenn mehrere Parameter simultan gefittet werden ist es wichtig neben den Werten und Fehlern der Parameter auch die Korrelationen zu untersuchen.

In ROOT sind diese Informationen prinzipiell verfügbar, allerdings etwas versteckt und nicht direkt über das FitPanel abrufbar.

Für Fits die mit Minuit gemacht werden liefert folgende Funktion die Kovarianz- bzw. Korrelationsmatrix:


TMatrixD * GetCovMat( int ndim,  bool print = false, bool corrmat = false )
{
  TMatrixD td(ndim,ndim);
  gMinuit->mnemat(td.GetMatrixArray(),ndim);
  
  if ( corrmat ) {
    for ( int i=0; i<ndim; i++ ) {
      for ( int j=i+1; j<ndim; j++ ) {
    double cor = td(i,j) / sqrt( td(i,i) * td(j,j) ); 
    td(i,j) = cor;
    if ( i != j ) { // copy off diag elem
      td(j,i) = td(i,j);
    }
      }
      td(i,i) = 1.0;
    }
  }
  if ( print ) td.Print();
  
  return ( new TMatrixD(td));
}

    


C/C++ Tricks:

Contour-Plot

$\textstyle \parbox{.5\textwidth}{
Eine gute Visualisierung der Korrelation erla...
...erringert wenn
man einen Parameter fixiert (gestrichelte Linie)
\end{itemize}}$ $\textstyle \parbox{.45\textwidth}{
\begin{center}
\mbox{
\includegraphics[width=.45\textwidth]{corplot.eps}}
\end{center}
}$

In Minuit Funktion gMinuit->Contour(...) , die direkt als TGraph-Objekt und zum Zeichnen der Contour benutzt werden kann:


void plotContour( int i, int j ) 
{
  // make contour plot for two vars:
  TGraph *gr2 = (TGraph*)gMinuit->Contour(80,i,j);
  gr2->SetFillColor(42);
  gr2->Draw("alf");
  
  // central value
  double pi, dpi;
  double pj, dpj;
  gMinuit->GetParameter( i, pi, dpi) ;
  gMinuit->GetParameter( j, pj, dpj) ;
  TMarker *marker = new TMarker(pi,pj,20);
  marker->Draw();
}



GDuckeck 2018-04-10