Statistical distributions
There is an interesting article about statistical distributions for the HP Prime in hpmuseum.org. As you may know, the HP Prime comes with several functions to provide statistical distributions. The ones that come to my mind now are:
- Normal
- T (Student)
- Chi-square
- F (Fisher distribution)
- Binomial
- Poisson
These come in all three flavors: density, cumulative and inverse. So, compared with my beloved HP41CL, it is very well provided. But there are many other distributions that may be needed if you’re heavily into statistics. User Salvomic provides programs for several interesting cases. As he does not claim any copyright to them, and in the interest of the readers, I will post here the programs that create them. For the sake of reader comfort, we’ll post them in several installments, lest the page becomes too long!
Logistic Distribution
EXPORT logisticd(m,s,k)
// Logistic distribution m=µ, s=s, k=x
BEGIN
local f,g;
g:= (k-m)/s;
f:=e(-g)/(s*(1+e(-g))^2) ;
return f;
END;
EXPORT logistic_cdf(m,s,k)
BEGIN
local f,g;
g:= (k-m)/s;
f := 1/(1+e^(-g));
return f;
END ;
EXPORT logisticd_icdf(m,s,p)
// inverse m=µ, s=s, p probability
BEGIN
local f;
f:= m+s*ln(p/(1-p));
return f;
END;
Lognormal
EXPORT LgNrm(m,s,k)
// LogNormal distribution m=µ, s=s, k=x
BEGIN
local f;
f:= (1/(kssqrt(2pi)))e(-(ln(k)-m)2/(2*s2));
return f;
END;
EXPORT LgNrm_cdf(m,s,k)
BEGIN
local f;
f := normal((ln(k)-m)/s) ;
return f;
END ;
Exponential
EXPORT expond(l,n)
// exponential distribution l=λ=1/np, n
BEGIN
local f;
f:= piecewise(n<0,0, le^(-ln));
return f;
END;
EXPORT expond_cdf(l,n)
BEGIN
local f;
f := piecewise(n<0, 0, 1-e^(-l*n));
return f;
END ;
Geometric
EXPORT geometric(n,p)
// Geometric distribution, n tries, p prob
BEGIN
local f;
f:= p*(1-p)^n;
return f;
END;
EXPORT geometric_cdf(n,p)
BEGIN
local f;
f := 1-(1-p)^(n+1);
return f;
END ;
Hypergeometric
EXPORT ipergeom(n,m,k,j)
// Hypergeometric distribution, n total, m one kind, k extracted, j var
BEGIN
local f;
f:= (comb(m,j)*comb(n-m,k-j))/(comb(n,k));
return f;
END;
Negative Binomial
EXPORT NegBin(r, p,n)
// Negative Binomial distribution observing until r success, with p probability of success
// n num trials for r success (k failures), n=r, r+1,…
BEGIN
local f;
IF (n<r) THEN return “n must be >= r”; ELSE
f:= comb(n–1, r–1)*(pr)*(1-p)(n-r);
return f;
END; //if
END;
EXPORT NegBin_cdf(r, p, n)
BEGIN
local f, b1, a, b;
a:=r; b:= n+1;
b1:= int((X(a-1))*(1-X)(b–1),X,0,p);
// incomplete beta function
f:=( b1/Beta(a,b));
return f;
END;
EXPORT NegBin2(r, p,k)
// Negative Binomial observing until r failures, with p probability of success (1-p failure)
// n num trials, k = n-r success
// i.e. NegBin(5,0.4,15) = NegBin2(5,0.6,10)
BEGIN
local f;
f:= (comb(k+r–1,k))*(pk)*((1-p)r);
return f;
END;
Gompertz
EXPORT gompertz(h,b,n)
// Gompertz distribution h=η shape param, b scale param, n var
BEGIN
local f;
IF (n<0 OR h<=0 OR b<=0) THEN return “Not defined for η or b < =0 or n <0”; ELSE
f:= bhe(b*n)*ehe(-h*e(bn)) ;
return f;
END; // if
END;
EXPORT gompertz_cdf(h,b,n)
BEGIN
local f;
IF (n<0 OR h<=0 OR b<=0) THEN return “Not defined for η or b < =0 or n <0”; ELSE
f := 1-e(-h*(e(b*n)–1));
return f;
END;
END ;
Weibull
EXPORT weibull(l, k, t)
// Weibull distribution: l=λ>0 scale param (characteristic lifetime), k>0 shape parameter t var (time)
BEGIN
local f;
f:= piecewise(t<0,0, (k/l)(t/l)^(k–1)e(-(t/l)k));
return f;
END;
EXPORT weibull_cdf(l, k, t)
BEGIN
local f;
f:= piecewise(t<=0,0, 1-e(-(t/l)k)) ;
return f;
END ;
EXPORT weibull_translate(l, k, t, v)
// Weibull distribution tranlated: v location parameter
BEGIN
local f;
f:= piecewise(t<=v,0, (k/l)((t-v)/l)^(k–1)e(-((t-v)/l)k));
return f;
END;
EXPORT weibull_translate_cdf(l, k, t, v)
BEGIN
local f;
f:= piecewise(t<=v,0, 1-e(-((t-v)/l)k)) ;
return f;
END ;
Cauchy
EXPORT cauchyd(x0,g,n)
// Cauchy distribution x0 location param, g=γ scale param, n var
BEGIN
local f;
f:= 1/ (pig(1+((n-x0)/g)^2)) ;
return f;
END;
EXPORT cauchy_cdf(x0,g,n)
BEGIN
local f;
f:= (1/pi)*atan((n-x0)/g)+1/2 ;
return f;
END ;
EXPORT cauchy_icdf(x0,g,p)
// inverse x0, g=γ, p probability
BEGIN
local f;
f:= x0+gtan(pi(p-(1/2)));
return f;
END;