sign_test
Performs a sign test.
Synopsis
#include <imsls.h>
float imsls_f_sign_test (int n_observations, float x[], ..., 0)
The type double function is imsls_d_sign_test.
Required Arguments
int n_observations (Input)
Number of observations.
float x[] (Input)
Array of length n_observations containing the input data.
Return Value
Binomial probability of n_positive_deviations or more positive differences in n_observations − n_zero_deviation trials. Call this value probability. If no option is chosen, the null hypothesis is that the median equals 0.0.
Synopsis with Optional Arguments
#include <imsls.h>
float imsls_f_sign_test (int n_observations, float x[],
IMSLS_PERCENTAGE, float percentage,
IMSLS_PERCENTILE, float percentile,
IMSLS_N_POSITIVE_DEVIATIONS, int *n_positive_deviations,
IMSLS_N_ZERO_DEVIATIONS, int *n_zero_deviations,
0)
Optional Arguments
IMSLS_PERCENTAGE, float percentage (Input)
Value in the range (0, 1). Argument percentile is the 100 × percentage percentile of the population.
Default: percentage = 0.5
IMSLS_PERCENTILE, float percentile (Input)
Hypothesized percentile of the population from which x was drawn.
Default: percentile = 0.0
IMSLS_N_POSITIVE_DEVIATIONS, int *n_positive_deviations (Output)
Number of positive differences x[j − 1] − percentile for j = 1, 2, …, n_observations.
IMSLS_N_ZERO_DEVIATIONS, int *n_zero_deviations (Output)
Number of zero differences (ties) x[j − 1] − percentile for j = 1, 2, …, n_observations.
Description
Function imsls_f_sign_test tests hypotheses about the proportion p of a population that lies below a value q, where p corresponds to argument percentage and q corresponds to argument percentile. In continuous distributions, this can be a test that q is the 100 p-th percentile of the population from which x was obtained. To carry out testing, imsls_f_sign_test tallies the number of values above q in n_positive_deviations. The binomial probability of n_positive_deviations or more values above q is then computed using the proportion p and the sample size n_observations (adjusted for the missing observations and ties).
Hypothesis testing is performed as follows for the usual null and alternative hypotheses:
H0:
Pr(
x ≤ q)
≥ p (the
p-th quantile is at least
q)
H1:
Pr(
x ≤ q) <
p
Reject
H0 if
probability is less than or equal to the significance level
H0:
Pr(
x ≤ q)
≤ p (the
p-th quantile is at least
q)
H1:
Pr(
x ≤ q) >
p
Reject
H0 if
probability is greater than or equal to 1 minus the significance level
H0:
Pr (
x = q)
= p (the
p-th quantile is
q)
H1:
Pr((
x ≤ q) <
p) or
Pr((
x ≤ q) >
p)
Reject
H0 if
probability is less than or equal to half the significance level or greater than or equal to 1 minus half the significance level
The assumptions are as follows:
1. They are independent and identically distributed.
2. Measurement scale is at least ordinal; i.e., an ordering less than, greater than, and equal to exists in the observations.
Many uses for the sign test are possible with various values of p and q. For example, to perform a matched sample test that the difference of the medians of y and z is 0.0, let p = 0.5, q = 0.0, and xi = yi − zi in matched observations y and z. To test that the median difference is c, let q = c.
Examples
Example 1
This example tests the hypothesis that at least 50 percent of a population is negative. Because 0.18 < 0.95, the null hypothesis at the 5-percent level of significance is not rejected.
#include <imsls.h>
int main ()
{
int n_observations = 19;
float probability;
float x[19] = {92.0, 139.0, -6.0, 10.0, 81.0, -11.0, 45.0,
-25.0, -4.0, 22.0, 2.0, 41.0, 13.0, 8.0, 33.0,
45.0, -33.0, -45.0, -12.0};
probability = imsls_f_sign_test(n_observations, x, 0);
printf("probability = %10.6f\n", probability);
}
Output
probability = 0.179642
Example 2
This example tests the null hypothesis that at least 75 percent of a population is negative. Because 0.923 < 0.95, the null hypothesis at the 5-percent level of significance is rejected.
#include <imsls.h>
#include <stdio.h>
int main ()
{
int n_observations = 19;
int n_positive_deviations, n_zero_deviations;
float probability;
float percentage = 0.75;
float percentile = 0.0;
float x[19] = {
92.0, 139.0, -6.0, 10.0, 81.0, -11.0, 45.0, -25.0, -4.0, 22.0,
2.0, 41.0, 13.0, 8.0, 33.0, 45.0, -33.0, -45.0, -12.0
};
probability = imsls_f_sign_test(n_observations, x,
IMSLS_PERCENTAGE, percentage,
IMSLS_PERCENTILE, percentile,
IMSLS_N_POSITIVE_DEVIATIONS, &n_positive_deviations,
IMSLS_N_ZERO_DEVIATIONS, &n_zero_deviations,
0);
printf("probability = %10.6f.\n", probability);
printf("Number of positive deviations is %d.\n",
n_positive_deviations);
printf("Number of ties is %d.\n", n_zero_deviations);
}
Output
probability = 0.922543.
Number of positive deviations is 12.
Number of ties is 0.