我对泊松分布有点困惑。实际上我拟合泊松类型分布,我需要提取它的平均值和误差。所以我们知道Poisson分布是
在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"
答案 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(并且所有其他区间的计数相同)。