1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
{ ******************************************************************
Mean and standard deviations
****************************************************************** }
unit umeansd;
interface
uses
utypes;
function Mean(X : PVector; Lb, Ub : Integer) : Float;
{ Mean of sample X }
function StDev(X : PVector; Lb, Ub : Integer; M : Float) : Float;
{ Standard deviation estimated from sample X }
function StDevP(X : PVector; Lb, Ub : Integer; M : Float) : Float;
{ Standard deviation of population }
implementation
function Mean(X : PVector; Lb, Ub : Integer) : Float;
var
SX : Float;
I : Integer;
begin
SX := 0.0;
for I := Lb to Ub do
SX := SX + X^[I];
Mean := SX / (Ub - Lb + 1);
end;
function StDev(X : PVector; Lb, Ub : Integer; M : Float) : Float;
var
D, SD, SD2, V : Float;
I, N : Integer;
begin
N := Ub - Lb + 1;
SD := 0.0; { Sum of deviations (used to reduce roundoff error) }
SD2 := 0.0; { Sum of squared deviations }
for I := Lb to Ub do
begin
D := X^[I] - M;
SD := SD + D;
SD2 := SD2 + Sqr(D)
end;
V := (SD2 - Sqr(SD) / N) / (N - 1); { Variance }
StDev := Sqrt(V);
end;
function StDevP(X : PVector; Lb, Ub : Integer; M : Float) : Float;
var
D, SD, SD2, V : Float;
I, N : Integer;
begin
N := Ub - Lb + 1;
SD := 0.0; { Sum of deviations (used to reduce roundoff error) }
SD2 := 0.0; { Sum of squared deviations }
for I := Lb to Ub do
begin
D := X^[I] - M;
SD := SD + D;
SD2 := SD2 + Sqr(D)
end;
V := (SD2 - Sqr(SD) / N) / N; { Variance }
StDevP := Sqrt(V);
end;
end.
|