# NAG Library Routine Document

## 1Purpose

g03dcf allocates observations to groups according to selected rules. It is intended for use after g03daf.

## 2Specification

Fortran Interface
 Subroutine g03dcf ( typ, nvar, ng, nig, gmn, gc, det, nobs, m, isx, x, ldx, p, ldp, iag, atiq, ati, wk,
 Integer, Intent (In) :: nvar, ng, nig(ng), ldgmn, nobs, m, isx(m), ldx, ldp Integer, Intent (Inout) :: ifail Integer, Intent (Out) :: iag(nobs) Real (Kind=nag_wp), Intent (In) :: gmn(ldgmn,nvar), gc((ng+1)*nvar*(nvar+1)/2), det(ng), x(ldx,m) Real (Kind=nag_wp), Intent (Inout) :: prior(ng), p(ldp,ng), ati(ldp,*) Real (Kind=nag_wp), Intent (Out) :: wk(2*nvar) Logical, Intent (In) :: atiq Character (1), Intent (In) :: typ, equal, priors
#include nagmk26.h
 void g03dcf_ (const char *typ, const char *equal, const char *priors, const Integer *nvar, const Integer *ng, const Integer nig[], const double gmn[], const Integer *ldgmn, const double gc[], const double det[], const Integer *nobs, const Integer *m, const Integer isx[], const double x[], const Integer *ldx, double prior[], double p[], const Integer *ldp, Integer iag[], const logical *atiq, double ati[], double wk[], Integer *ifail, const Charlen length_typ, const Charlen length_equal, const Charlen length_priors)

## 3Description

Discriminant analysis is concerned with the allocation of observations to groups using information from other observations whose group membership is known, ${X}_{t}$; these are called the training set. Consider $p$ variables observed on ${n}_{g}$ populations or groups. Let ${\stackrel{-}{x}}_{j}$ be the sample mean and ${S}_{j}$ the within-group variance-covariance matrix for the $j$th group; these are calculated from a training set of $n$ observations with ${n}_{j}$ observations in the $j$th group, and let ${x}_{k}$ be the $k$th observation from the set of observations to be allocated to the ${n}_{g}$ groups. The observation can be allocated to a group according to a selected rule. The allocation rule or discriminant function will be based on the distance of the observation from an estimate of the location of the groups, usually the group means. A measure of the distance of the observation from the $j$th group mean is given by the Mahalanobis distance, ${D}_{kj}$:
 $Dkj2=xk-x-jTSj-1xk-x-j.$ (1)
If the pooled estimate of the variance-covariance matrix $S$ is used rather than the within-group variance-covariance matrices, then the distance is:
 $Dkj2=xk-x-jTS-1xk-x-j.$ (2)
Instead of using the variance-covariance matrices $S$ and ${S}_{j}$, g03dcf uses the upper triangular matrices $R$ and ${R}_{j}$ supplied by g03daf such that $S={R}^{\mathrm{T}}R$ and ${S}_{j}={R}_{j}^{\mathrm{T}}{R}_{j}$. ${D}_{kj}^{2}$ can then be calculated as ${z}^{\mathrm{T}}z$ where ${{R}^{\mathrm{T}}}_{j}z=\left({x}_{k}-{x}_{j}\right)$ or ${R}^{\mathrm{T}}z=\left({x}_{k}-x\right)$ as appropriate.
In addition to the distances, a set of prior probabilities of group membership, ${\pi }_{j}$, for $j=1,2,\dots ,{n}_{g}$, may be used, with $\sum {\pi }_{j}=1$. The prior probabilities reflect your view as to the likelihood of the observations coming from the different groups. Two common cases for prior probabilities are ${\pi }_{1}={\pi }_{2}=\cdots ={\pi }_{{n}_{g}}$, that is, equal prior probabilities, and ${\pi }_{\mathit{j}}={n}_{\mathit{j}}/n$, for $\mathit{j}=1,2,\dots ,{n}_{g}$, that is, prior probabilities proportional to the number of observations in the groups in the training set.
g03dcf uses one of four allocation rules. In all four rules the $p$ variables are assumed to follow a multivariate Normal distribution with mean ${\mu }_{j}$ and variance-covariance matrix ${\Sigma }_{j}$ if the observation comes from the $j$th group. The different rules depend on whether or not the within-group variance-covariance matrices are assumed equal, i.e., ${\Sigma }_{1}={\Sigma }_{2}=\cdots ={\Sigma }_{{n}_{g}}$, and whether a predictive or estimative approach is used. If $p\left({x}_{k}\mid {\mu }_{j},{\Sigma }_{j}\right)$ is the probability of observing the observation ${x}_{k}$ from group $j$, then the posterior probability of belonging to group $j$ is:
 $p j∣xk,μj,Σj∝ p xk∣ μj ,Σj πj.$ (3)
In the estimative approach, the arguments ${\mu }_{j}$ and ${\Sigma }_{j}$ in (3) are replaced by their estimates calculated from ${X}_{t}$. In the predictive approach, a non-informative prior distribution is used for the arguments and a posterior distribution for the arguments, $p\left({\mu }_{j},{\Sigma }_{j}\mid {X}_{t}\right)$, is found. A predictive distribution is then obtained by integrating $p\left(j\mid {x}_{k},{\mu }_{j},{\Sigma }_{j}\right)p\left({\mu }_{j},{\Sigma }_{j}\mid X\right)$ over the argument space. This predictive distribution then replaces $p\left({x}_{k}\mid {\mu }_{j},{\Sigma }_{j}\right)$ in (3). See Aitchison and Dunsmore (1975), Aitchison et al. (1977) and Moran and Murphy (1979) for further details.
The observation is allocated to the group with the highest posterior probability. Denoting the posterior probabilities, $p\left(j\mid {x}_{k},{\mu }_{j},{\Sigma }_{j}\right)$, by ${q}_{j}$, the four allocation rules are:
(i) Estimative with equal variance-covariance matrices – Linear Discrimination
 $log⁡qj∝-12Dkj2+log⁡πj$
(ii) Estimative with unequal variance-covariance matrices – Quadratic Discrimination
 $log⁡qj∝-12Dkj2+log⁡πj-12logSj$
(iii) Predictive with equal variance-covariance matrices
 $q j - 1 ∝ n j +1 / n j p / 2 1 + n j / n - n g n j +1 D k j 2 n +1 - n g / 2$
(iv) Predictive with unequal variance-covariance matrices
 $q j - 1 ∝ C n j 2 - 1 / n j S j p / 2 1 + n j / n j 2 - 1 D k j 2 n j / 2 ,$
where
 $C=Γ12nj-p Γ12nj .$
In the above the appropriate value of ${D}_{kj}^{2}$ from (1) or (2) is used. The values of the ${q}_{j}$ are standardized so that,
 $∑j=1ngqj=1.$
Moran and Murphy (1979) show the similarity between the predictive methods and methods based upon likelihood ratio tests.
In addition to allocating the observation to a group, g03dcf computes an atypicality index, ${I}_{j}\left({x}_{k}\right)$. The predictive atypicality index is returned, irrespective of the value of the parameter typ. This represents the probability of obtaining an observation more typical of group $j$ than the observed ${x}_{k}$ (see Aitchison and Dunsmore (1975) and Aitchison et al. (1977)). The atypicality index is computed for unequal within-group variance-covariance matrices as:
 $Ijxk=PB≤z:12p,12nj-p$
where $P\left(B\le \beta :a,b\right)$ is the lower tail probability from a beta distribution and
 $z=Dkj2/Dkj2+nj2-1/nj,$
and for equal within-group variance-covariance matrices as:
 $Ijxk=PB≤z : 12p,12n-ng-p+ 1,$
with
 $z=Dkj2/Dkj2+n-ngnj+1/nj.$
If ${I}_{j}\left({x}_{k}\right)$ is close to $1$ for all groups it indicates that the observation may come from a grouping not represented in the training set. Moran and Murphy (1979) provide a frequentist interpretation of ${I}_{j}\left({x}_{k}\right)$.

## 4References

Aitchison J and Dunsmore I R (1975) Statistical Prediction Analysis Cambridge
Aitchison J, Habbema J D F and Kay J W (1977) A critical comparison of two methods of statistical discrimination Appl. Statist. 26 15–25
Kendall M G and Stuart A (1976) The Advanced Theory of Statistics (Volume 3) (3rd Edition) Griffin
Krzanowski W J (1990) Principles of Multivariate Analysis Oxford University Press
Moran M A and Murphy B J (1979) A closer look at two alternative methods of statistical discrimination Appl. Statist. 28 223–232
Morrison D F (1967) Multivariate Statistical Methods McGraw–Hill

## 5Arguments

1:     $\mathbf{typ}$ – Character(1)Input
On entry: whether the estimative or predictive approach is used.
${\mathbf{typ}}=\text{'E'}$
The estimative approach is used.
${\mathbf{typ}}=\text{'P'}$
The predictive approach is used.
Constraint: ${\mathbf{typ}}=\text{'E'}$ or $\text{'P'}$.
2:     $\mathbf{equal}$ – Character(1)Input
On entry: indicates whether or not the within-group variance-covariance matrices are assumed to be equal and the pooled variance-covariance matrix used.
${\mathbf{equal}}=\text{'E'}$
The within-group variance-covariance matrices are assumed equal and the matrix $R$ stored in the first $p\left(p+1\right)/2$ elements of gc is used.
${\mathbf{equal}}=\text{'U'}$
The within-group variance-covariance matrices are assumed to be unequal and the matrices ${R}_{\mathit{i}}$, for $\mathit{i}=1,2,\dots ,{n}_{g}$, stored in the remainder of gc are used.
Constraint: ${\mathbf{equal}}=\text{'E'}$ or $\text{'U'}$.
3:     $\mathbf{priors}$ – Character(1)Input
On entry: indicates the form of the prior probabilities to be used.
${\mathbf{priors}}=\text{'E'}$
Equal prior probabilities are used.
${\mathbf{priors}}=\text{'P'}$
Prior probabilities proportional to the group sizes in the training set, ${n}_{j}$, are used.
${\mathbf{priors}}=\text{'I'}$
The prior probabilities are input in prior.
Constraint: ${\mathbf{priors}}=\text{'E'}$, $\text{'I'}$ or $\text{'P'}$.
4:     $\mathbf{nvar}$ – IntegerInput
On entry: $p$, the number of variables in the variance-covariance matrices.
Constraint: ${\mathbf{nvar}}\ge 1$.
5:     $\mathbf{ng}$ – IntegerInput
On entry: the number of groups, ${n}_{g}$.
Constraint: ${\mathbf{ng}}\ge 2$.
6:     $\mathbf{nig}\left({\mathbf{ng}}\right)$ – Integer arrayInput
On entry: the number of observations in each group in the training set, ${n}_{j}$.
Constraints:
• if ${\mathbf{equal}}=\text{'E'}$, ${\mathbf{nig}}\left(\mathit{j}\right)>0$ and $\sum _{\mathit{j}=1}^{{n}_{g}}{\mathbf{nig}}\left(\mathit{j}\right)>{\mathbf{ng}}+{\mathbf{nvar}}$, for $\mathit{j}=1,2,\dots ,{n}_{g}$;
• if ${\mathbf{equal}}=\text{'U'}$, ${\mathbf{nig}}\left(\mathit{j}\right)>{\mathbf{nvar}}$, for $\mathit{j}=1,2,\dots ,{n}_{g}$.
7:     $\mathbf{gmn}\left({\mathbf{ldgmn}},{\mathbf{nvar}}\right)$ – Real (Kind=nag_wp) arrayInput
On entry: the $\mathit{j}$th row of gmn contains the means of the $p$ variables for the $\mathit{j}$th group, for $\mathit{j}=1,2,\dots ,{n}_{j}$. These are returned by g03daf.
8:     $\mathbf{ldgmn}$ – IntegerInput
On entry: the first dimension of the array gmn as declared in the (sub)program from which g03dcf is called.
Constraint: ${\mathbf{ldgmn}}\ge {\mathbf{ng}}$.
9:     $\mathbf{gc}\left(\left({\mathbf{ng}}+1\right)×{\mathbf{nvar}}×\left({\mathbf{nvar}}+1\right)/2\right)$ – Real (Kind=nag_wp) arrayInput
On entry: the first $p\left(p+1\right)/2$ elements of gc should contain the upper triangular matrix $R$ and the next ${n}_{g}$ blocks of $p\left(p+1\right)/2$ elements should contain the upper triangular matrices ${R}_{j}$.
All matrices must be stored packed by column. These matrices are returned by g03daf. If ${\mathbf{equal}}=\text{'E'}$ only the first $p\left(p+1\right)/2$ elements are referenced, if ${\mathbf{equal}}=\text{'U'}$ only the elements $p\left(p+1\right)/2+1$ to $\left({n}_{g}+1\right)p\left(p+1\right)/2$ are referenced.
Constraints:
• if ${\mathbf{equal}}=\text{'E'}$, the diagonal elements of $R$ must be $\text{}\ne 0.0$;
• if ${\mathbf{equal}}=\text{'U'}$, the diagonal elements of the ${R}_{\mathit{j}}$ must be $\text{}\ne 0.0$, for $\mathit{j}=1,2,\dots ,{n}_{g}$.
10:   $\mathbf{det}\left({\mathbf{ng}}\right)$ – Real (Kind=nag_wp) arrayInput
On entry: if ${\mathbf{equal}}=\text{'U'}$. the logarithms of the determinants of the within-group variance-covariance matrices as returned by g03daf. Otherwise det is not referenced.
11:   $\mathbf{nobs}$ – IntegerInput
On entry: the number of observations in x which are to be allocated.
Constraint: ${\mathbf{nobs}}\ge 1$.
12:   $\mathbf{m}$ – IntegerInput
On entry: the number of variables in the data array x.
Constraint: ${\mathbf{m}}\ge {\mathbf{nvar}}$.
13:   $\mathbf{isx}\left({\mathbf{m}}\right)$ – Integer arrayInput
On entry: ${\mathbf{isx}}\left(l\right)$ indicates if the $l$th variable in x is to be included in the distance calculations.
If ${\mathbf{isx}}\left(\mathit{l}\right)>0$, the $\mathit{l}$th variable is included, for $\mathit{l}=1,2,\dots ,{\mathbf{m}}$; otherwise the $\mathit{l}$th variable is not referenced.
Constraint: ${\mathbf{isx}}\left(l\right)>0$ for nvar values of $l$.
14:   $\mathbf{x}\left({\mathbf{ldx}},{\mathbf{m}}\right)$ – Real (Kind=nag_wp) arrayInput
On entry: ${\mathbf{x}}\left(\mathit{k},\mathit{l}\right)$ must contain the $\mathit{k}$th observation for the $\mathit{l}$th variable, for $\mathit{k}=1,2,\dots ,{\mathbf{nobs}}$ and $\mathit{l}=1,2,\dots ,{\mathbf{m}}$.
15:   $\mathbf{ldx}$ – IntegerInput
On entry: the first dimension of the array x as declared in the (sub)program from which g03dcf is called.
Constraint: ${\mathbf{ldx}}\ge {\mathbf{nobs}}$.
16:   $\mathbf{prior}\left({\mathbf{ng}}\right)$ – Real (Kind=nag_wp) arrayInput/Output
On entry: if ${\mathbf{priors}}=\text{'I'}$, the prior probabilities for the ${n}_{g}$ groups.
Constraint: if ${\mathbf{priors}}=\text{'I'}$, ${\mathbf{prior}}\left(\mathit{j}\right)>0.0$ and , for $\mathit{j}=1,2,\dots ,{n}_{g}$.
On exit: if ${\mathbf{priors}}=\text{'P'}$, the computed prior probabilities in proportion to group sizes for the ${n}_{g}$ groups.
If ${\mathbf{priors}}=\text{'I'}$, the input prior probabilities will be unchanged.
If ${\mathbf{priors}}=\text{'E'}$, prior is not set.
17:   $\mathbf{p}\left({\mathbf{ldp}},{\mathbf{ng}}\right)$ – Real (Kind=nag_wp) arrayOutput
On exit: ${\mathbf{p}}\left(\mathit{k},\mathit{j}\right)$ contains the posterior probability ${p}_{\mathit{k}\mathit{j}}$ for allocating the $\mathit{k}$th observation to the $\mathit{j}$th group, for $\mathit{k}=1,2,\dots ,{\mathbf{nobs}}$ and $\mathit{j}=1,2,\dots ,{n}_{g}$.
18:   $\mathbf{ldp}$ – IntegerInput
On entry: the first dimension of the array ati and the first dimension of the array p as declared in the (sub)program from which g03dcf is called.
Constraint: ${\mathbf{ldp}}\ge {\mathbf{nobs}}$.
19:   $\mathbf{iag}\left({\mathbf{nobs}}\right)$ – Integer arrayOutput
On exit: the groups to which the observations have been allocated.
20:   $\mathbf{atiq}$ – LogicalInput
On entry: atiq must be .TRUE. if atypicality indices are required. If atiq is .FALSE. the array ati is not set.
21:   $\mathbf{ati}\left({\mathbf{ldp}},*\right)$ – Real (Kind=nag_wp) arrayOutput
Note: the second dimension of the array ati must be at least ${\mathbf{ng}}$ if ${\mathbf{atiq}}=\mathrm{.TRUE.}$, and at least $1$ otherwise.
On exit: if atiq is .TRUE., ${\mathbf{ati}}\left(\mathit{k},\mathit{j}\right)$ will contain the predictive atypicality index for the $\mathit{k}$th observation with respect to the $\mathit{j}$th group, for $\mathit{k}=1,2,\dots ,{\mathbf{nobs}}$ and $\mathit{j}=1,2,\dots ,{n}_{g}$.
If atiq is .FALSE., ati is not set.
22:   $\mathbf{wk}\left(2×{\mathbf{nvar}}\right)$ – Real (Kind=nag_wp) arrayWorkspace
23:   $\mathbf{ifail}$ – IntegerInput/Output
On entry: ifail must be set to $0$, $-1\text{​ or ​}1$. If you are unfamiliar with this argument you should refer to Section 3.4 in How to Use the NAG Library and its Documentation for details.
For environments where it might be inappropriate to halt program execution when an error is detected, the value $-1\text{​ or ​}1$ is recommended. If the output of error messages is undesirable, then the value $1$ is recommended. Otherwise, if you are not familiar with this argument, the recommended value is $0$. When the value $-\mathbf{1}\text{​ or ​}\mathbf{1}$ is used it is essential to test the value of ifail on exit.
On exit: ${\mathbf{ifail}}={\mathbf{0}}$ unless the routine detects an error or a warning has been flagged (see Section 6).

## 6Error Indicators and Warnings

If on entry ${\mathbf{ifail}}=0$ or $-1$, explanatory error messages are output on the current error message unit (as defined by x04aaf).
Errors or warnings detected by the routine:
${\mathbf{ifail}}=1$
 On entry, ${\mathbf{nvar}}<1$, or ${\mathbf{ng}}<2$, or ${\mathbf{nobs}}<1$, or ${\mathbf{m}}<{\mathbf{nvar}}$, or ${\mathbf{ldgmn}}<{\mathbf{ng}}$, or ${\mathbf{ldx}}<{\mathbf{nobs}}$, or ${\mathbf{ldp}}<{\mathbf{nobs}}$, or ${\mathbf{typ}}\ne \text{'E'}$ or ‘p’, or ${\mathbf{equal}}\ne \text{'E'}$ or ‘U’, or ${\mathbf{priors}}\ne \text{'E'}$, ‘I’ or ‘p’.
${\mathbf{ifail}}=2$
 On entry, the number of variables indicated by isx is not equal to nvar, or ${\mathbf{equal}}=\text{'E'}$ and ${\mathbf{nig}}\left(j\right)\le 0$, for some $j$, or ${\mathbf{equal}}=\text{'E'}$ and $\sum _{j=1}^{{n}_{g}}{\mathbf{nig}}\left(j\right)\le {\mathbf{ng}}+{\mathbf{nvar}}$, or ${\mathbf{equal}}=\text{'U'}$ and ${\mathbf{nig}}\left(j\right)\le {\mathbf{nvar}}$ for some $j$.
${\mathbf{ifail}}=3$
 On entry, ${\mathbf{priors}}=\text{'I'}$ and ${\mathbf{prior}}\left(j\right)\le 0.0$ for some $j$, or ${\mathbf{priors}}=\text{'I'}$ and $\sum _{j=1}^{{n}_{g}}{\mathbf{prior}}\left(j\right)$ is not within  of $1$.
${\mathbf{ifail}}=4$
 On entry, ${\mathbf{equal}}=\text{'E'}$ and a diagonal element of $R$ is zero, or ${\mathbf{equal}}=\text{'U'}$ and a diagonal element of ${R}_{j}$ for some $j$ is zero.
${\mathbf{ifail}}=-99$
See Section 3.9 in How to Use the NAG Library and its Documentation for further information.
${\mathbf{ifail}}=-399$
Your licence key may have expired or may not have been installed correctly.
See Section 3.8 in How to Use the NAG Library and its Documentation for further information.
${\mathbf{ifail}}=-999$
Dynamic memory allocation failed.
See Section 3.7 in How to Use the NAG Library and its Documentation for further information.

## 7Accuracy

The accuracy of the returned posterior probabilities will depend on the accuracy of the input $R$ or ${R}_{j}$ matrices. The atypicality index should be accurate to four significant places.

## 8Parallelism and Performance

g03dcf makes calls to BLAS and/or LAPACK routines, which may be threaded within the vendor library used by this implementation. Consult the documentation for the vendor library for further information.
Please consult the X06 Chapter Introduction for information on how to control and interrogate the OpenMP environment used within this routine. Please also consult the Users' Note for your implementation for any additional implementation-specific information.

The distances ${D}_{kj}^{2}$ can be computed using g03dbf if other forms of discrimination are required.

## 10Example

The data, taken from Aitchison and Dunsmore (1975), is concerned with the diagnosis of three ‘types’ of Cushing's syndrome. The variables are the logarithms of the urinary excretion rates (mg/24hr) of two steroid metabolites. Observations for a total of $21$ patients are input and the group means and $R$ matrices are computed by g03daf. A further six observations of unknown type are input and allocations made using the predictive approach and under the assumption that the within-group covariance matrices are not equal. The posterior probabilities of group membership, ${q}_{j}$, and the atypicality index are printed along with the allocated group. The atypicality index shows that observations $5$ and $6$ do not seem to be typical of the three types present in the initial $21$ observations.

### 10.1Program Text

Program Text (g03dcfe.f90)

### 10.2Program Data

Program Data (g03dcfe.d)

### 10.3Program Results

Program Results (g03dcfe.r)

© The Numerical Algorithms Group Ltd, Oxford, UK. 2017