2016-07-21 4 views
0

Ich bin ein bisschen verwirrt in der Poisson-Verteilung. Tatsächlich passe ich eine Poisson-Typ-Verteilung Poission type distribution an und die Ich muss seinen Mittelwert und Fehler auf Mittelwert extrahieren. So wie wir die Poisson-Verteilung wissen ist enter image description hereExtrahieren Parameter nach der Anpassung von Poisson-Verteilung

In Wurzel (C/C++ basierte Analyse-Framework) ich diese Funktion definiert wie unter

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]) 

Also, grundsätzlich dann der Poisson-Verteilung bedeutet, ist mu = 1/2 und der Fehler wird die Standardabweichung sein, die Quadratwurzel des Mittelwerts ist.

Aber, wenn ich diesen Wert verwende, kommt mein Mittelwert um 10 und daher ist der Fehler ~ 3.

Während der Mittelwert der Verteilung ist etwa 2 (wie wir sehen können), so bin ich verwirrt. Weil der Wert des Parameters 1 ungefähr 2 oder 3 ist. Also, sollte ich den Parameter 1 als Mittelwert verwenden oder was ??

Bitte schlagen Sie vor, was soll ich verwenden und warum?

Mein Voll Code ist unten:

TH1F *hClusterSize = new TH1F("hClusterSize","Cluster size for GE1/1", 10,0.,10.); 
    tmpTree->Draw("g1ycl.ngeoch>>hClusterSize","[email protected]()==1 && [email protected]()==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

Können Sie den tatsächlichen Code wie Sie die Funktion definieren, nicht nur die Zeichenfolge? Warum haben Sie 3 Parameter (ein Poisson hat einen Parameter plus einen für die Normalisierung)? Haben Sie überlegt, 'TMath :: Poisson' zu verwenden? – pseyfert

+0

mit nur 1 Parameter passt es nicht gut meine Verteilung. Also, wenn ich nur eine variable Änderung mache, um einen weiteren Parameter einzuführen, wie gesagt, dann passt es gut. Änderung der Variablen: x -> x/par2 Mittelwert -> Par1/Par2. Außerdem habe ich einen Teil des Codes für das gleiche hinzugefügt. – ramkrishna

Antwort

0

auf dem Stammbefehlszeile eine Poisson-Verteilung passend kann wie folgt erfolgen:

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)  

Beachten Sie, dass, dass sind Zentren verschoben WRT Ihr erster Beitrag , so dass der Behälter Mitte von 0 zählt auf 0 und nicht auf 0,5 (und das gleiche für alle anderen Bins).

+0

Danke. Aber mit nur 1 Parameter passt es nicht gut meine Verteilung. Also, wenn ich nur eine variable Änderung mache, um einen weiteren Parameter einzuführen, wie gesagt, dann passt es gut. Änderung der Variablen: x -> x/par2 Mittelwert -> par1/par2 – ramkrishna

+0

Hallo, hast du noch weitere Suggestionen? – ramkrishna