Copyright (C) 1994, Digital Equipment Corp.
INTERFACE Stat;
Tools for elementary statistics of a sequence of real quantities
A tiny set of tools for collecting elementary statistics (count,
maximum, minimum, mean, and variance) of a sequence of real quantities.
Index: statistics, collecting; printing, statistics
IMPORT Wr, Thread;
TYPE
T = RECORD (* A statistics accumulator *)
num : LONGREAL;
mean : LONGREAL;
variance : LONGREAL;
maximum : REAL;
minimum : REAL;
END;
(* Typical usage:
| VAR st: Stat.T;
| BEGIN
| Stat.Init(st);
| LOOP
| weight := ...
| Stat.Accum(st, weight);
| ...
| END;
| Wr.PrintF(stderr, "Weight statistics: ");
| Stat.Print(stderr, st);
| Wr.PrintF(stderr, "\n");
| END;
The mean is arithmetic mean. The variance is the sum of of
(x - mean)**2, divided by num (NOT num-1). Thus, the standard
deviation is sqrt(variance*num/(num-1)). *)
********************************************************
GATHERING:
********************************************************
PROCEDURE Init (VAR s: T);
Resets the statistics accumulator s
PROCEDURE Accum (VAR s: T; x: REAL);
Accumulates another observation x into the statistics accumulator s
PROCEDURE Combine (READONLY r, s: T): T;
Combines statistics of two disjoint samples into a single sample
********************************************************
EXTRACTING:
********************************************************
PROCEDURE Num (READONLY s: T): REAL;
The number of observations in s. Same as FLOAT(s.num).
PROCEDURE Max (READONLY s: T): REAL;
The maximum observed value. Same as s.maximum.
PROCEDURE Min (READONLY s: T): REAL;
The minimum observed value. Same as s.minimum.
PROCEDURE Mean (READONLY s: T): REAL;
The arithmetic mean. Same as FLOAT(s.mean).
PROCEDURE Var (READONLY s: T): REAL;
The variance, i.e. sum((x[i]-mean)^2)/num. Same as FLOAT(s.variance).
PROCEDURE SDev (READONLY s: T): REAL;
The standard deviation, sqrt(sum((x[i]-mean)^2)/(num-1)).
Returns 0.0 if num < 2
PROCEDURE RMS (READONLY s: T): REAL;
The root mean square value, sqrt(sum(x[i]^2)/num)
********************************************************
PRINTING:
********************************************************
PROCEDURE Print (wr: Wr.T; READONLY s: T) RAISES {Wr.Failure, Thread.Alerted};
Prints the text string
"num: %d min: %g max: %g mean: %g dev: %g"
on the given writer. If num=0, all other entries are omitted.
The dev
entry is the standard deviation, and is omitted if num<=1.
END Stat.