SciPy Statistical Significance Tests
What is Statistical Significance Test?
In statistics, statistical significance means that the result that was produced has a reason behind it, it was not produced randomly, or by chance.
SciPy provides us with a module called scipy.stats
, which has functions for performing statistical significance tests.
Here are some techniques and keywords that are important when performing such tests:
Hypothesis in Statistics
Hypothesis is an assumption about a parameter in population.
Null Hypothesis
It assumes that the observation is not statistically significant.
Alternate Hypothesis
It assumes that the observations are due to some reason.
It's alternate to Null Hypothesis.
Example:
For an assessment of a student we would take:
"student is worse than average" - as a null hypothesis, and:
"student is better than average" - as an alternate hypothesis.
One tailed test
When our hypothesis is testing for one side of the value only, it is called "one tailed test".
Example:
For the null hypothesis:
"the mean is equal to k", we can have alternate hypothesis:
"the mean is less than k", or:
"the mean is greater than k"
Two tailed test
When our hypothesis is testing for both side of the values.
Example:
For the null hypothesis:
"the mean is equal to k", we can have alternate hypothesis:
"the mean is not equal to k"
In this case the mean is less than, or greater than k, and both sides are to be checked.
Alpha value
Alpha value is the level of significance.
Example:
How close to extremes the data must be for null hypothesis to be rejected.
It is usually taken as 0.01, 0.05, or 0.1.
P value
P value tells how close to extreme the data actually is.
P value and alpha values are compared to establish the statistical significance.
If p value <= alpha we reject the null hypothesis and say that the data is statistically significant. otherwise we accept the null hypothesis.
T-Test
T-tests are used to determine if there is significant deference between means of two variables and lets us know if they belong to the same distribution.
It is a two tailed test.
The function ttest_ind()
takes two samples of same size and produces a tuple of t-statistic and p-value.
Example
Find if the given values v1 and v2 are from same distribution:
import numpy as np
from scipy.stats import ttest_ind
v1 = np.random.normal(size=100)
v2 = np.random.normal(size=100)
res = ttest_ind(v1, v2)
print(res)
Result:
Ttest_indResult(statistic=0.40833510339674095, pvalue=0.68346891833752133)Try it Yourself »
If you want to return only the p-value, use the pvalue
property:
KS-Test
KS test is used to check if given values follow a distribution.
The function takes the value to be tested, and the CDF as two parameters.
A CDF can be either a string or a callable function that returns the probability.
It can be used as a one tailed or two tailed test.
By default it is two tailed. We can pass parameter alternative as a string of one of two-sided, less, or greater.
Example
Find if the given value follows the normal distribution:
import numpy as np
from scipy.stats import kstest
v = np.random.normal(size=100)
res = kstest(v, 'norm')
print(res)
Result:
KstestResult(statistic=0.047798701221956841, pvalue=0.97630967161777515)Try it Yourself »
Statistical Description of Data
In order to see a summary of values in an array, we can use the describe()
function.
It returns the following description:
- number of observations (nobs)
- minimum and maximum values = minmax
- mean
- variance
- skewness
- kurtosis
Example
Show statistical description of the values in an array:
import numpy as np
from scipy.stats import describe
v = np.random.normal(size=100)
res = describe(v)
print(res)
Result:
DescribeResult( nobs=100, minmax=(-2.0991855456740121, 2.1304142707414964), mean=0.11503747689121079, variance=0.99418092655064605, skewness=0.013953400984243667, kurtosis=-0.671060517912661 )Try it Yourself »
Normality Tests (Skewness and Kurtosis)
Normality tests are based on the skewness and kurtosis.
The normaltest()
function returns p value for the null hypothesis:
"x comes from a normal distribution".
Skewness:
A measure of symmetry in data.
For normal distributions it is 0.
If it is negative, it means the data is skewed left.
If it is positive it means the data is skewed right.
Kurtosis:
A measure of whether the data is heavy or lightly tailed to a normal distribution.
Positive kurtosis means heavy tailed.
Negative kurtosis means lightly tailed.
Example
Find skewness and kurtosis of values in an array:
import numpy as np
from scipy.stats import skew, kurtosis
v = np.random.normal(size=100)
print(skew(v))
print(kurtosis(v))
Result:
0.11168446328610283 -0.1879320563260931Try it Yourself »
Example
Find if the data comes from a normal distribution:
import numpy as np
from scipy.stats import normaltest
v = np.random.normal(size=100)
print(normaltest(v))
Result:
NormaltestResult(statistic=4.4783745697002848, pvalue=0.10654505998635538)Try it Yourself »