HP15c CE Enhanced at the same price as standard - until Oct. 10 - Limited units

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;