pdf of Poisson binomial distribution in Matlab

9 visualizaciones (últimos 30 días)
valentino dardanoni
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?
  3 comentarios
valentino dardanoni
valentino dardanoni el 9 de Dic. de 2023
Thank you Torsten, I guess I could start with a small example with small n, say n=5
Torsten
Torsten el 9 de Dic. de 2023
Editada: Torsten el 9 de Dic. de 2023

Iniciar sesión para comentar.

Respuesta aceptada

Gyan Vaibhav
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:
  1. successProbs: A vector containing the individual success probabilities for each trial.
  2. 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
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
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.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Numerical Integration and Differentiation en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by