/*-------------------------------------------*/ /* Some basic statistics */ /*-------------------------------------------*/ /* (C) 2004 Zdravko Markov */ /*-------------------------------------------*/ /* Procedures: */ /* mean(+List, -Mean) */ /* stdev(+List, -Deviation) */ /* variance(+List, -Variance) */ /* p(+Value, +Mean, +Deviation, -Density) */ /* p(+Value, +List, -Density) */ /*-------------------------------------------*/ mean(L,M) :- length(L,N), sum(L,S), M is S/N. sum([],0) :- !. sum([X|T],S) :- sum(T,S1), S is S1+X. stdev(L,D) :- variance(L,V), D is sqrt(V). variance([_],0) :- !. variance(L,V) :- length(L,N), mean(L,M), sumsq(L,M,S), V is S/(N-1). sumsq([],_,0) :- !. sumsq([X|T],M,S) :- sumsq(T,M,S1), S is S1+(X-M)*(X-M). p(X,M,D,P) :- P is exp(-(X-M)*(X-M)/(2*D*D))/(D*sqrt(2*pi)). p(X,L,P) :- mean(L,M), stdev(L,D), p(X,M,D,P).