¿Cómo calculo un PMF y CDF para una distribución binomial en MATLAB?
-
19-09-2019 - |
Pregunta
necesito para calcular la función de masa de probabilidad, y la función de distribución acumulada, de la . Me gustaría utilizar MATLAB para hacer esto (en bruto MATLAB, no hay cajas de herramientas). Puedo calcular éstos mismo, pero tenía la esperanza de utilizar una función predefinida y no puedo encontrar ninguna. ¿Hay algo por ahí?
function x = homebrew_binomial_pmf(N,p)
x = [1];
for i = 1:N
x = [0 x]*p + [x 0]*(1-p);
end
Solución
Puede utilizar la función de NCHOOSEK a calcular el coeficiente binomial. Con esto, se puede crear una función que calcula el valor de la función de masa de probabilidad para un conjunto de valores para un k
N
y p
dado:
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
Para representar la función de masa de probabilidad, tendría que hacer lo siguiente:
k = 0:40;
pmf = binom_dist(40,0.5,k);
plot(k,pmf,'r.');
y la función de distribución acumulativa se puede encontrar a partir de la función de masa de probabilidad utilizando CUMSUM :
cummDist = cumsum(pmf);
plot(k,cummDist,'r.');
Nota: Cuando el coeficiente binomial regresó de NCHOOSEK es grande puede llegar a perder precisión. Una alternativa muy interesante es utilizar la presentación variable de precisión aritmética de enteros John D'Errico en la Intercambio de archivos de MathWorks . Mediante la conversión de sus números a su tipo vpi
, puede evitar la pérdida de precisión.
Otros consejos
octava proporciona una buena colección de pdf distribución, cdf, cuantil; tienen que ser traducida de octava, pero esto es relativamente trivial (convertir endif
a end
, convertir !=
a ~=
, etc;) véase, por ejemplo octava binocdf para la función cdf binomial.
se parece a la rel="nofollow CDF de la distribución binomial , mi mejor apuesta es el función beta incompleta betainc .
Para PDF
x=1:15
p=.45
c=binopdf(x,15,p)
plot(x,c)
Del mismo modo CDF
D=binocdf(x,15,p)
plot(x,D)