signTest

Performs a sign test.

Synopsis

signTest (x)

Required Arguments

float x[] (Input)
Array of length nObservations containing the input data.

Return Value

Binomial probability of nPositiveDeviations or more positive differences in nObservationsnZeroDeviation trials. Call this value probability. If no option is chosen, the null hypothesis is that the median equals 0.0.

Optional Arguments

percentage, float (Input)

Value in the range (0, 1). Argument percentile is the 100 × percentage percentile of the population.

Default: percentage = 0.5

percentile, float (Input)

Hypothesized percentile of the population from which x was drawn.

Default: percentile = 0.0

nPositiveDeviations (Output)
Number of positive differences x[j − 1] − percentile for j = 1, 2, …, nObservations.
nZeroDeviations (Output)
Number of zero differences (ties) x[j − 1] − percentile for j = 1, 2, …, nObservations.

Description

Function signTest 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, signTest tallies the number of values above q in nPositiveDeviations. The binomial probability of nPositiveDeviations or more values above q is then computed using the proportion p and the sample size nObservations (adjusted for the missing observations and ties).

Hypothesis testing is performed as follows for the usual null and alternative hypotheses:

  • \(H_0\): Pr(xq) ≥ p (the p-th quantile is at least q)

    \(H_1\): Pr(xq) < pReject \(H_0\) if probability is less than or equal to the significance level

  • \(H_0\): Pr(xq) ≤ p (the p-th quantile is at least q)

    \(H_1\): Pr(xq) > pReject \(H_0\) if probability is greater than or equal to 1 minus the significance level

  • \(H_0\): Pr (x = q) = p (the p-th quantile is q)

    \(H_1\): Pr((xq) < p) or Pr((xq) > p)

    Reject \(H_0\) 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 \(x_i=y_i-z_i\) 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.

from __future__ import print_function
from numpy import *
from pyimsl.stat.signTest import signTest

n_observations = 19
x = [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 = signTest(x)

print("probability = %10.6f" % (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.

from __future__ import print_function
from numpy import *
from pyimsl.stat.signTest import signTest

per = 0.75
tile = 0.0
n_positive_deviations = []
n_zero_deviations = []
x = array([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 = signTest(x, percentage=per, percentile=tile,
                       nPositiveDeviations=n_positive_deviations,
                       nZeroDeviations=n_zero_deviations)

print("probability = %10.6f." % probability)
print("Number of positive deviations is %d." % n_positive_deviations[0])
print("Number of ties is %d." % n_zero_deviations[0])

Output

probability =   0.922543.
Number of positive deviations is 12.
Number of ties is 0.