g01ae constructs a frequency distribution of a variable, according to either user-supplied, or method-calculated class boundary values.

Syntax

C#
public static void g01ae(
	int n,
	int k,
	double[] x,
	int iclass,
	double[] cb,
	int[] ifreq,
	out double xmin,
	out double xmax,
	out int ifail
)
Visual Basic
Public Shared Sub g01ae ( _
	n As Integer, _
	k As Integer, _
	x As Double(), _
	iclass As Integer, _
	cb As Double(), _
	ifreq As Integer(), _
	<OutAttribute> ByRef xmin As Double, _
	<OutAttribute> ByRef xmax As Double, _
	<OutAttribute> ByRef ifail As Integer _
)
Visual C++
public:
static void g01ae(
	int n, 
	int k, 
	array<double>^ x, 
	int iclass, 
	array<double>^ cb, 
	array<int>^ ifreq, 
	[OutAttribute] double% xmin, 
	[OutAttribute] double% xmax, 
	[OutAttribute] int% ifail
)
F#
static member g01ae : 
        n : int * 
        k : int * 
        x : float[] * 
        iclass : int * 
        cb : float[] * 
        ifreq : int[] * 
        xmin : float byref * 
        xmax : float byref * 
        ifail : int byref -> unit 

Parameters

n
Type: System..::..Int32
On entry: n, the number of observations.
Constraint: n1.
k
Type: System..::..Int32
On entry: k, the number of classes desired in the frequency distribution. Whether or not class boundary values are user-supplied, k must include the two extreme classes which stretch to ±.
Constraint: k2.
x
Type: array<System..::..Double>[]()[][]
An array of size [n]
On entry: the sample of observations of the variable for which the frequency distribution is required, xi, for i=1,2,,n. The values may be in any order.
iclass
Type: System..::..Int32
On entry: indicates whether class boundary values are to be calculated within g01ae, or are supplied by you.
If iclass=0, then the class boundary values are to be calculated within the method.
If iclass=1, they are user-supplied.
Constraint: iclass=0 or 1.
cb
Type: array<System..::..Double>[]()[][]
An array of size [k]
On entry: if iclass=0, then the elements of cb need not be assigned values, as g01ae calculates k-1 class boundary values.
If iclass=1, the first k-1 elements of cb must contain the class boundary values you supplied, in ascending order.
In both cases, the element cb[k-1] need not be assigned, as it is not used in the method.
On exit: the first k-1 elements of cb contain the class boundary values in ascending order.
Constraint: if iclass=1, cb[i-1]<cb[i], for i=1,2,,k-2.
ifreq
Type: array<System..::..Int32>[]()[][]
An array of size [k]
On exit: the elements of ifreq contain the frequencies in each class, fi, for i=1,2,,k. In particular ifreq[0] contains the frequency of the class up to cb[0], f1, and ifreq[k-1] contains the frequency of the class greater than cb[k-2], fk.
xmin
Type: System..::..Double%
On exit: the smallest value in the sample, a.
xmax
Type: System..::..Double%
On exit: the largest value in the sample, b.
ifail
Type: System..::..Int32%
On exit: ifail=0 unless the method detects an error or a warning has been flagged (see [Error Indicators and Warnings]).

Description

The data consists of a sample of n observations of a continuous variable, denoted by xi, for i=1,2,,n. Let a=minx1,,xn and b=maxx1,,xn.
g01ae constructs a frequency distribution with k>1 classes denoted by fi, for i=1,2,,k.
The boundary values may be either user-supplied, or method-calculated, and are denoted by yj, for j=1,2,,k-1.
If the boundary values of the classes are to be method-calculated, then they are determined in one of the following ways:
(a) if k>2, the range of x values is divided into k-2 intervals of equal length, and two extreme intervals, defined by the class boundary values y1,y2,,yk-1;
(b) if k=2, y1=12a+b.
However formed, the values y1,,yk-1 are assumed to be in ascending order. The class frequencies are formed with
  • f1= the number of x values in the interval -,y1
  • fi= the number of x values in the interval yi-1,yi, i=2,,k-1
  • fk= the number of x values in the interval yk-1,,
where [ means inclusive, and ) means exclusive. If the class boundary values are method-calculated and k>2, then f1=fk=0, and y1 and yk-1 are chosen so that y1<a and yk-1>b.
If a frequency distribution is required for a discrete variable, then it is suggested that you supply the class boundary values; method-calculated boundary values may be slightly imprecise (due to the adjustment of y1 and yk-1 outlined above) and cause values very close to a class boundary to be assigned to the wrong class.

References

None.

Error Indicators and Warnings

Errors or warnings detected by the method:
ifail=1
On entry,k<2.
ifail=2
On entry,n<1.
ifail=3
On entry,the user-supplied class boundary values are not in ascending order.
ifail=-9000
An error occured, see message report.
ifail=-8000
Negative dimension for array value
ifail=-6000
Invalid Parameters value

Accuracy

The method used is believed to be stable.

Parallelism and Performance

None.

Further Comments

The time taken by g01ae increases with k and n. It also depends on the distribution of the sample observations.

Example

This example summarises a number of datasets. For each dataset the sample observations and optionally class boundary values are read. g01ae is then called and the frequency distribution and largest and smallest observations printed.

Example program (C#): g01aee.cs

Example program data: g01aee.d

Example program results: g01aee.r

See Also