Comment puis-je calculer un PMF et CDF pour une distribution binomiale dans Matlab?
-
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
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.
ressemble à la CDF de la distribution binomiale , mon meilleur pari est le fonction bêta incomplète betainc .
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)