From 5cbfe4efdf0313172cb62811556a8001c7d560df Mon Sep 17 00:00:00 2001 From: jack93g Date: Tue, 21 Sep 2021 19:58:20 +0200 Subject: [PATCH] done --- Untitled.ipynb | 456 ++++++++++++++++++++++++++++++++++++++++++++--- machine.txt | Bin 0 -> 440 bytes machine.xlsx | Bin 0 -> 9660 bytes student_gpa.txt | 18 ++ student_gpa.xlsx | Bin 0 -> 9024 bytes 5 files changed, 450 insertions(+), 24 deletions(-) create mode 100644 machine.txt create mode 100644 machine.xlsx create mode 100644 student_gpa.txt create mode 100644 student_gpa.xlsx diff --git a/Untitled.ipynb b/Untitled.ipynb index bb907ae..2799f1e 100644 --- a/Untitled.ipynb +++ b/Untitled.ipynb @@ -2,16 +2,13 @@ "cells": [ { "cell_type": "markdown", - "id": "ee314908", - "metadata": {}, "source": [ "# Lab | Inferential statistics - T-test & P-value" - ] + ], + "metadata": {} }, { "cell_type": "markdown", - "id": "515aa25e", - "metadata": {}, "source": [ "## 1. We will have another simple example on two sample t test (pooled- when the variances are equal). But this time this is a one sided t-test\n", "\n", @@ -19,20 +16,231 @@ "Assume that there is sufficient evidence to conduct the t test, does the data provide sufficient evidence to show if one machine is better than the other\n", "\n", "\n" - ] + ], + "metadata": {} }, { "cell_type": "code", - "execution_count": null, - "id": "c4797fc7", - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 50, + "source": [ + "import pandas as pd\n", + "\n", + "data=pd.read_excel(\"machine.xlsx\")\n", + "data[[\"New machine\",\" Old machine\"]]\n" + ], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
New machineOld machine
042.142.7
141.043.6
241.343.8
341.843.3
442.442.5
542.843.5
643.243.1
742.341.7
841.844.0
942.744.1
10NaNNaN
11NaNNaN
12NaNNaN
13NaNNaN
14NaNNaN
15NaNNaN
16NaNNaN
\n", + "
" + ], + "text/plain": [ + " New machine Old machine\n", + "0 42.1 42.7\n", + "1 41.0 43.6\n", + "2 41.3 43.8\n", + "3 41.8 43.3\n", + "4 42.4 42.5\n", + "5 42.8 43.5\n", + "6 43.2 43.1\n", + "7 42.3 41.7\n", + "8 41.8 44.0\n", + "9 42.7 44.1\n", + "10 NaN NaN\n", + "11 NaN NaN\n", + "12 NaN NaN\n", + "13 NaN NaN\n", + "14 NaN NaN\n", + "15 NaN NaN\n", + "16 NaN NaN" + ] + }, + "metadata": {}, + "execution_count": 50 + } + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 49, + "source": [ + "new_mean = data[\"New machine\"].mean(axis=0)\n", + "old_mean = data[\" Old machine\"].mean(axis=0)\n", + "\n", + "print(\" new machine mean: \",new_mean,\"\\n\",\"old machine mean: \",old_mean)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " new machine mean: 42.14 \n", + " old machine mean: 43.230000000000004\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Hypothesis test\n", + "- H0: µ = 43.23\n", + "- H1: µ < 43.23\n", + "- This is a one tailed t-test for two samples" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 33, + "source": [ + "# we can import the ttest_ind from scipy so we don't have to work it out by hand\n", + "\n", + "from scipy.stats import ttest_ind\n", + "\n", + "\n", + "T_test = ttest_ind(list(data[\"New machine\"]), list(data[\" Old machine\"]))\n", + "\n", + "# the t-test is two tailed by default so we need to divide by 2 for a one tailed p-value\n", + "print(T_test, \"\\np-value: \", T_test.pvalue / 2)\n" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Ttest_indResult(statistic=-3.3972307061176026, pvalue=0.0032111425007745158) \n", + "p-value: 0.0016055712503872579\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Result\n", + "\n", + "- The p-value for our t-stat is 0.0016. This is less than our alpha level of 0.05 meaning we can reject the null hypothesis\n", + "- Therefore we can accept the alternate hypothesis that the new machine is faster." + ], + "metadata": {} }, { "cell_type": "markdown", - "id": "501614ae", - "metadata": {}, "source": [ "## 2. An additional problem (not mandatory): In this case we can't assume that the population variances are equal. Hence in this case we cannot pool the variances.\n", " Independent random samples of 17 sophomores and 13 juniors attending a large university yield the following data on grade point averages. Data is provided in the file `files_for_lab/student_gpa.txt`.\n", @@ -41,22 +249,219 @@ " Test statistics can be calculated as: [link to the image - Test statistics calculation for Unpooled Variance Case](https://education-team-2020.s3-eu-west-1.amazonaws.com/data-analytics/7.04/7.04-unpooled_variances.png)\n", "\n", " Degrees of freedom is `(n1-1)+(n2-1)`." - ] + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 35, + "source": [ + "data=pd.read_excel(\"student_gpa.xlsx\")\n", + "data" + ], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SophomoresJuniors
03.042.56
11.712.77
23.302.70
32.883.00
42.112.98
52.603.47
62.923.26
73.603.20
82.283.19
92.822.65
103.033.00
113.133.39
122.862.58
133.49NaN
143.11NaN
152.13NaN
163.27NaN
\n", + "
" + ], + "text/plain": [ + " Sophomores Juniors\n", + "0 3.04 2.56\n", + "1 1.71 2.77\n", + "2 3.30 2.70\n", + "3 2.88 3.00\n", + "4 2.11 2.98\n", + "5 2.60 3.47\n", + "6 2.92 3.26\n", + "7 3.60 3.20\n", + "8 2.28 3.19\n", + "9 2.82 2.65\n", + "10 3.03 3.00\n", + "11 3.13 3.39\n", + "12 2.86 2.58\n", + "13 3.49 NaN\n", + "14 3.11 NaN\n", + "15 2.13 NaN\n", + "16 3.27 NaN" + ] + }, + "metadata": {}, + "execution_count": 35 + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Setting up test\n", + "\n", + "- This is a two-tailed test because the mean could be higher or lower than the H0\n", + "- Degrees of freedom = 28\n", + "- Alpha level 0.05 \n", + "\n", + " \n", + "\n", + "- If our t-test returns a critical value of above 2.048 then we can reject the H0" + ], + "metadata": {} }, { "cell_type": "code", - "execution_count": null, - "id": "3925f57e", - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 44, + "source": [ + "# here we can use the same function as above from scipy but set equal_var to false as the population variances are not equal\n", + "\n", + "T_test = ttest_ind(list(data[\"Sophomores\"]), list(data[\" Juniors\"][0:13]),equal_var=False)\n", + "T_test\n" + ], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Ttest_indResult(statistic=-0.9231495630900278, pvalue=0.3642180675348571)" + ] + }, + "metadata": {}, + "execution_count": 44 + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Result" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- The t-statistic is 0.92 which is not above 2.048 meaning we don't reject the H0.\n", + "- The p_value is also not less than 0.05 so based on that we should also not reject the H0.\n", + "- To conclude we do not have proof that there is a significant difference in average gpas between sophomores and juniors." + ], + "metadata": {} } ], "metadata": { "kernelspec": { - "display_name": "ironhack", - "language": "python", - "name": "ironhack" + "name": "python3", + "display_name": "Python 3.8.8 64-bit ('base': conda)" }, "language_info": { "codemirror_mode": { @@ -68,9 +473,12 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.8.8" + }, + "interpreter": { + "hash": "f27e873c37e1f1555e60b9534290287a99b02cba69d8f829668ffeb66728ce50" } }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/machine.txt b/machine.txt new file mode 100644 index 0000000000000000000000000000000000000000..b26c8d48bae3d50d61eb9ef7ffe1adcc023dc2ee GIT binary patch literal 440 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 literal 0 HcmV?d00001 diff --git a/student_gpa.txt b/student_gpa.txt new file mode 100644 index 0000000..374f7f8 --- /dev/null +++ b/student_gpa.txt @@ -0,0 +1,18 @@ +Sophomores Juniors +3,04 2,56 +1,71 2,77 +3,3 2,7 +2,88 3 +2,11 2,98 +2,6 3,47 +2,92 3,26 +3,6 3,2 +2,28 3,19 +2,82 2,65 +3,03 3 +3,13 3,39 +2,86 2,58 +3,49 +3,11 +2,13 +3,27 diff --git a/student_gpa.xlsx b/student_gpa.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c9bb796ce8542f48a547cca7d6bdbcd78d31a974 GIT binary patch literal 9024 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 O`S?Ii)