Sample independence testΒΆ

In this example we are going to perform tests to assess whether two 1-d samples are independent or not.

The following tests are available:

  • the ChiSquared test: it tests if both scalar samples (discrete ones only) are independent. If n_{ij} is the number of values of the sample i=(1,2) in the modality 1 \leq j \leq m, \displaystyle n_{i.} = \sum_{j=1}^m n_{ij} \displaystyle n_{.j} = \sum_{i=1}^2 n_{ij}, and the ChiSquared test evaluates the decision variable:

    D^2 = \displaystyle \sum_{i=1}^2 \sum_{j=1}^m \frac{( n_{ij} - \frac{n_{i.} n_{.j}}{n} )^2}{\frac{n_{i.} n_{.j}}{n}}

which tends towards the \chi^2(m-1) distribution. The hypothesis of independence is rejected if D^2 is too high (depending on the p-value threshold).

  • the Pearson test: it tests if there exists a linear relation between two scalar samples which form a gaussian vector (which is equivalent to have a linear correlation coefficient not equal to zero). If both samples are \underline{x} = (x_i)_{1 \leq i \leq n} and \underline{y} = (y_i)_{1 \leq i \leq n}, and \bar{x} = \displaystyle \frac{1}{n}\sum_{i=1}^n x_i and \bar{y} = \displaystyle \frac{1}{n}\sum_{i=1}^n y_i, the Pearson test evaluates the decision variable:

    D = \displaystyle \frac{\sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^n (x_i - \bar{x})^2\sum_{i=1}^n (y_i - \bar{y})^2}}

The variable D tends towards a \chi^2(n-2), under the hypothesis of normality of both samples. The hypothesis of a linear coefficient equal to 0 is rejected (which is equivalent to the independence of the samples) if D is too high (depending on the p-value threshold).

  • the Spearman test: it tests if there exists a monotonous relation between two scalar samples. If both samples are \underline{x} = (x_i)_{1 \leq i \leq n} and \underline{y}= (y_i)_{1 \leq i \leq n},, the Spearman test evaluates the decision variable:

    D = \displaystyle 1-\frac{6\sum_{i=1}^n (r_i - s_i)^2}{n(n^2-1)}

where r_i = rank(x_i) and s_i = rank(y_i). D is such that \sqrt{n-1}D tends towards the gaussian (0,1) distribution.

In [2]:
from __future__ import print_function
import openturns as ot

continuous samples

In [3]:
# Create continuous samples
sample1 = ot.Normal().getSample(100)
sample2 = ot.Normal().getSample(100)
In [9]:
# Using the Pearson test
ot.HypothesisTest.Pearson(sample1, sample2, 0.90)
Out[9]:

class=TestResult name=Unnamed type=TwoSamplePearson binaryQualityMeasure=true p-value threshold=0.1 p-value=0.521269 description=[]

In [11]:
# Using the Spearman test
ot.HypothesisTest.Spearman(sample1, sample2, 0.90)
Out[11]:

class=TestResult name=Unnamed type=TwoSampleSpearman binaryQualityMeasure=true p-value threshold=0.1 p-value=0.719843 description=[]

discrete samples

In [4]:
# Create discrete samples
sample1 = ot.Poisson(0.2).getSample(100)
sample2 = ot.Poisson(0.2).getSample(100)
In [6]:
# Using the Chi2 test
ot.HypothesisTest.ChiSquared(sample1, sample2, 0.90)
Out[6]:

class=TestResult name=Unnamed type=TwoSampleChiSquared binaryQualityMeasure=true p-value threshold=0.1 p-value=0.878545 description=[]