# Standard Normal Curve

## Contents

# 8.2. Standard Normal Curve#

The *normal* or *Gaussian* curves are a family of bell-shaped curves named for the German mathematician and scientist Carl Friedrich Gauss.

Here are few members of the family. You can see that there really is only one bell shape; the differences between the curves are due to where they are centered and how wide the bells are. In other words, the differences are due to the scales on which the variables are being measured.

In essence, therefore, there is only one normal curve – all the others can be derived by changing the origin and the units of measurement.

That all-important normal curve is called the *standard normal* curve. This section is a workout in using the curve. In the next section, we will use these skills and the Central Limit Theorem to approximate probabilities.

## 8.2.1. The Standard Normal Curve#

The standard normal curve is defined by

That’s the lower case Greek letter \(\phi\). The figure below shows the graph of \(\phi\).

Some properties of the curve are clear from the graph or equation. Others need more work to establish. In this course it is enough that you observe what you can and leave the proofs to another class.

The curve is bell-shaped and symmetric about 0.

The points of inflection are at \(z=-1\) and \(z=1\).

Even though the curve is defined over the entire number line, it is pretty close to 0 for \(\vert z \vert > 3\).

The curve can be thought of as an approximation to a probability histogram, because the total area under the curve is 1.

## 8.2.2. The Standard Normal ‘CDF’#

If you think of the standard normal curve as a probability histogram, then it is natural to think of areas under the curve as probabilities. In particular, the function \(\Phi\) defined by

returns all the area under the curve to the left of \(z\), and is called the ‘cdf’. At the moment, think of it as a cdf by analogy with the discrete cumulative distribution functions that you have seen before.

```
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_1792\1596728757.py in <module>
4 plt.ylim(-0.01, 0.45)
5 plt.plot([-4, 4], [0, 0], color='k', lw=1)
----> 6 plt.yticks(np.arange(0, 0.401, 0.05), np.array(7*['']))
7 plt.text(0, -0.025, '$0$')
8 plt.text(1.2, -0.025, '$z$')
~\Anaconda3\lib\site-packages\matplotlib\pyplot.py in yticks(ticks, labels, **kwargs)
1853 l.update(kwargs)
1854 else:
-> 1855 labels = ax.set_yticklabels(labels, **kwargs)
1856
1857 return locs, labels
~\Anaconda3\lib\site-packages\matplotlib\axes\_base.py in wrapper(self, *args, **kwargs)
73
74 def wrapper(self, *args, **kwargs):
---> 75 return get_method(self)(*args, **kwargs)
76
77 wrapper.__module__ = owner.__module__
~\Anaconda3\lib\site-packages\matplotlib\axis.py in _set_ticklabels(self, labels, fontdict, minor, **kwargs)
1796 if fontdict is not None:
1797 kwargs.update(fontdict)
-> 1798 return self.set_ticklabels(labels, minor=minor, **kwargs)
1799
1800 def _set_tick_locations(self, ticks, *, minor=False):
~\Anaconda3\lib\site-packages\matplotlib\axis.py in set_ticklabels(self, ticklabels, minor, **kwargs)
1719 if len(locator.locs) != len(ticklabels) and len(ticklabels) != 0:
1720 raise ValueError(
-> 1721 "The number of FixedLocator locations"
1722 f" ({len(locator.locs)}), usually from a call to"
1723 " set_ticks, does not match"
ValueError: The number of FixedLocator locations (9), usually from a call to set_ticks, does not match the number of ticklabels (7).
```

The area under the curve over any interval \((z_1, z_2)\) is then \(\Phi(z_2) - \Phi(z_1)\).

## 8.2.3. Numerical Values of the Areas#

If we had a formula for \(\Phi\), we could plug into that formula to find areas under the standard normal curve. But this is where the curve gets even more interesting: even though we can show that the total area under the curve is 1, there is no closed-form formula for \(\Phi\). The numerical value of the integral has to be evaluated by numerical approximation.

That is why almost all statistics textbooks include a normal distribution table. We can do better because we have Python.

The `SciPy`

function `stats.norm.cdf`

takes in \(z\) and returns \(\Phi(z)\). Thus the value

is found by evaluating the following expression:

```
stats.norm.cdf(1)
```

```
0.8413447460685429
```

The area of the tail to the right of 1 is therefore about \(16\%\), which by symmetry is the same as \(\Phi(-1)\):

```
stats.norm.cdf(-1)
```

```
0.15865525393145707
```

So the area under the standard normal curve between \(-1\) and \(1\) is about 68%:

```
stats.norm.cdf(1) - stats.norm.cdf(-1)
```

```
0.6826894921370859
```

The area between \(-2\) and \(2\) is

```
stats.norm.cdf(2) - stats.norm.cdf(-2)
```

```
0.9544997361036416
```

## 8.2.4. Percentiles#

The area under the curve to the left of 1 is about 84%

The point \(z = 1\) is therefore called the *84th percentile* of the curve. If you think of the curve as a probability histogram, then about 84% of the probability lies below \(z=1\).

The 90th percentile must be to the right of 1. But how far to the right?

To find it, we need the *inverse* of \(\Phi\).

The 90th percentile is the point \(z\) such that \(\Phi(z) = 0.9\).

In math notation, the 90th percentile is the point

In `SciPy`

, the function \(\Phi^{-1}\) is named `ppf`

for “percent point function”. The 90th percentile or “90 percent point” of the curve is about 1.28:

```
stats.norm.ppf(0.9)
```

```
1.2815515655446004
```

## 8.2.5. Summary of Methods#

**1.** First, you learned to find areas under the curve based on point specified on the horizontal axis.

The main mathematical result is that for any \(z\), the area under the curve to the left of \(z\) is the proportion \(p\) given by

Numerically, `stats.norm.cdf(z)`

evaluates to \(p\).

**2.** Next, you learned to find points on the horizontal axis based on specified areas under the curve.

The main mathematical result is that for any proportion \(p\), the point \(z\) that has area \(p\) to the left is given by

Numerically, `stats.norm.ppf(p)`

evaluates to \(z\).