scipy.stats.mood

scipy.stats.mood(x, y, axis=0, alternative='two-sided')[source]

Perform Mood’s test for equal scale parameters.

Mood’s two-sample test for scale parameters is a non-parametric test for the null hypothesis that two samples are drawn from the same distribution with the same scale parameter.

Parameters
x, yarray_like

Arrays of sample data.

axisint, optional

The axis along which the samples are tested. x and y can be of different length along axis. If axis is None, x and y are flattened and the test is done on all values in the flattened arrays.

alternative{‘two-sided’, ‘less’, ‘greater’}, optional

Defines the alternative hypothesis. Default is ‘two-sided’. The following options are available:

  • ‘two-sided’: the scales of the distributions underlying x and y are different.

  • ‘less’: the scale of the distribution underlying x is less than the scale of the distribution underlying y.

  • ‘greater’: the scale of the distribution underlying x is greater than the scale of the distribution underlying y.

New in version 1.7.0.

Returns
zscalar or ndarray

The z-score for the hypothesis test. For 1-D inputs a scalar is returned.

p-valuescalar ndarray

The p-value for the hypothesis test.

See also

fligner

A non-parametric test for the equality of k variances

ansari

A non-parametric test for the equality of 2 variances

bartlett

A parametric test for equality of k variances in normal samples

levene

A parametric test for equality of k variances

Notes

The data are assumed to be drawn from probability distributions f(x) and f(x/s) / s respectively, for some probability density function f. The null hypothesis is that s == 1.

For multi-dimensional arrays, if the inputs are of shapes (n0, n1, n2, n3) and (n0, m1, n2, n3), then if axis=1, the resulting z and p values will have shape (n0, n2, n3). Note that n1 and m1 don’t have to be equal, but the other dimensions do.

Examples

>>> from scipy import stats
>>> rng = np.random.default_rng()
>>> x2 = rng.standard_normal((2, 45, 6, 7))
>>> x1 = rng.standard_normal((2, 30, 6, 7))
>>> z, p = stats.mood(x1, x2, axis=1)
>>> p.shape
(2, 6, 7)

Find the number of points where the difference in scale is not significant:

>>> (p > 0.1).sum()
78

Perform the test with different scales:

>>> x1 = rng.standard_normal((2, 30))
>>> x2 = rng.standard_normal((2, 35)) * 10.0
>>> stats.mood(x1, x2, axis=1)
(array([-5.76174136, -6.12650783]), array([8.32505043e-09, 8.98287869e-10]))