pdf of Poisson binomial distribution in Matlab
9 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
valentino dardanoni
el 9 de Dic. de 2023
Comentada: Paul
el 22 de Dic. de 2024
Is there a Matlab implementation for the calculation of the pdf for the Poisson-binomial distribution?
Respuesta aceptada
Gyan Vaibhav
el 18 de Dic. de 2023
Editada: Gyan Vaibhav
el 18 de Dic. de 2023
Hi Valentino,
I understand that you are trying to find the PDF of a given Binomial-Poisson distribution.
While MATLAB doesn't offer a built-in function specifically for this purpose, you can certainly craft a custom function to accomplish the task.
The code snippet provided below is designed to calculate the PDF for a Poisson-Binomial distribution. This function requires two input arguments:
- successProbs: A vector containing the individual success probabilities for each trial.
- k: The specific number of successful trials for which you wish to compute the PDF.
function pdf = poisson_binomial_pdf(successProbs, k)
% successProbs is a vector containing the success probabilities for each trial
% k is the number of successful trials for which you want to calculate the PDF
n = length(successProbs); % Number of trials
% The FFT-based method for Poisson-binomial PDF calculation
M = 2^nextpow2(2*n); % Find the next power of 2 for zero-padding
omega = exp(-2i * pi / M);
A = ones(1, M);
for j = 1:n
A = A .* (1 - successProbs(j) + successProbs(j) * omega.^(0:M-1));
end
pdfVals = ifft(A);
pdf = real(pdfVals(1:n+1)); % Only the first (n+1) values are needed
% Return the PDF value for k successes
if k >= 0 && k <= n
pdf = pdf(k+1);
else
pdf = 0;
end
end
You can use this function as follows:
% Example success probabilities for 5 trials
successProbs = [0.04, 0.07, 0.07];
% Calculate the PDF for 3 successes
k = 3;
pdfValue = poisson_binomial_pdf(successProbs, k);
This approach gives us the PDF of a Binomial-Poisson Distribution.
Hope this helps.
Thanks
Gyan
7 comentarios
John D'Errico
el 22 de Dic. de 2024
Editada: John D'Errico
el 22 de Dic. de 2024
Yeah, I did not look carefully at the original code. Pulling omega out helps a lot. Given that I have one case where n may be as large as 7 million, the difference would be significant.
Paul
el 22 de Dic. de 2024
I didn't test each change individually, but I imagine elminating the loop over k (outside the function) is quite signficant as well.
Más respuestas (0)
Ver también
Categorías
Más información sobre Numerical Integration and Differentiation en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

