Use the Kolmogorov/Lilliefors test

In this example we are going to perform a Kolmogorov or a Lilliefors goodness-of-fit test for a 1-d continuous distribution.

import openturns as ot

Create the data.

distribution = ot.Normal()
sample = distribution.getSample(50)

Case 1 : the distribution parameters are known.

In the case where the parameters of the distribution are known, we must use the Kolmogorov static method and the distribution to be tested.

result = ot.FittingTest.Kolmogorov(sample, distribution, 0.01)
print("Conclusion=", result.getBinaryQualityMeasure(), "P-value=", result.getPValue())
Conclusion= True P-value= 0.6411393475140432

Test succeeded ?

result.getBinaryQualityMeasure()
True

P-Value associated to the risk

result.getPValue()
0.6411393475140432

Threshold associated to the test.

result.getThreshold()
0.01

Observed value of the statistic.

result.getStatistic()
0.10176815459988908

Case 2 : the distribution parameters are estimated from the sample.

In the case where the parameters of the distribution are estimated from the sample, we must use the Lilliefors static method and the distribution factory to be tested.

ot.ResourceMap.SetAsUnsignedInteger("FittingTest-LillieforsMaximumSamplingSize", 1000)
distributionFactory = ot.NormalFactory()
dist, result = ot.FittingTest.Lilliefors(sample, distributionFactory, 0.01)
print("Conclusion=", result.getBinaryQualityMeasure(), "P-value=", result.getPValue())
Conclusion= True P-value= 0.353
dist
Normal
  • name=Normal
  • dimension=1
  • weight=1
  • range=]-inf (-7.37306), (7.4437) +inf[
  • description=[X0]
  • isParallel=true
  • isCopula=false


Test succeeded ?

result.getBinaryQualityMeasure()
True

P-Value associated to the risk

result.getPValue()
0.353

Threshold associated to the test.

result.getThreshold()
0.01

Observed value of the statistic.

result.getStatistic()
0.09091079601468799