ROOT logo

From $ROOTSYS/tutorials/fit/ConfidenceIntervals.C


#include "TGraphErrors.h"
#include "TGraph2DErrors.h"
#include "TCanvas.h"
#include "TF2.h"
#include "TH1.h"
#include "TVirtualFitter.h"
#include "TRandom.h"

void ConfidenceIntervals()
{
//Illustrates TVirtualFitter::GetConfidenceIntervals
//This method computes confidence intervals for the fitted function
//Author: Anna Kreshuk
   
   TCanvas *myc = new TCanvas("myc", 
      "Confidence intervals on the fitted function",1200, 500);
   myc->Divide(3,1);

/////1. A graph
   //Create and fill a graph
   Int_t ngr = 100;
   TGraph *gr = new TGraph(ngr);
   gr->SetName("GraphNoError");
   Double_t x, y;
   Int_t i;
   for (i=0; i<ngr; i++){
      x = gRandom->Uniform(-1, 1);
      y = -1 + 2*x + gRandom->Gaus(0, 1);
      gr->SetPoint(i, x, y);
   }
   //Create the fitting function
   TF1 *fpol = new TF1("fpol", "pol1", -1, 1);
   fpol->SetLineWidth(2);
   gr->Fit(fpol, "Q");

   //Create a TGraphErrors to hold the confidence intervals
   TGraphErrors *grint = new TGraphErrors(ngr);
   grint->SetTitle("Fitted line with .95 conf. band");
   for (i=0; i<ngr; i++)
      grint->SetPoint(i, gr->GetX()[i], 0);
   //Compute the confidence intervals at the x points of the created graph
   (TVirtualFitter::GetFitter())->GetConfidenceIntervals(grint);
   //Now the "grint" graph contains function values as its y-coordinates
   //and confidence intervals as the errors on these coordinates
   //Draw the graph, the function and the confidence intervals
   myc->cd(1);
   grint->SetLineColor(kRed);
   grint->Draw("ap");
   gr->SetMarkerStyle(5);
   gr->SetMarkerSize(0.7);
   gr->Draw("psame");

/////2. A histogram
   myc->cd(2);
   //Create, fill and fit a histogram
   Int_t nh=5000;
   TH1D *h = new TH1D("h", 
      "Fitted gaussian with .95 conf.band", 100, -3, 3);
   h->FillRandom("gaus", nh);
   TF1 *f = new TF1("fgaus", "gaus", -3, 3);
   f->SetLineWidth(2);
   h->Fit(f, "Q");
   h->Draw();
   
   //Create a histogram to hold the confidence intervals
   TH1D *hint = new TH1D("hint", 
      "Fitted gaussian with .95 conf.band", 100, -3, 3);
   (TVirtualFitter::GetFitter())->GetConfidenceIntervals(hint);
   //Now the "hint" histogram has the fitted function values as the 
   //bin contents and the confidence intervals as bin errors
   hint->SetStats(kFALSE);
   hint->SetFillColor(2);
   hint->Draw("e3 same");

/////3. A 2d graph
   //Create and fill the graph
   Int_t ngr2 = 100;
   Double_t z, rnd, e=0.3;
   TGraph2D *gr2 = new TGraph2D(ngr2);
   gr2->SetName("Graph2DNoError");
   TF2  *f2 = new TF2("f2",
      "1000*(([0]*sin(x)/x)*([1]*sin(y)/y))+250",-6,6,-6,6);
   f2->SetParameters(1,1);
   for (i=0; i<ngr2; i++){
      f2->GetRandom2(x,y);
      // Generate a random number in [-e,e]
      rnd = 2*gRandom->Rndm()*e-e; 
      z = f2->Eval(x,y)*(1+rnd);
      gr2->SetPoint(i,x,y,z);
   }
   //Create a graph with errors to store the intervals
   TGraph2DErrors *grint2 = new TGraph2DErrors(ngr2);
   for (i=0; i<ngr2; i++)
      grint2->SetPoint(i, gr2->GetX()[i], gr2->GetY()[i], 0);

   //Fit the graph
   f2->SetParameters(0.5,1.5);
   gr2->Fit(f2, "Q");
   //Compute the confidence intervals
   (TVirtualFitter::GetFitter())->GetConfidenceIntervals(grint2);   
   //Now the "grint2" graph contains function values as z-coordinates
   //and confidence intervals as their errors
   //draw
   myc->cd(3);
   f2->SetNpx(30);
   f2->SetNpy(30);
   f2->SetFillColor(kBlue);
   f2->Draw("surf4");
   grint2->SetNpx(20);
   grint2->SetNpy(20);
   grint2->SetMarkerStyle(24);
   grint2->SetMarkerSize(0.7);
   grint2->SetMarkerColor(kRed);
   grint2->SetLineColor(kRed);
   grint2->Draw("E0 same");
   grint2->SetTitle("Fitted 2d function with .95 error bars");

   myc->cd();

}
      



 ConfidenceIntervals.C:1
 ConfidenceIntervals.C:2
 ConfidenceIntervals.C:3
 ConfidenceIntervals.C:4
 ConfidenceIntervals.C:5
 ConfidenceIntervals.C:6
 ConfidenceIntervals.C:7
 ConfidenceIntervals.C:8
 ConfidenceIntervals.C:9
 ConfidenceIntervals.C:10
 ConfidenceIntervals.C:11
 ConfidenceIntervals.C:12
 ConfidenceIntervals.C:13
 ConfidenceIntervals.C:14
 ConfidenceIntervals.C:15
 ConfidenceIntervals.C:16
 ConfidenceIntervals.C:17
 ConfidenceIntervals.C:18
 ConfidenceIntervals.C:19
 ConfidenceIntervals.C:20
 ConfidenceIntervals.C:21
 ConfidenceIntervals.C:22
 ConfidenceIntervals.C:23
 ConfidenceIntervals.C:24
 ConfidenceIntervals.C:25
 ConfidenceIntervals.C:26
 ConfidenceIntervals.C:27
 ConfidenceIntervals.C:28
 ConfidenceIntervals.C:29
 ConfidenceIntervals.C:30
 ConfidenceIntervals.C:31
 ConfidenceIntervals.C:32
 ConfidenceIntervals.C:33
 ConfidenceIntervals.C:34
 ConfidenceIntervals.C:35
 ConfidenceIntervals.C:36
 ConfidenceIntervals.C:37
 ConfidenceIntervals.C:38
 ConfidenceIntervals.C:39
 ConfidenceIntervals.C:40
 ConfidenceIntervals.C:41
 ConfidenceIntervals.C:42
 ConfidenceIntervals.C:43
 ConfidenceIntervals.C:44
 ConfidenceIntervals.C:45
 ConfidenceIntervals.C:46
 ConfidenceIntervals.C:47
 ConfidenceIntervals.C:48
 ConfidenceIntervals.C:49
 ConfidenceIntervals.C:50
 ConfidenceIntervals.C:51
 ConfidenceIntervals.C:52
 ConfidenceIntervals.C:53
 ConfidenceIntervals.C:54
 ConfidenceIntervals.C:55
 ConfidenceIntervals.C:56
 ConfidenceIntervals.C:57
 ConfidenceIntervals.C:58
 ConfidenceIntervals.C:59
 ConfidenceIntervals.C:60
 ConfidenceIntervals.C:61
 ConfidenceIntervals.C:62
 ConfidenceIntervals.C:63
 ConfidenceIntervals.C:64
 ConfidenceIntervals.C:65
 ConfidenceIntervals.C:66
 ConfidenceIntervals.C:67
 ConfidenceIntervals.C:68
 ConfidenceIntervals.C:69
 ConfidenceIntervals.C:70
 ConfidenceIntervals.C:71
 ConfidenceIntervals.C:72
 ConfidenceIntervals.C:73
 ConfidenceIntervals.C:74
 ConfidenceIntervals.C:75
 ConfidenceIntervals.C:76
 ConfidenceIntervals.C:77
 ConfidenceIntervals.C:78
 ConfidenceIntervals.C:79
 ConfidenceIntervals.C:80
 ConfidenceIntervals.C:81
 ConfidenceIntervals.C:82
 ConfidenceIntervals.C:83
 ConfidenceIntervals.C:84
 ConfidenceIntervals.C:85
 ConfidenceIntervals.C:86
 ConfidenceIntervals.C:87
 ConfidenceIntervals.C:88
 ConfidenceIntervals.C:89
 ConfidenceIntervals.C:90
 ConfidenceIntervals.C:91
 ConfidenceIntervals.C:92
 ConfidenceIntervals.C:93
 ConfidenceIntervals.C:94
 ConfidenceIntervals.C:95
 ConfidenceIntervals.C:96
 ConfidenceIntervals.C:97
 ConfidenceIntervals.C:98
 ConfidenceIntervals.C:99
 ConfidenceIntervals.C:100
 ConfidenceIntervals.C:101
 ConfidenceIntervals.C:102
 ConfidenceIntervals.C:103
 ConfidenceIntervals.C:104
 ConfidenceIntervals.C:105
 ConfidenceIntervals.C:106
 ConfidenceIntervals.C:107
 ConfidenceIntervals.C:108
 ConfidenceIntervals.C:109
 ConfidenceIntervals.C:110
 ConfidenceIntervals.C:111
 ConfidenceIntervals.C:112
 ConfidenceIntervals.C:113
 ConfidenceIntervals.C:114
 ConfidenceIntervals.C:115
 ConfidenceIntervals.C:116
 ConfidenceIntervals.C:117
 ConfidenceIntervals.C:118
 ConfidenceIntervals.C:119
 ConfidenceIntervals.C:120
 ConfidenceIntervals.C:121
 ConfidenceIntervals.C:122
 ConfidenceIntervals.C:123
 ConfidenceIntervals.C:124
 ConfidenceIntervals.C:125
 ConfidenceIntervals.C:126