Performs a Cramer-von Mises test for normality.
#include <imsls.h>
float imsls_f_cvm_normality_test (int nobs, float x[], … , 0)
The type double function is imsls_d_cvm_normality_test.
int nobs
(Input)
Number of observations. (Input)
nobs must be greater
than or equal to 3.
float *x
(Input)
Vector of length nobs containing the
observations.
The p-value for the Cramer-von Mises test of normality.
#include <imsls.h>
float
imsls_f_cvm_normality_test (int
nobs,
float x[],
IMSLS_STAT,
float
*cvmstat,
IMSLS_N_MISSING,
int
*nmiss,
0)
IMSLS_STAT, float *cvmstat,
(Output)
The Cramer-von Mises statistic.
IMSLS_N_MISSING, int *nmiss,
(Output)
The number of missing observations.
Given a data sample {Xi, i=1 .. n}, where n = nobs and Xi = x[i-1], function imsls_f_cvm_normality_test computes the Cramer-von Mises (CvM) normality statistic W = cvmstat and the corresponding Return Value (p-value) P = P == {probability that a normally distributed n element sample would have a CvM statistic > W}. If P is sufficiently small (e.g. P < .05), then the CvM test indicates that the null hypothesis that the data sample is normally-distributed should be rejected. W is calculated:
Where is the cumulative distribution function of standard normal N(0,1) distribution, , and and s are the sample mean and standard deviation respectively. P is calculated by first transforming W to an “n-adjusted” statistic W*:
and then calculating P in terms of W* using a parabolic approximation taken from Table 4.9 in Stephens (1986).
This example is taken from Conover (1980, pages 364 and 195). The data consists of 50 two digit numbers taken from a telephone book. The CvM 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, cvmstat;
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_cvm_normality_test (nobs, x,
IMSLS_STAT, &cvmstat,
IMSLS_N_MISSING, &nmiss,
0);
printf ("Cramer-von Mises statistic = %11.4f \n", cvmstat);
printf ("p-value = %11.4f\n", p_value);
printf ("# missing values = %4d\n", nmiss);
}
Cramer-von Mises statistic = 0.0520
p-value = 0.4747
# missing values = 0
IMSLS_PVAL_UNDERFLOW |
The p-value has fallen below the minimum value of # for which its calculation has any accuracy; ZERO is returned. |
IMSLS_TOO_MANY_MISSING |
After removing the missing observations only 2 observations remain. The test cannot proceed. |