libm3/src/statistics/Stat.i3

Copyright (C) 1989, Digital Equipment Corporation
See the file COPYRIGHT for a full description.

Last modified on Mon Aug 26 22:55:30 1991 by kalsow modified on Thu Nov 2 18:11:42 1989 by muller

modified on Thu Aug 4 08:14:28 1988 by stolfi modified on Fri Jun 10 14:23:17 PDT 1988 by glassman

```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.
```
```

```