ad_normality_test

Performs an AndersonDarling test for normality.

Synopsis

#include <imsls.h>

float imsls_f_ad_normality_test (int nobs, float x[], … , 0)

The type double function is imsls_d_ad_normality_test.

Required Arguments

int nobs (Input)
Number of observations. nobs must be greater than or equal to 3.

float x[] (Input)
Vector of length nobs containing the observations.

Return Value

The pvalue for the AndersonDarling test of normality.

Synopsis with Optional Arguments

#include <imsls.h>

float imsls_f_ad_normality_test (int nobs, float x[],

IMSLS_STAT, float *adstat,

IMSLS_N_MISSING, int *nmiss,

0)

Optional Arguments

IMSLS_STAT, float *adstat (Output)
The AndersonDarling statistic.

IMSLS_N_MISSING, int *nmiss (Output)
The number of missing observations.

Description

Given a data sample {Xi= 1 .. n}, where n = nobs and Xi = x[i-1], function imsls_f_ad_normality_test computes the Anderson-Darling (AD) normality statistic A = adstat and the corresponding Return Value (pvalue) P = P == {probability that a normally distributed n element sample would have an AD statistic > A}. If P is sufficiently small (e.g. < .05), then the AD test indicates that the null hypothesis that the data sample is normally-distributed should be rejected. A is calculated:

 

where and and s are the sample mean and standard deviation respectively. P is calculated by first transforming A to an “nadjusted” statistic A*:

 

and then calculating P in terms of A* using a parabolic approximation taken from Table 4.9 in Stephens (1986).

Example

The following example is taken from Conover (1980, pages 364 and 195). The data consists of 50 twodigit numbers taken from a telephone book. The AD test fails to reject the null hypothesis of normality at the .05 level of significance.

 

#include <imsls.h>

#include <stdio.h>

 

int main()

{

int nobs = 50, nmiss;

float p_value, adstat;

 

float x[] = {

23.0, 36.0, 54.0, 61.0, 73.0, 23.0, 37.0, 54.0, 61.0, 73.0,

24.0, 40.0, 56.0, 62.0, 74.0, 27.0, 42.0, 57.0, 63.0, 75.0,

29.0, 43.0, 57.0, 64.0, 77.0, 31.0, 43.0, 58.0, 65.0, 81.0,

32.0, 44.0, 58.0, 66.0, 87.0, 33.0, 45.0, 58.0, 68.0, 89.0,

33.0, 48.0, 58.0, 68.0, 93.0, 35.0, 48.0, 59.0, 70.0, 97.0};

 

p_value = imsls_f_ad_normality_test (nobs, x,

IMSLS_STAT, &adstat,

IMSLS_N_MISSING, &nmiss,

0);

 

printf ("Anderson-Darling statistic = %11.4f \n", adstat);

printf ("p-value = %11.4f\n", p_value);

printf ("# missing values = %4d\n", nmiss);

}

Output

 

Anderson-Darling statistic = 0.3339

p-value = 0.5024

# missing values = 0

Informational Errors

IMSLS_PVAL_UNDERFLOW

The pvalue has fallen below the minimum value of # for which its calculation has any accuracy; ZERO is returned.

Fatal Errors

IMSLS_TOO_MANY_MISSING

After removing the missing observations only 2 observations remain. The test cannot proceed.