2016-07-21 3 views
0

Я немного запутался в распределении Пуассона. На самом деле я устанавливаю распределение типа Пуассона Poission type distribution, и мне нужно извлечь его среднее значение и ошибку в среднем. Так как мы знаем, что распределение Пуассона enter image description hereИзвлечение параметра после установки из распределения Пуассона

В корне (/ 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]) 

Таким образом, в принципе, то мат.ожидание Пуассона мю = 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","[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

Можете ли вы опубликовать фактический код, как вы определяете функцию, а не только строку? Почему у вас есть 3 параметра (у Пуассона есть один параметр плюс один для нормализации)? Считаете ли вы использование 'TMath :: Poisson'? – pseyfert

+0

с единственным параметром 1, это не подходит для моего распределения. Так что если я просто сделаю переменное изменение, чтобы ввести еще один параметр, как я сказал, он подходит хорошо. изменение переменной: x -> x/par2 mean -> par1/par2. Кроме того, я добавил часть кода для этого же. – ramkrishna

ответ

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)  

Обратите внимание, что, что бен центры смещаются WRT ваш первоначальный пост , так что бит с центром 0 отсчетов равен 0, а не 0,5 (и тот же для всех остальных).

+0

Спасибо. Но, только с одним параметром, мне не подходит мой дистрибутив. Так что если я просто сделаю переменное изменение, чтобы ввести еще один параметр, как я сказал, он подходит хорошо. изменение переменной: x -> x/par2 среднее -> par1/par2 – ramkrishna

+0

Привет, у вас есть больше предложений? – ramkrishna

Смежные вопросы