从泊松分布拟合后提取参数

时间:2016-07-21 20:21:59

标签: statistics data-analysis root-framework

我对泊松分布有点困惑。实际上我拟合泊松类型分布Poission type distribution,我需要提取它的平均值和误差。所以我们知道Poisson分布是 enter image description here

在root(基于C / c ++的分析框架)中,我定义了这个函数,如下所示

function = ( [0]  * Power( [1] / [2]  ,  x/[2] )  * exp (-[1]/[2]) ) /     Gamma(x/[2] + 1)

Where : [0] = Normalizing parameter
        [1] / [2] -> mean (mu) 
        x / [2] -> x
        Gamma( x / [2] + 1 ) = factorial (x / [2])

因此,原则上泊松分布的平均值为mu = 1 / 2,误差将是标准偏差,即平均值的平方根。

但是,如果我使用这个值,那么我的意思是大约10,因此错误是〜3。

虽然分布均值约为2(我们可以看到),所以我很困惑。因为参数1的值大约是2或3.所以,我应该使用参数1作为平均值还是什么?

请建议我应该使用什么以及为什么?

我的完整代码如下:

TH1F *hClusterSize = new TH1F("hClusterSize","Cluster size for GE1/1", 10,0.,10.);
    tmpTree->Draw("g1ycl.ngeoch>>hClusterSize","g1ycl@.GetEntries()==1 && g1xcl@.GetEntries()==1");
    hClusterSize->GetXaxis()->SetTitle("Cluster Size");
    hClusterSize->GetYaxis()->SetTitle("#Entries");
    TF1 *f1 = new TF1("f1","[0]*TMath::Power(([1]/[2]),(x/[2]))*(TMath::Exp(-([1]/[2])))/TMath::Gamma((x/[2])+1)", 0, 10); 
    f1->SetParameters(hClusterSize->GetMaximum(), hClusterSize->GetMean(), 1); 
    hClusterSize->Fit("f1"); // Use option "R" = fit between "xmin" and "xmax" of the "f1"

1 个答案:

答案 0 :(得分:0)

在根命令行上拟合泊松分布可以这样做:

TF1* func = new TF1("mypoi","[0]*TMath::Poisson(x,[1])",0,20)                          
func->SetParameter(0,5000) // set starting values                                      
func->SetParameter(1,2.) // set starting values                                        
func->SetParName(0,"Normalisation")
func->SetParName(1,"#mu")
TH1F* hist = new TH1F("hist","hist",20,-0.5,19.5)  
for (int i = 0 ; i < 5000 ; i++) { hist->Fill(gRandom->Poisson(3.5)); }
hist->Draw()        
hist->Fit(func)     

请注意,bin中心会在初始帖子中移动,例如bin 0个计数的中心位于0而不是0.5(并且所有其他区间的计数相同)。