{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"tags": [
"remove_input"
]
},
"outputs": [],
"source": [
"path_data = '../../data/'\n",
"\n",
"import numpy as np\n",
"import pandas as pd\n",
"\n",
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"plt.style.use('fivethirtyeight')\n",
"\n",
"import warnings\n",
"warnings.filterwarnings('ignore')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Decisions and Uncertainty\n",
"We have seen several examples of assessing models that involve chance, by comparing observed data to the predictions made by the models. In all of our examples, there has been no doubt about whether the data were consistent with the model's predictions. The data were either very far away from the predictions, or very close to them.\n",
"\n",
"But outcomes are not always so clear cut. How far is \"far\"? Exactly what does \"close\" mean? While these questions don't have universal answers, there are guidelines and conventions that you can follow. In this section we will describe some of them.\n",
"\n",
"But first let us develop a general framework of decision making, into which all our examples will fit.\n",
"\n",
"What we have developed while assessing models are some of the fundamental concepts of statistical tests of hypotheses. Using statistical tests as a way of making decisions is standard in many fields and has a standard terminology. Here is the sequence of the steps in most statistical tests, along with some terminology and examples. You will see that they are consistent with the sequence of steps we have used for assessing models."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Step 1: The Hypotheses\n",
"\n",
"All statistical tests attempt to choose between two views of the world. Specifically, the choice is between two views about how the data were generated. These two views are called *hypotheses*.\n",
"\n",
"**The null hypothesis.** This is a clearly defined model about chances. It says that the data were generated at random under clearly specified assumptions about the randomness. The word \"null\" reinforces the idea that if the data look different from what the null hypothesis predicts, the difference is due to *nothing* but chance.\n",
"\n",
"From a practical perspective, **the null hypothesis is a hypothesis under which you can simulate data.**\n",
"\n",
"In the example about Mendel's model for the colors of pea plants, the null hypothesis is that the assumptions of his model are good: each plant has a 75% chance of having purple flowers, independent of all other plants. \n",
"\n",
"Under this hypothesis, we were able to simulate random samples, by using `sample_proportions(929, [0.75, 0.25])`. We used a sample size of 929 because that's the number of plants Mendel grew.\n",
"\n",
"**The alternative hypothesis.** This says that some reason other than chance made the data differ from the predictions of the model in the null hypothesis.\n",
"\n",
"In the example about Mendel's plants, the alternative hypothesis is simply that his model isn't good."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Step 2: The Test Statistic ###\n",
"\n",
"In order to decide between the two hypothesis, we must choose a statistic that we can use to make the decision. This is called the **test statistic**.\n",
"\n",
"In the example of Mendel's plants, our statistic was the absolute difference between the sample percent and 75% which was predicted by his model.\n",
"\n",
"$$\n",
"\\big{\\vert} \\text{sample percent of purple-flowering plants} - 75 \\big{\\vert}\n",
"$$\n",
"\n",
"To see how to make the choice in general, look at the alternative hypothesis. What values of the statistic will make you think that the alternative hypothesis is a better choice than the null? \n",
"- If the answer is \"big values,\" you might have a good choice of statistic. \n",
"- So also if the answer is \"small values.\" \n",
"- But if the answer is \"both big values and small values,\" we recommend that you look again at your statistic and see if taking an absolute value can change the answer to just \"big values\".\n",
"\n",
"In the case of the pea plants, a sample percent of around 75% will be consistent with the model, but percents much bigger or much less than 75 will make you think that the model isn't good. This indicates that the statistic should be the *distance* between the sample percent and 75, that is, the absolute value of the difference between them. Big values of the distance will make you lean towards the alternative.\n",
"\n",
"The **observed value of the test statistic** is the value of the statistic you get from the data in the study, not a simulated value. Among Mendel's 929 plants, 705 had purple flowers. The observed value of the test statistic was therefore"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8880516684607045"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"abs ( 100 * (705 / 929) - 75)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Step 3: The Distribution of the Test Statistic, Under the Null Hypothesis\n",
"\n",
"The main computational aspect of a test of hypotheses is figuring out *what the values of the test statistic might be if the null hypothesis were true*. \n",
"\n",
"The test statistic is simulated based on the assumptions of the model in the null hypothesis. That model involves chance, so the statistic comes out differently when you simulate it multiple times.\n",
"\n",
"By simulating the statistic repeatedly, we get a good sense of its possible values and which ones are more likely than others. In other words, we get a good approximation to the probability distribution of the statistic, as predicted by the model in the null hypothesis.\n",
"\n",
"As with all distributions, it is very useful to visualize this distribution by a histogram. We have done so in all our examples."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Step 4. The Conclusion of the Test\n",
"\n",
"The choice between the null and alternative hypotheses depends on the comparison between what you computed in Steps 2 and 3: the observed value of the test statistic and its distribution as predicted by the null hypothesis. \n",
"\n",
"If the two are consistent with each other, then the observed test statistic is in line with what the null hypothesis predicts. In other words, the test does not point towards the alternative hypothesis; the null hypothesis is better supported by the data. This was the case with the assessment of Mendel's model.\n",
"\n",
"But if the two are not consistent with each other, as is the case in our example about Alameda County jury panels, then the data do not support the null hypothesis. That is why we concluded that the jury panels were not selected at random. Something other than chance affected their composition.\n",
"\n",
"If the data do not support the null hypothesis, we say that the test *rejects* the null hypothesis."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### The Meaning of \"Consistent\"\n",
"\n",
"In the example about Alameda County juries, it was apparent that our observed test statistic was far from what was predicted by the null hypothesis. In the example about pea flowers, it is just as clear that the observed statistic is consistent with the distribution that the null predicts. So in both of the examples, it is clear which hypothesis to choose.\n",
"\n",
"But sometimes the decision is not so clear. Whether the observed test statistic is consistent with its predicted distribution under the null hypothesis is a matter of judgment. We recommend that you provide your judgment along with the value of the test statistic and a graph of its predicted distribution under the null. That will allow your reader to make his or her own judgment about whether the two are consistent.\n",
"\n",
"Here is an example where the decision requires judgment."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### The GSI's Defense\n",
"A Berkeley Statistics class of about 350 students was divided into 12 discussion sections led by Graduate Student Instructors (GSIs). After the midterm, students in Section 3 noticed that their scores were on average lower than the rest of the class. \n",
"\n",
"In such situations, students tend to grumble about the section's GSI. Surely, they feel, there must have been something wrong with the GSI's teaching. Or else why would their section have done worse than others?\n",
"\n",
"The GSI, typically more experienced about statistical variation, often has a different perspective: if you simply draw a section of students at random from the whole class, their average score could resemble the score that the students are unhappy about, just by chance.\n",
"\n",
"The GSI's position is a clearly stated chance model. We can simulate data under this model. Let's test it out. \n",
"\n",
"**Null Hypothesis.** The average score of the students in Section 3 is like the average score of the same number of students picked at random from the class. \n",
"\n",
"**Alternative Hypothesis.** No, it's too low.\n",
"\n",
"A natural statistic here is the average of the scores. Low values of the average will make us lean towards the alternative.\n",
"\n",
"Let's take a look at the data."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The table `scores` contains the section number and midterm score for each student in the class. The midterm scores were integers in the range 0 through 25; 0 means that the student didn't take the test."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
],
"text/plain": [
" Midterm\n",
"Section \n",
"1 15.593750\n",
"2 15.125000\n",
"3 13.666667\n",
"4 14.766667\n",
"5 17.454545\n",
"6 15.031250\n",
"7 16.625000\n",
"8 16.310345\n",
"9 14.566667\n",
"10 15.235294\n",
"11 15.807692\n",
"12 15.733333"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"section_averages = scores.groupby(['Section']).mean()\n",
"\n",
"section_averages"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The average score of Section 3 is 13.667, which does look low compared to the other section averages. But is it lower than the average of a section of the same size selected at random from the class? \n",
"\n",
"To answer this, we can select a section at random from the class and find its average. To select a section at random to we need to know how big Section 3 is, which we can by once again using `group`."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Midterm
\n",
"
\n",
"
\n",
"
Section
\n",
"
\n",
"
\n",
" \n",
" \n",
"
\n",
"
1
\n",
"
32
\n",
"
\n",
"
\n",
"
2
\n",
"
32
\n",
"
\n",
"
\n",
"
3
\n",
"
27
\n",
"
\n",
"
\n",
"
4
\n",
"
30
\n",
"
\n",
"
\n",
"
5
\n",
"
33
\n",
"
\n",
"
\n",
"
6
\n",
"
32
\n",
"
\n",
"
\n",
"
7
\n",
"
24
\n",
"
\n",
"
\n",
"
8
\n",
"
29
\n",
"
\n",
"
\n",
"
9
\n",
"
30
\n",
"
\n",
"
\n",
"
10
\n",
"
34
\n",
"
\n",
"
\n",
"
11
\n",
"
26
\n",
"
\n",
"
\n",
"
12
\n",
"
30
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Midterm\n",
"Section \n",
"1 32\n",
"2 32\n",
"3 27\n",
"4 30\n",
"5 33\n",
"6 32\n",
"7 24\n",
"8 29\n",
"9 30\n",
"10 34\n",
"11 26\n",
"12 30"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"scores.groupby('Section').count()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Section 3 had 27 students. \n",
"\n",
"Now we can figure out how to create one simulated value of our test statistic, the random sample average.\n",
"\n",
"First we have to select 27 scores at random without replacement. Since the data are already in a table, we will use the Table method `sample`.\n",
"\n",
"Remember that by default, `sample` draws with replacement. The optional argument `with_replacement = False` produces a random sample drawn without replacement."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"scores_only = scores.drop(columns=['Section'])"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Midterm
\n",
"
\n",
" \n",
" \n",
"
\n",
"
154
\n",
"
25
\n",
"
\n",
"
\n",
"
344
\n",
"
0
\n",
"
\n",
"
\n",
"
313
\n",
"
16
\n",
"
\n",
"
\n",
"
151
\n",
"
23
\n",
"
\n",
"
\n",
"
122
\n",
"
17
\n",
"
\n",
"
\n",
"
180
\n",
"
18
\n",
"
\n",
"
\n",
"
282
\n",
"
15
\n",
"
\n",
"
\n",
"
281
\n",
"
24
\n",
"
\n",
"
\n",
"
8
\n",
"
8
\n",
"
\n",
"
\n",
"
166
\n",
"
11
\n",
"
\n",
"
\n",
"
236
\n",
"
20
\n",
"
\n",
"
\n",
"
330
\n",
"
8
\n",
"
\n",
"
\n",
"
57
\n",
"
12
\n",
"
\n",
"
\n",
"
295
\n",
"
12
\n",
"
\n",
"
\n",
"
326
\n",
"
21
\n",
"
\n",
"
\n",
"
164
\n",
"
13
\n",
"
\n",
"
\n",
"
272
\n",
"
9
\n",
"
\n",
"
\n",
"
195
\n",
"
13
\n",
"
\n",
"
\n",
"
234
\n",
"
20
\n",
"
\n",
"
\n",
"
49
\n",
"
24
\n",
"
\n",
"
\n",
"
316
\n",
"
17
\n",
"
\n",
"
\n",
"
325
\n",
"
12
\n",
"
\n",
"
\n",
"
132
\n",
"
17
\n",
"
\n",
"
\n",
"
140
\n",
"
23
\n",
"
\n",
"
\n",
"
235
\n",
"
12
\n",
"
\n",
"
\n",
"
277
\n",
"
17
\n",
"
\n",
"
\n",
"
244
\n",
"
10
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Midterm\n",
"154 25\n",
"344 0\n",
"313 16\n",
"151 23\n",
"122 17\n",
"180 18\n",
"282 15\n",
"281 24\n",
"8 8\n",
"166 11\n",
"236 20\n",
"330 8\n",
"57 12\n",
"295 12\n",
"326 21\n",
"164 13\n",
"272 9\n",
"195 13\n",
"234 20\n",
"49 24\n",
"316 17\n",
"325 12\n",
"132 17\n",
"140 23\n",
"235 12\n",
"277 17\n",
"244 10"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"random_sample = scores_only.sample(27, replace=False)\n",
"random_sample"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The average of these 27 randomly selected scores is"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"15.444444444444445"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.average(random_sample['Midterm'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"That's the average of 27 randomly selected scores. The cell below collects the code necessary for generating this random average. \n",
"\n",
"Now we can simulate the random sample average by repeating the calculation multple times."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"def random_sample_average():\n",
" random_sample = scores_only.sample(27, replace=False)\n",
" return np.average(random_sample['Midterm'])"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([16.85185185, 17.03703704, 16.77777778, ..., 16.77777778,\n",
" 14.66666667, 14.44444444])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sample_averages = np.array([])\n",
"\n",
"repetitions = 10000\n",
"for i in np.arange(repetitions):\n",
" sample_averages = np.append(sample_averages, random_sample_average())\n",
" \n",
"sample_averages"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here is the histogram of the simulated averages. It shows the distribution of what the Section 3 average might have been, if Section 3 had been selected at random from the class. \n",
"\n",
"The observed Section 3 average score of 13.667 is shown as a red dot on the horizontal axis. You can ignore the last line of code; it just draws the dot."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"