Comment puis-je calculer un PMF et CDF pour une distribution binomiale dans Matlab?

StackOverflow https://stackoverflow.com/questions/1889778

  •  19-09-2019
  •  | 
  •  

Question

Je dois calculer la fonction de masse de probabilité et la fonction de distribution cumulative, de la de distribution binomiale . Je voudrais utiliser Matlab pour le faire (Matlab brut, sans boîtes à outils). Je peux calculer moi-même ces derniers, mais espérait utiliser une fonction prédéfinie et ne peut pas trouver. Y at-il quelque chose là-bas?

function x = homebrew_binomial_pmf(N,p)
    x = [1];
    for i = 1:N
       x = [0 x]*p + [x 0]*(1-p);
    end
Était-ce utile?

La solution

Vous pouvez utiliser la fonction NCHOOSEK calculer le coefficient binomial. Avec cela, vous pouvez créer une fonction qui calcule la valeur de la fonction de masse de probabilité pour un ensemble de valeurs de k pour une N et p donné:

function pmf = binom_dist(N,p,k)
  nValues = numel(k);
  pmf = zeros(1,nValues);
  for i = 1:nValues
    pmf(i) = nchoosek(N,k(i))*p^k(i)*(1-p)^(N-k(i));
  end
end

Pour tracer la fonction de masse de probabilité, vous procédez comme suit:

k = 0:40;
pmf = binom_dist(40,0.5,k);
plot(k,pmf,'r.');

et la fonction de distribution cumulative peut être trouvée à partir de la fonction de masse de probabilité en utilisant CUMSUM :

cummDist = cumsum(pmf);
plot(k,cummDist,'r.');

NOTE: Lorsque le coefficient binomial est revenu de NCHOOSEK est grande, vous pouvez finir par perdre la précision. Une alternative très agréable est d'utiliser la soumission Variable Arithmétique Entier Précision de John d'Errico sur MathWorks fichier Exchange. En convertissant vos numéros à son type de vpi, vous pouvez éviter la perte de précision.

Autres conseils

octave fournit une bonne collection de la distribution pdf, cdf, quantile; ils doivent être traduits d'octave, mais cela est relativement trivial (convertir endif à end, convertir != à ~=, etc;) voir par exemple octave binocdf pour la fonction cdf binomiale.

Pour PDF

x=1:15
p=.45

c=binopdf(x,15,p)

plot(x,c)

De même CDF

D=binocdf(x,15,p) 

plot(x,D)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top