{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "Mo8QV6zESV0H" }, "source": [ "Lecture 16 - Normal distributions, central limit theorem, cdfs\n", "---------\n", "\n", "CS 2810, Spring 2022, 3/21/2022, Muzny\n", "\n", "We recommend downloading this notebook and then uploading it to [Google Colaboratory](https://colab.research.google.com/).\n", "\n", "We'll upload finalized html/ipynb versions of this notebook after lecture." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "id": "X_2oMEfpSV0J" }, "outputs": [], "source": [ "# for the pi, e, sqrt functions\n", "import math\n", "\n", "# for our coin flips\n", "import random\n", "\n", "# for our normal distribution functions\n", "from scipy.stats import norm\n", "\n", "# for graphing (optional)\n", "import matplotlib.pyplot as plt\n", "\n", "# for the linspace function (optional)\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Z13xYZSsSV0K", "outputId": "338dfa2a-8014-4936-fd2f-a3e3295deb57" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "0.5\n", "8\n", "2.718281828459045\n", "3.141592653589793\n", "0.1991696681468755\n", "from scipy 0.19916966814687553\n" ] } ], "source": [ "# check your calculation for the pdf value \n", "# of a normal distribution here\n", "\n", "x = 5.11\n", "mean = 5\n", "stddev = 2\n", "\n", "# do the math \"by hand\" first:\n", "print( 1 / 2) # to divide\n", "print( 2 ** 3) # ** is the exponent operator\n", "print(math.e) # the e constant\n", "print(math.pi) # give you the value of pi\n", "# carful of order of operations!\n", "pdf_val = (1 / (stddev * math.sqrt((2 * math.pi)))) * math.e ** (-0.5 * ((x - mean) / stddev) ** 2)\n", "print(pdf_val)\n", "\n", "# then, run the code:\n", "# verify our pdf calculations using scipy\n", "print(\"from scipy\", norm.pdf(x, mean, stddev))" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 265 }, "id": "TNF3VVWYSV0M", "outputId": "49a1082b-ff34-4c4a-b124-79caf0e1f39f" }, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": { "needs_background": "light" } } ], "source": [ "# central limit theorem example\n", "def flip_coin(times):\n", " \"\"\"\n", " Function that generates a list of fair two-sided coin flips.\n", " Parameters:\n", " times (int): number of times to flip the coin\n", " Return:\n", " list of values from the coin flips\n", " \"\"\"\n", " return [random.randint(0, 1) for t in range(times)]\n", "\n", "\n", "# fill in numbers here\n", "# number of samples to take\n", "samples = 10000\n", "# flips per sample\n", "times = 40\n", "\n", "# accumulate a list of the average value of each sample\n", "averages = []\n", "# repeat for samples times\n", "for sample_num in range(samples):\n", " # flip the coins\n", " coin_flips = flip_coin(times)\n", " # calculate the average\n", " averages.append(sum(coin_flips) / len(coin_flips))\n", " \n", "# display a histogram of the averages\n", "plt.hist(averages)\n", "plt.show()" ] }, { "cell_type": "code", "source": [ "# if I wanted to apply the central limit theorem to people's heights, what are samples and times?\n", "# samples: groups of people, chosen with replacement\n", "# times: asking each person in a given group (sample) how tall they are\n", "\n", "# we will do this sufficient number of times to get a good estimate of \n", "# our population mean (this is a mean of means)\n", "# law of large numbers :)" ], "metadata": { "id": "L2TC6M5bXp1w" }, "execution_count": 25, "outputs": [] }, { "cell_type": "code", "execution_count": 26, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "GfMwiVsaSV0M", "outputId": "2871ab2a-fd7b-4098-8105-f1eeec651a81" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "5.11\n", "5\n", "2\n", "0.5\n", "0.15865525393145707\n", "0.3413447460685429\n" ] } ], "source": [ "# using sci py to access the cdf of a distribution:\n", "# norm.cdf(x, mean, stddev)\n", "print(x)\n", "print(mean)\n", "print(stddev)\n", "\n", "# what percent is <= 5?\n", "print(norm.cdf(5, mean, stddev))\n", "\n", "# what percent is between 3 and 5?\n", "print(norm.cdf(3, mean, stddev))\n", "print(norm.cdf(5, mean, stddev) - norm.cdf(3, mean, stddev))" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "JTJnBRlcSV0N", "outputId": "f33725e9-c275-45a9-ed33-e940eeb36721" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "2.4368968689107993\n", "0.10000027475074158\n" ] } ], "source": [ "# using sci py to access the ppf of a distribution:\n", "# norm.ppf(percentage, mean, stddev)\n", "\n", "print(norm.ppf(.1, mean, stddev))\n", "print(norm.cdf(2.4369, mean, stddev))\n" ] }, { "cell_type": "code", "source": [ "# ICA question 4\n", "# bottom 10 % of travel times\n", "print(norm.ppf(.1, mean, stddev))\n", "\n", "# % trips between 5 and 8 minutes\n", "print(norm.cdf(8, mean, stddev) - norm.cdf(5, mean, stddev))" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "ipjXzm28dGb8", "outputId": "59f36549-25c4-47f5-ba11-88821ed0c661" }, "execution_count": 28, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "2.4368968689107993\n", "0.4331927987311419\n" ] } ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 265 }, "id": "VL8T-2kNSV0O", "outputId": "8f557c4b-82c0-41a0-ceb7-7579e9cd4954" }, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": { "needs_background": "light" } } ], "source": [ "# example adapted from:\n", "# https://docs.scipy.org/doc/scipy-1.8.0/html-scipyorg/reference/generated/scipy.stats.norm.html\n", "\n", "# we're plotting the calculated pdf in combination with\n", "# the histogram generated from sampling a normally distributed \n", "# random variable with the same mean and standard deviation \n", "# that we've been working with\n", "fig, ax = plt.subplots(1, 1)\n", "xs = np.linspace(norm.ppf(0.01, mean, stddev),\n", " norm.ppf(0.99, mean, stddev), 100)\n", "ax.plot(xs, norm.pdf(xs, mean, stddev),\n", " 'o', lw=5, alpha=0.6, label='norm pdf')\n", "r = norm.rvs(mean, stddev,size=1000)\n", "ax.hist(r, density=True, histtype='stepfilled', alpha=0.2)\n", "ax.legend(loc='best', frameon=False)\n", "plt.show()" ] }, { "cell_type": "code", "source": [ "" ], "metadata": { "id": "sCyElfGsbaSI" }, "execution_count": 29, "outputs": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.12" }, "colab": { "name": "16_pdf_cdf_lec.ipynb", "provenance": [], "collapsed_sections": [] } }, "nbformat": 4, "nbformat_minor": 0 }