Re: [ROOT] KolmogorovTest in 2-D histogram

From: Rene Brun (Rene.Brun@cern.ch)
Date: Fri Feb 01 2002 - 12:07:05 MET


Hi Ben,

Thanks for reporting this interesting test case. I have now fixed
the problem in the CVS version.
With the fix, the results of your tests are:

root [0] .x test1dHists.C
 1D KS agreement (no N option) is 0.00553137
 1D KS agreement (with N option) is 0.0141395

root [0] .x test2dHists.C
 2D KS agreement (no N option) is 0.000534578
 2D KS agreement (with N option) is 0.00180766

Rene Brun

Ben Kilminster wrote:
> 
> Hi,
> 
> Perhaps there is something I'm not understanding about KS tests, but
> when I do a Kolmogorov Test on 2-D histograms I get results which seem
> *too* compatible.
> 
> Here is an example. In test2Hists.C, I compare two 2-d histograms and get
> a KS probability of about 0.13.  In test1Hists.C, I project the same 2-D
> histograms onto the X axis, and do a comparison to get a KS probability of
> 0.005.
> 
> The 1-D KS value seems reasonable, but the 2-D KS value seems really
> inflated.
> 
> root [0] .X test1dHists.C
>  1D KS agreement (no N option) is 0.00553137
>  1D KS agreement (with N option) is 0.0141395
> root [1] .X test2dHists.C
>  2D KS agreement (no N option) is 0.129321
>  2D KS agreement (with N option) is 0.186625
> 
> // file test1dHists.C
> {
> TH1F *h1 = new TH1F("h1","test",10,3,8);
> TH1F *h12 = new TH1F("h12","test2",10,3,8);
> 
> h1->Fill(3);h1->Fill(3);
> h1->Fill(4);h1->Fill(4);h1->Fill(4);h1->Fill(4);
> h1->Fill(5);h1->Fill(5);h1->Fill(5);h1->Fill(5);h1->Fill(5);
> h1->Fill(6);h1->Fill(6);h1->Fill(6);h1->Fill(6);
> h1->Fill(7);h1->Fill(7);
> 
> h12->Fill(5.5);h12->Fill(5.5);h12->Fill(5.5);h12->Fill(5.5);
> h12->Fill(5.5);h12->Fill(5.5);h12->Fill(5.5);h12->Fill(5.5);
> h12->Fill(5.5);h12->Fill(5.5);h12->Fill(5.5);h12->Fill(5.5);
> 
> TCanvas *c1 = new TCanvas("c1","1-D ",600,800);
> c1->Divide(1,2);
> 
> c1->cd(1);
> h1->Draw();
> 
> c1->cd(2);
> h12->Draw();
> 
> c1->Update();
> double KS = h1->KolmogorovTest(h12);
> cout << " 1D KS agreement (no N option) is " << KS << endl;
> double KS = h1->KolmogorovTest(h12,"N");
> cout << " 1D KS agreement (with N option) is " << KS << endl;
> }
> 
> // file test2dHists.C
> {
> 
> TH2F *h = new TH2F("h","test",10,3,8,10,0,6);
> TH2F *h2 = new TH2F("h2","test2",10,3,8,10,0,6);
> 
> h->Fill(3,4);h->Fill(3,3);
> h->Fill(5,1);h->Fill(5,2);h->Fill(5,1);h->Fill(5,2);h->Fill(5,1);
> h->Fill(4,2);h->Fill(4,1);h->Fill(4,2);h->Fill(4,3);
> h->Fill(6,3);h->Fill(6,2);h->Fill(6,1);h->Fill(6,3);
> h->Fill(7,4);h->Fill(7,4);
> 
> h2->Fill(5.5,4.0);h2->Fill(5.5,4.0);h2->Fill(5.5,4.0);h2->Fill(5.5,4.0);
> h2->Fill(5.5,4.0);h2->Fill(5.5,4.0);h2->Fill(5.5,4.0);h2->Fill(5.5,4.0);
> h2->Fill(5.5,4.0);h2->Fill(5.5,4.0);h2->Fill(5.5,4.0);h2->Fill(5.5,4.0);
> 
> TCanvas *c2 = new TCanvas("c2","2-D ",600,800);
> c2->Divide(1,2);
> 
> c2->cd(1);
> h->Draw("box");
> 
> c2->cd(2);
> h2->Draw("box");
> 
> double KS = h->KolmogorovTest(h2);
> cout << " 2D KS agreement (no N option) is " << KS << endl;
> double KS = h->KolmogorovTest(h2,"N");
> cout << " 2D KS agreement (with N option) is " << KS << endl;
> }
> 
> Cheers,
> Ben



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:40 MET