10.12.2019 Views

Python for Finance

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Time-Series Analysis

Tests of normality

In finance, knowledge about normal distribution is very important for two reasons.

First, stock returns are assumed to follow a normal distribution. Second, the error

terms from a good econometric model should follow a normal distribution with a

zero mean. However, in the real world, this might not be true for stocks. On the other

hand, whether stocks or portfolios follow a normal distribution could be tested by

various so-called normality tests. The Shapiro-Wilk test is one of them. For the first

example, random numbers are drawn from a normal distribution. As a consequence,

the test should confirm that those observations follow a normal distribution:

from scipy import stats

import scipy as sp

sp.random.seed(12345)

mean=0.1

std=0.2

n=5000

ret=sp.random.normal(loc=0,scale=std,size=n)

print 'W-test, and P-value'

print(stats.shapiro(ret))

W-test, and P-value

(0.9995986223220825, 0.4129064679145813)

Assume that our confidence level is 95%, that is, alpha=0.05. The first value of the

result is the test statistic, and the second one is its corresponding P-value. Since

the P-value is so big, much bigger than 0.05, we accept the null hypothesis that the

returns follow a normal distribution. For the second example, random numbers are

drawn from a uniform distribution:

from scipy import stats

import scipy as sp

sp.random.seed(12345)

n=5000

ret=sp.random.uniform(size=n)

print 'W-test, and P-value'

print(stats.shapiro(ret))

W-test, and P-value

(0.9537619352340698, 4.078975800593137e-37)

Since the P-value is close to zero, we reject the null hypothesis. In other words, those

observations do not follow a normal distribution. The third example verifies whether

IBM's returns follow a normal distribution. The last five year's daily data from

Yahoo! Finance is used for the test. The null hypothesis is that IBM's daily returns are

drawn from a normal distribution:

from scipy import stats

from matplotlib.finance import quotes_historical_yahoo_ochl as getData

[ 258 ]

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!