How to correctly use scipy's skew and kurtosis functions?

Viewed 88358

The skewness is a parameter to measure the symmetry of a data set and the kurtosis to measure how heavy its tails are compared to a normal distribution, see for example here.

scipy.stats provides an easy way to calculate these two quantities, see scipy.stats.kurtosis and scipy.stats.skew.

In my understanding, the skewness and kurtosis of a normal distribution should both be 0 using the functions just mentioned. That is, however, not the case with my code:

import numpy as np
from scipy.stats import kurtosis
from scipy.stats import skew

x = np.linspace( -5, 5, 1000 )
y = 1./(np.sqrt(2.*np.pi)) * np.exp( -.5*(x)**2  )  # normal distribution

print( 'excess kurtosis of normal distribution (should be 0): {}'.format( kurtosis(y) ))
print( 'skewness of normal distribution (should be 0): {}'.format( skew(y) ))

The output is:

excess kurtosis of normal distribution (should be 0): -0.307393087742

skewness of normal distribution (should be 0): 1.11082371392

What am I doing wrong ?

The versions I am using are

python: 2.7.6
scipy : 0.17.1
numpy : 1.12.1
2 Answers
Related