Showing preview only (1,058K chars total). Download the full file or copy to clipboard to get everything.
Repository: jmportilla/Statistics-Notes
Branch: master
Commit: a5653d68f3ce
Files: 40
Total size: 1.0 MB
Directory structure:
gitextract_e7icusc_/
├── .gitattributes
├── .gitignore
├── .ipynb_checkpoints/
│ ├── Bayes' Theorem-checkpoint.ipynb
│ ├── Bayseian A-B Testing-checkpoint.ipynb
│ ├── Beta Distribution-checkpoint.ipynb
│ ├── Binomial Distribution-checkpoint.ipynb
│ ├── Chi-Square-checkpoint.ipynb
│ ├── Continuous Uniform Distributions-checkpoint.ipynb
│ ├── Discrete Uniform Distributions-checkpoint.ipynb
│ ├── Exponential Distribution-checkpoint.ipynb
│ ├── Frequentist A-B Testing-checkpoint.ipynb
│ ├── Gamma Distribution-checkpoint.ipynb
│ ├── Hypothesis Testing and Confidence Intervals-checkpoint.ipynb
│ ├── Kolmogorov-Smirnov Test-checkpoint.ipynb
│ ├── Markov Chain Monte Carlo Algorithm-checkpoint.ipynb
│ ├── Normal Distribution-checkpoint.ipynb
│ ├── Poisson Distribution-checkpoint.ipynb
│ ├── Sampling Techniques-checkpoint.ipynb
│ ├── Statistical Estimation Theory-checkpoint.ipynb
│ ├── Statistics Overview-checkpoint.ipynb
│ └── T Distribution (Small Sampling Theory)-checkpoint.ipynb
├── Bayes' Theorem.ipynb
├── Bayseian A-B Testing.ipynb
├── Beta Distribution.ipynb
├── Binomial Distribution.ipynb
├── Chi-Square.ipynb
├── Continuous Uniform Distributions.ipynb
├── Discrete Uniform Distributions.ipynb
├── Exponential Distribution.ipynb
├── Frequentist A-B Testing.ipynb
├── Gamma Distribution.ipynb
├── Hypothesis Testing and Confidence Intervals.ipynb
├── Kolmogorov-Smirnov Test.ipynb
├── Markov Chain Monte Carlo Algorithm.ipynb
├── Normal Distribution.ipynb
├── Poisson Distribution.ipynb
├── Sampling Techniques.ipynb
├── Statistical Estimation Theory.ipynb
├── Statistics Overview.ipynb
└── T Distribution (Small Sampling Theory).ipynb
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
# Auto detect text files and perform LF normalization
* text=auto
# Custom for Visual Studio
*.cs diff=csharp
# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain
================================================
FILE: .gitignore
================================================
# Windows image file caches
Thumbs.db
ehthumbs.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msm
*.msp
# Windows shortcuts
*.lnk
# =========================
# Operating System Files
# =========================
# OSX
# =========================
.DS_Store
.AppleDouble
.LSOverride
# Thumbnails
._*
# Files that might appear on external disk
.Spotlight-V100
.Trashes
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
================================================
FILE: .ipynb_checkpoints/Bayes' Theorem-checkpoint.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"source": [
"# Bayes Theorem\n",
"\n",
"In this Statistics Notebook we will be going over Bayes Theorem and an example of how to use it. This theorem will be important to understand in many situations and we will be using it for Machine Learning in certain lectures.\n",
"\n",
"We will start by describing the equation for Bayes Theorem and then complete an example problem. There won't be a SciPy portion to this lecture because this is really more of a math overview than a discussion on a distribution.\n",
"\n",
"### Overview\n",
"\n",
"In probability theory and statistics, Bayes' theorem describes the probability of an event, based on conditions that might be related to the event. Bayes Theorem allows us to use previously known information to asess likelihood of another related event.\n",
"\n",
"You will usually see Bayes Theorem displayed in one of two ways:\n",
"\n",
"$$ P(A|B) = \\frac{P(B|A)P(A)}{P(B)} $$\n",
"\n",
"$$ P(A|B) = \\frac{P(B|A)P(A)}{P(B|A)P(A) + P(B|not A)P(not A)}$$\n",
"\n",
"Here P(A|B) stands for the Probability that A happened given B has occured. These are both the same, in the second case, you would use this form if you don't directly have the Probability of B occuring on its own.\n",
"\n",
"Let's go ahead and dive into an example Problem to see how to use Baye's Theorem!\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Example Problem\n",
"\n",
"This is a classic example of Bayes Theorem:\n",
"\n",
"We have a test to screen for breast cancer, with the following conditions:\n",
"\n",
"- 1% of women have breast cancer \n",
"- 80% of mammograms detect breast cancer when it is there\n",
"- 9.6 % of mammograms detect breast cancer when it is *not* there. (False Positive)\n",
"\n",
"We could assign the probabilities to the sample space by using a table:\n",
"<table>\n",
" <tr>\n",
" \n",
" <td></td>\n",
" <td>Cancer (1%)</td>\n",
" <td>No Cancer (99%)</td> \n",
" \n",
" </tr>\n",
" <tr>\n",
" \n",
" <td>Tested Positive</td>\n",
" <td>80%</td>\n",
" <td>9.6%</td> \n",
" \n",
" </tr>\n",
" <tr>\n",
" \n",
" <td>Tested Negative</td>\n",
" <td>20%</td>\n",
" <td>90.4%</td> \n",
" \n",
" </tr>\n",
"</table>\n",
"\n",
"\n",
"Now let's say you wanted to know how accurate this test is. If someone went to go get the test and had a positive result, what is the probability that they have breast cancer?\n",
"\n",
"We can first visualize Bayes Theorem by filling out the table above:\n",
"\n",
"<table>\n",
" <tr>\n",
" \n",
" <td></td>\n",
" <td>Cancer (1%)</td>\n",
" <td>No Cancer (99%)</td> \n",
" \n",
" </tr>\n",
" <tr>\n",
" \n",
" <td>Tested Positive</td>\n",
" <td>True Positive: 1% × 80%</td>\n",
" <td>False Positive: 99% × 9.6%</td> \n",
" \n",
" </tr>\n",
" <tr>\n",
" \n",
" <td>Tested Negative</td>\n",
" <td>False Negative: 1% × 20%</td>\n",
" <td>True Negative: 99% × 90.4%</td> \n",
" \n",
" </tr>\n",
"</table>\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Remember that the proabbility of an event occuring is the number of ways it could happen given all possible outcomes:\n",
"\n",
"$$ Probability = \\frac{Desired \\ event} { All \\ possibilities}$$\n",
"\n",
"Then the probability of getting a real, positive result is .01 × .8 = .008. \n",
"\n",
"The chance of getting any type of positive result is the chance of a *true positive* plus the chance of a *false positive* \n",
"which is (.008 + 0.09504 = .10304).\n",
"\n",
"So, our chance of cancer is .008/.10304 = 0.0776, or about 7.8%.\n",
"\n",
"This means that a positive mammogram results in only a 7.8% chance of cancer, rather than 80% (the supposed accuracy of the test). \n",
"\n",
"This might seem counter intuitive at first but it makes sense: the test gives a false positive 10% of the time, so there will be a ton of false positives in any given population. There will be so many false positives, in fact, that most of the positive test results will be wrong.\n",
"\n",
"Now we can turn the above process into the Bayes Theorem Equation:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's go ahead and plug in the information we do know into the second equation.\n",
"\n",
"$$ P(A|B) = \\frac{P(B|A)P(A)}{P(B|A)P(A) + P(B|not A)P(not A)}$$\n",
"\n",
"Looking back on the information we were given:\n",
"\n",
"\n",
"* Pr(A|B) = Chance of having cancer (A) given a positive test (B). This is the desired information: How likely is it to have cancer with a positive result? We've already solved it using the table, so let's see if the equation agrees with our results: 7.8%.\n",
"\n",
"\n",
"* Pr(B|A) = Chance of a positive test (B) given that you had cancer (A). This is the chance of a true positive, 80% in this case.\n",
"\n",
"\n",
"* Pr(A) = Chance of having cancer (1%).\n",
"\n",
"\n",
"* Pr(not A) = Chance of not having cancer (99%).\n",
"\n",
"\n",
"* Pr(B|not A) = Chance of a positive test (B) given that you didn’t have cancer ( Not A). This is a false positive, 9.6% in our case.\n",
"\n",
"Plugging in these numbers, we arrive at the same answer as our table method: 7.76%"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Other great resources for more on Bayes Theorem:\n",
"\n",
"1.) [Simple Explanation using Legos](https://www.countbayesie.com/blog/2015/2/18/bayes-theorem-with-lego)\n",
"\n",
"2.) [Wikipedia](http://en.wikipedia.org/wiki/Bayes%27_theorem)\n",
"\n",
"3.) [Stat Trek](http://stattrek.com/probability/bayes-theorem.aspx)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
}
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
================================================
FILE: .ipynb_checkpoints/Bayseian A-B Testing-checkpoint.ipynb
================================================
{
"cells": [],
"metadata": {},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: .ipynb_checkpoints/Beta Distribution-checkpoint.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"####Let's learn the Beta distribution!"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"The beta distribution is a continuous distribution which can take values between 0 and 1. This distribution is parameterized by \n",
"two shape parameters α and β."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"import seaborn as sns\n",
"\n",
"from scipy import stats\n",
"\n",
"a = 0.5\n",
"b = 0.5\n",
"x = np.arange(0.01,1,0.01)\n",
"y = stats.beta.pdf(x,a,b)\n",
"plt.plot(x,y)\n",
"plt.title('Beta: a=%.1f,b=%.1f' %(a,b))\n",
"\n",
"plt.xlabel('x')\n",
"plt.ylabel('Probability density')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.7"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: .ipynb_checkpoints/Binomial Distribution-checkpoint.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Binomial is a specific type of a discrete probability distribution."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's see an example question first, and then learn about the binomial distribution."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Example 1: Two players are playing basketball, player A and player B. Player A takes an average of 11 shots per game, and \n",
"has an average success rate of 72%. Player B takes an average of 15 shots per game, but has an average success rate of 48%.\n",
"\n",
"Question 1: What's the probability that Player A makes 6 shots in an average game?\n",
"\n",
"Question 2: What's the probability that Player B makes 6 shots in an average game?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can classify this as a binomial experiment if the following conditions are met:\n",
" \n",
" 1.) The process consists of a sequence of n trials.\n",
" 2.) Only two exclusive outcomes are possible for each trial (A success and a failure)\n",
" 3.) If the probability of a success is 'p' then the probability of failure is q=1-p\n",
" 4.) The trials are independent.\n",
" \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The formula for a Binomial Distribution Probability Mass Function turns out to be: "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$Pr(X=k)=C(n,k)p^k (1-p)^{n-k}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Where n= number of trials,k=number of successes,p=probability of success,1-p=probability of failure (often written as q=1-p)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This means that to get exactly 'k' successes in 'n' trials, we want exactly 'k' successes: $$p^k$$ \n",
"and we want 'n-k' failures:$$(1-p)^{n-k}$$\n",
"Then finally, there are $$C(n,k)$$ ways of putting 'k' successes in 'n' trials.\n",
"So we multiply all these together to get the probability of exactly that many success and failures in those n trials!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"--------------------------------------------------------------------------------------------------------------------------------"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Quick note, C(n,k) refers to the number of possible combinations of N things taken k at a time.\n",
"\n",
"This is also equal to: $$C(n,k) = \\frac{n!}{k!(n-k)!}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### So let's try out the example problem!"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" The probability of player A making 6 shots in an average game is 11.1% \n",
" \n",
"\n",
" The probability of player B making 6 shots in an average game is 17.0% \n"
]
}
],
"source": [
"# Set up player A\n",
"\n",
"# Probability of success for A\n",
"p_A = .72\n",
"# Number of shots for A\n",
"n_A = 11\n",
"\n",
"# Make 6 shots\n",
"k = 6\n",
"\n",
"# Now import scipy for combination\n",
"import scipy.special as sc\n",
"\n",
"# Set up C(n,k)\n",
"comb_A = sc.comb(n_A,k)\n",
"\n",
"# Now put it together to get the probability!\n",
"answer_A = comb_A * (p_A**k) * ((1-p_A)**(n_A-k))\n",
"\n",
"# Put the answer in percentage form!\n",
"answer_A = 100*answer_A\n",
"\n",
"\n",
"# Quickly repeat all steps for Player B\n",
"p_B = .48\n",
"n_B = 15\n",
"comb_B = sc.comb(n_B,k)\n",
"answer_B = 100 * comb_B * (p_B**k) * ((1-p_B)**(n_B-k))\n",
"\n",
"\n",
"#Print Answers\n",
"print( ' The probability of player A making 6 shots in an average game is %1.1f%% ' %answer_A)\n",
"print( ' \\n')\n",
"print( ' The probability of player B making 6 shots in an average game is %1.1f%% ' %answer_B)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So now we know that even though player B is technically a worse shooter, because she takes more shots she will have a higher chance of making 6 shots in an average game!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"But wait a minute... what about a higher amount of shots, will player's A higher probability take a stronger effect then?\n",
"What's the probability of making 9 shots a game for either player?"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" \n",
"\n",
" The probability of player A making 9 shots in an average game is 22.4% \n",
"\n",
"\n",
" The probability of player B making 9 shots in an average game is 13.4% \n",
"\n",
"\n"
]
}
],
"source": [
"#Let's find out!\n",
"\n",
"#Set number of shots\n",
"k = 9\n",
"\n",
"#Set new combinations\n",
"comb_A = sc.comb(n_A,k)\n",
"comb_B = sc.comb(n_B,k)\n",
"\n",
"# Everything else remains the same\n",
"answer_A = 100 * comb_A * (p_A**k) * ((1-p_A)**(n_A-k))\n",
"answer_B = 100 * comb_B * (p_B**k) * ((1-p_B)**(n_B-k))\n",
"\n",
"#Print Answers\n",
"print( ' \\n')\n",
"print( ' The probability of player A making 9 shots in an average game is %1.1f%% ' %answer_A)\n",
"print( '\\n')\n",
"print( ' The probability of player B making 9 shots in an average game is %1.1f%% ' %answer_B)\n",
"print( '\\n')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we see that player's A ability level gives better odds of making exactly 9 shots. We need to keep in mind that we are asking\n",
"about the probability of making *exactly* those amount of shots. This is a different question than \" What's the probability that player A makes *at least* 9 shots?\"."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Now let's investigate the mean and standard deviation for the binomial distribution"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The mean of a binomial distribution is simply: $$\\mu=n*p$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This intuitively makes sense, the average number of successes should be the total trials multiplied by your average success rate."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Similarly we can see that the standard deviation of a binomial is: $$\\sigma=\\sqrt{n*q*p}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So now we can ask, whats the average number of shots each player will make in a game +/- a standard distribution?"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
"Player A will make an average of 8 +/- 1 shots per game\n",
"\n",
"\n",
"Player B will make an average of 7 +/- 2 shots per game\n",
"\n",
"\n",
"NOTE: It's impossible to make a decimal of a shot so '%1.0f' was used to replace the float!\n"
]
}
],
"source": [
"# Let's go ahead and plug in to the formulas.\n",
"\n",
"# Get the mean\n",
"mu_A = n_A *p_A\n",
"mu_B = n_B *p_B\n",
"\n",
"#Get the standard deviation\n",
"sigma_A = ( n_A *p_A*(1-p_A) )**0.5\n",
"sigma_B = ( n_B *p_B*(1-p_B) )**0.5\n",
"\n",
"# Now print results\n",
"print( '\\n')\n",
"print( 'Player A will make an average of %1.0f +/- %1.0f shots per game' %(mu_A,sigma_A))\n",
"print( '\\n')\n",
"print( 'Player B will make an average of %1.0f +/- %1.0f shots per game' %(mu_B,sigma_B))\n",
"print( '\\n')\n",
"print( \"NOTE: It's impossible to make a decimal of a shot so '%1.0f' was used to replace the float!\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Let's see how to automatically make a binomial distribution."
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"7.92\n",
"1.4891608375189027\n"
]
}
],
"source": [
"from scipy.stats import binom\n",
"\n",
"# We can get stats: Mean('m'), variance('v'), skew('s'), and/or kurtosis('k')\n",
"mean,var= binom.stats(n_A,p_A)\n",
"\n",
"print( mean)\n",
"print( var**0.5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Looks like it matches up with our manual methods. Note: we did not round in this case."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### We can also get the probability mass function:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's try another example to see the full PMF (Probability Mass Function) and plotting it.\n",
"\n",
"Imagine you flip a fair coin. Your probability of getting a heads is p=0.5 (success in this example).\n",
"\n",
"So what does your probability mass function look like for 10 coin flips?"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([0.00097656, 0.00976563, 0.04394531, 0.1171875 , 0.20507812,\n",
" 0.24609375, 0.20507812, 0.1171875 , 0.04394531, 0.00976563,\n",
" 0.00097656])"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"\n",
"# Set up a new example, let's say n= 10 coin flips and p=0.5 for a fair coin.\n",
"n=10\n",
"p=0.5\n",
"\n",
"# Set up n success, remember indexing starts at 0, so use n+1\n",
"x = range(n+1)\n",
"\n",
"# Now create the probability mass function\n",
"Y = binom.pmf(x,n,p)\n",
"\n",
"#Show\n",
"Y\n",
"\n",
"# Next we'll visualize the pmf by plotting it."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Finally, let's plot the binomial distribution to get the full picture."
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x15941a90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"# For simple plots, matplotlib is fine, seaborn is unnecessary.\n",
"\n",
"# Now simply use plot\n",
"plt.plot(x,Y,'o')\n",
"\n",
"#Title (use y=1.08 to raise the long title a little more above the plot)\n",
"plt.title('Binomial Distribution PMF: 10 coin Flips, Odds of Success for Heads is p=0.5',y=1.08)\n",
"\n",
"#Axis Titles\n",
"plt.xlabel('Number of Heads')\n",
"plt.ylabel('Probability')\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"That's it for the review on Binomial Distributions. More info can be found at the following sources:\n",
"\n",
"1.) http://en.wikipedia.org/wiki/Binomial_distribution\n",
"\n",
"2.) http://stattrek.com/probability-distributions/binomial.aspx\n",
"\n",
"3.) http://mathworld.wolfram.com/BinomialDistribution.html"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Thanks!"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
}
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
================================================
FILE: .ipynb_checkpoints/Chi-Square-checkpoint.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Chi-Square\n",
"\n",
"In this Statistics Appendix Lecture, we'll go over the Chi-Square Distribution and the Chi-Square Test. \n",
"\n",
"*Note: Before viewing this lecture, see the Hypothesis Testing Notebook Lecture.*\n",
"\n",
"Let's start by introducing the general idea of observed and theoretical frequencies, then later we'll approach the idea of the Chi-Sqaure Distribution and its definition. After that we'll do a qcuik example with Scipy on using the Chi-Square Test.\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Supppose that you tossed a coin 100 times. Theoretically you would expect 50 tails and 50 heads, however it is pretty unlikely you get that result exactly. Then a question arises... how far off from you expected/theoretical frequency would you have to be in order to conclude that the observed result is statistically significant and is not just due to random variations.\n",
"\n",
"We can begin to think about this question by defining an example set of possible events. We'll call them Events 1 through *k*. Each of these events has an expected (theoretical) frequency and an observed frequency. We can display this as a table:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<table>\n",
"<tr>\n",
"<th>Event</th>\n",
"<th>Event 1</th>\n",
"<th>Event 2</th>\n",
"<th>Event 3</th>\n",
"<th>...</th>\n",
"<th>Event k</th>\n",
"</tr>\n",
"<tr>\n",
"<td>Observed Frequency</td>\n",
"<td>$$o_1$$</td>\n",
"<td>$$o_2$$</td>\n",
"<td>$$o_3$$</td>\n",
"<td>...</td>\n",
"<td>$$o_k$$</td>\n",
"</tr>\n",
"<tr>\n",
"<td>Expected Frequency</td>\n",
"<td>$$e_1$$</td>\n",
"<td>$$e_2$$</td>\n",
"<td>$$e_3$$</td>\n",
"<td>...</td>\n",
"<td>$$e_k$$</td>\n",
"</tr>\n",
"</table>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Since we wanted to know whether observed frequencies differ significantly from the expected frequencies we'll have to define a term for a measure of discrepency.\n",
"\n",
"We'll define this measure as Chi-Square, which will be the sum of the squared difference between the observed and expected frequency divided by the expected frequency for all events. To show this more clearly, this is mathematically written as:\n",
"$$ \\chi ^2 = \\frac{(o_1 - e_1)^2}{e_1}+\\frac{(o_2 - e_2)^2}{e_2}+...+\\frac{(o_k - e_k)^2}{e_k} $$\n",
"Which is the same as:\n",
"$$\\chi ^2 = \\sum^{k}_{j=1} \\frac{(o_j - e_j)^2}{e_j} $$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If the total frequency is N"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$ \\sum o_j = \\sum e_j = N $$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Then we could rewrite the Chi-Square Formula to be:\n",
"$$ \\chi ^2 = \\sum \\frac{o_j ^2}{e_j ^2} - N$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can now see that if the Chi Square value is equal to zero, then the observed and theoretical frequencies agree exactly. While if the Chi square value is greater than zero, they do not agree.\n",
"\n",
"The sampling distribution of Chi Square is approximated very closely by the *Chi-Square distribution*"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### The Chi Square Distribution\n",
"\n",
"The Chi-Square Distribution is related to the standard normal distribution. If a random variable Z, then Z<sup>2</sup> has the Chi Square distribution with one degree of freedom. This idea is best presented graphically in a video. I've embedded a video below which goes over this an a way better than this static iPython Notebook format.\n",
"\n",
"Here is an excellent video explaining the basics of the Chi Square Distribution."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"image/jpeg": "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",
"text/html": [
"\n",
" <iframe\n",
" width=\"400\"\n",
" height=\"300\"\n",
" src=\"https://www.youtube.com/embed/hcDb12fsbBU\"\n",
" frameborder=\"0\"\n",
" allowfullscreen\n",
" \n",
" ></iframe>\n",
" "
],
"text/plain": [
"<IPython.lib.display.YouTubeVideo at 0x26ba9ed84d0>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from IPython.display import YouTubeVideo\n",
"YouTubeVideo(\"hcDb12fsbBU\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### The Chi Square Test for Goodness of Fit\n",
"\n",
"We can now use the [Chi-Square test](http://stattrek.com/chi-square-test/goodness-of-fit.aspx?Tutorial=AP) can be used to determine how well a theoretical distribution fits an observed empirical distribution. \n",
"\n",
"Scipy will basically be constructing and looking up this table for us:\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url='http://upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Chi-square_distributionCDF-English.png/300px-Chi-square_distributionCDF-English.png'\n",
"\n",
"from IPython.display import Image\n",
"Image(url)"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
}
},
"source": [
"Let's go ahead and do an example problem. Say you are at a casino and are in charge of monitoring a [craps](http://en.wikipedia.org/wiki/Craps)(a dice game where two dice are rolled). You are suspcious that a player may have switched out the casino's dice for their own. How do we use the Chi-Square test to check whether or not this player is cheating?\n",
"\n",
"You will need some observations in order to begin. You begin to keep track of this player's roll outcomes.You record the next 500 rolls taking note of the sum of the dice roll result and the number of times it occurs.\n",
"\n",
"You record the following:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<table>\n",
"<td>Sum of Dice Roll</td>\n",
"<td>2</td>\n",
"<td>3</td>\n",
"<td>4</td>\n",
"<td>5</td>\n",
"<td>6</td>\n",
"<td>7</td>\n",
"<td>8</td>\n",
"<td>9</td>\n",
"<td>10</td>\n",
"<td>11</td>\n",
"<td>12</td>\n",
"<tr>\n",
"<td>Number of Times Observed</td>\n",
"<td>8</td>\n",
"<td>32</td>\n",
"<td>48</td>\n",
"<td>59</td>\n",
"<td>67</td>\n",
"<td>84</td>\n",
"<td>76</td>\n",
"<td>57</td>\n",
"<td>34</td>\n",
"<td>28</td>\n",
"<td>7</td>\n",
"</tr>\n",
"</table>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we also know the espected frequency of these sums for a fair dice. That frequency distribution looks like this:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<table>\n",
"<td>Sum of Dice Roll</td>\n",
"<td>2</td>\n",
"<td>3</td>\n",
"<td>4</td>\n",
"<td>5</td>\n",
"<td>6</td>\n",
"<td>7</td>\n",
"<td>8</td>\n",
"<td>9</td>\n",
"<td>10</td>\n",
"<td>11</td>\n",
"<td>12</td>\n",
"</tr>\n",
"<tr>\n",
"<td>Expected Frequency</td>\n",
"<td>1/36</td>\n",
"<td>2/36</td>\n",
"<td>3/36</td>\n",
"<td>4/36</td>\n",
"<td>5/36</td>\n",
"<td>6/36</td>\n",
"<td>5/36</td>\n",
"<td>4/36</td>\n",
"<td>3/36</td>\n",
"<td>2/36</td>\n",
"<td>1/36</td>\n",
"</tr>\n",
"</table>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we can calculated the expected number of rolls by multiplying the expected frequency with the total sum of the rolls (500 rolls)."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"500"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Check sum of the rolls\n",
"observed = [8,32,48,59,67,84,76,57,34,28,7]\n",
"roll_sum = sum(observed)\n",
"roll_sum"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"[0.027777777777777776,\n",
" 0.05555555555555555,\n",
" 0.08333333333333333,\n",
" 0.1111111111111111,\n",
" 0.1388888888888889,\n",
" 0.16666666666666666,\n",
" 0.1388888888888889,\n",
" 0.1111111111111111,\n",
" 0.08333333333333333,\n",
" 0.05555555555555555,\n",
" 0.027777777777777776]"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# The expected frequency\n",
"freq = [1,2,3,4,5,6,5,4,3,2,1]\n",
"\n",
"# Note use of float for python 2.7\n",
"possible_rolls = 1.0/36\n",
"\n",
"freq = [possible_rolls*dice for dice in freq]\n",
"\n",
"#Check\n",
"freq"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Excellent, now let's multiply our frequency by the sum to get the expected number of rolls for each frequency."
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"[13.888888888888888,\n",
" 27.777777777777775,\n",
" 41.666666666666664,\n",
" 55.55555555555555,\n",
" 69.44444444444444,\n",
" 83.33333333333333,\n",
" 69.44444444444444,\n",
" 55.55555555555555,\n",
" 41.666666666666664,\n",
" 27.777777777777775,\n",
" 13.888888888888888]"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"expected = [roll_sum*f for f in freq]\n",
"expected"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can now use Scipy to perform the [Chi Square Test](http://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.stats.chisquare.html) by using chisquare."
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The chi-squared test statistic is 9.89\n",
"The p-value for the test is 0.45\n"
]
}
],
"source": [
"from scipy import stats\n",
"\n",
"chisq,p = stats.chisquare(observed,expected)\n",
"\n",
"print( 'The chi-squared test statistic is %.2f' %chisq)\n",
"print( 'The p-value for the test is %.2f' %p)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"stats.chisquare returns two values, the chi-squared test statistic and the p-value of the test.\n",
"\n",
"With such a high p-value, we have no reason to doubt the fairness of the dice.\n",
"\n",
"That's it for the Chi-Square Distirbution and Test!\n",
"\n",
"For more information, check out these links:\n",
"\n",
"1. [Wikipedia](http://en.wikipedia.org/wiki/Chi-squared_test)\n",
"\n",
"2. [Stat trek](http://stattrek.com/chi-square-test/independence.aspx)\n",
"\n",
"3. [Khan Academy](https://www.khanacademy.org/math/probability/statistics-inferential/chi-square/v/pearson-s-chi-square-test-goodness-of-fit)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
}
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
================================================
FILE: .ipynb_checkpoints/Continuous Uniform Distributions-checkpoint.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Let's learn about Continous Uniform Distributions. Note: You should look at Discrete Uniform Distributions first."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If we took a discrete uniform distribution to probability of any outcome was 1/n for any outcome, however for a *continous* distribution, our data can not be divided in discrete components, for example weighing an object. With perfect precision on weight, the data can take on any value between two points(e.g 5.4 grams,5.423 grams, 5.42322 grams, etc.) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This means that our n possible values from the discrete uniform distribution is going towards infinity, thus the probability of any *individual* outcome for a continous distribution is 1/∞ ,technically undefined or zero if we take the limit to infinity. Thus we can only take probability measurements of ranges of values, and not just a specific point. Let's look at some definitions and examples to get a better understanding!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##### A continous random variable X with a probability density function is a continous uniform random variable when:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$f(x)=\\frac{1}{(b-a)}\\\\\\\\a<=x<=b$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This makes sense, since for a discrete uniform distribution the f(x)=1/n but in the continous case we don't have a specific n possibilities, we have a range from the min (a) to the max (b)!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The mean is simply the average of the min and max:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\\frac{(a+b)}{2}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The variance is defined as:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$ \\sigma^2 = \\frac{(b-a)^2}{12}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So what would an example problem look like? Let's say on average, a taxi ride in NYC takes 22 minutes. After taking some time measurements from experiments we gather that all the taxi rides are uniformly distributed between 19 and 27 minutes. What is the probability density function of a taxi ride, or f(x)?"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The probability density function results in 0.125\n"
]
}
],
"source": [
"#Let's solve this with python\n",
"\n",
"#Lower bound time\n",
"a = 19\n",
"\n",
"#Upper bound time\n",
"b = 27\n",
"\n",
"#Then using our probability density function we get\n",
"fx = 1.0/(b-a)\n",
"\n",
"#show \n",
"print('The probability density function results in %1.3f' %fx)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The variance of the continous unifrom distribution is 5.3\n"
]
}
],
"source": [
"#We can also get the variance \n",
"var = ((b-a)**2 )/12\n",
"\n",
"#Show\n",
"print('The variance of the continous unifrom distribution is %1.1f' %var)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So let's ask the question, what's the probability that the taxi ride will last *at least* 25 minutes?"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" The probability that the taxi ride will last at least 25 minutes is 25.0%\n"
]
}
],
"source": [
"# This is the same as the PDF of f(27) (the entire space) minus the probability space less than 25 minutes.\n",
"\n",
"#f(27)\n",
"fx_1 = 27.0/(b-a)\n",
"#f(25)\n",
"fx_2 = 25.0/(b-a)\n",
"\n",
"#Our answer is then\n",
"ans = fx_1-fx_2\n",
"\n",
"#print\n",
"print(' The probability that the taxi ride will last at least 25 minutes is %2.1f%%' %(100*ans))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let's see how to do this automatically with scipy."
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x17f8a53ec60>]"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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79+mn+MTzm7Uc3wAAMCNY+b9m7/VBQAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALIPgAwAALGNcwWf79u1KS0tTZGSksrKydOTIkWuO7enp0apVqzR16lRNmjRJHo9nxJjPP/9c69ev1/3336/IyEjNmjVL7733XsiY++67TzabbURbvXp1cExZWdmI43PmzBnPEgEAQBgyHXzq6urk8XhUWVmptrY2zZ07V4WFhers7Bx1fCAQUHx8vCorKzVr1qxRx6xbt05vvPGGXnvtNX300UcqLy/X8uXL1dbWFhzT0tKinp6eYPN6vZKkH//4xyFzLV68OGRcU1OT2SUCAIAwZTMMwzBzQk5OjjIzM7Vjx45g3/Tp01VUVKTq6urrnjt//nzNnj1bW7ZsCelPTk5WZWVlyO5NUVGRoqOj9dZbb406l8fj0e9//3t1dHTIZrNJurrjc/HiRTU0NJhZUpDf75fT6ZTP51NsbOy45gAAADeXmfdvUzs+g4ODam1tldvtDul3u906duyY+Ur/TyAQUGRkZEhfVFSUjh49es063nrrLf385z8Php4vvP/++0pISNADDzygJ554Qn19fde9rt/vD2kAACB8mQo+58+f19DQkBITE0P6ExMT1dvbO+4iFi1apM2bN6ujo0PDw8Pyer1qbGxUT0/PqOMbGhp08eJFlZWVhfQXFhbq7bff1qFDh7Rp0ya1tLTo4YcfViAQGHWe6upqOZ3OYEtJSRn3GgAAwLffuL7c/OVdFsMwRvSZsXXrVqWnp2vatGmy2+1as2aNHnvsMUVERIw6/te//rUKCwuVnJwc0l9cXKwlS5Zo5syZWrp0qfbt26c///nPevfdd0edZ+3atfL5fMHW1dU17jUAAIBvP1PBJy4uThERESN2d/r6+kbsApkRHx+vhoYGDQwM6NNPP9XHH3+s6OhopaWljRj76aef6uDBg/q3f/u3r5w3KSlJqamp6ujoGPW4w+FQbGxsSAMAAOHLVPCx2+3KysoK/kbVF7xer/Ly8r52MZGRkbr77rt15coV1dfXa9myZSPG7Nq1SwkJCVqyZMlXznfhwgV1dXUpKSnpa9cGAABufbeZPaGiokIlJSXKzs5Wbm6udu7cqc7OTpWXl0u6+vFRd3e3ampqgue0t7dLki5duqRz586pvb1ddrtdGRkZkqQTJ06ou7tbs2fPVnd3t6qqqjQ8PKxnn3025NrDw8PatWuXSktLddttoaVfunRJVVVVWrFihZKSknT27Fm98MILiouL0/Lly80uEwAAhCHTwae4uFgXLlzQ+vXr1dPTo5kzZ6qpqUmpqamSrj6w8MvP9HnooYeCP7e2tmr37t1KTU3V2bNnJUmXL1/WunXrdPr0aUVHR+uRRx7Rm2++qTvvvDNknoMHD6qzs1M///nPR9QVERGhkydPqqamRhcvXlRSUpIWLFiguro6xcTEmF0mAAAIQ6af4xPOeI4PAAC3nhv2HB8AAIBbGcEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYBsEHAABYxriCz/bt25WWlqbIyEhlZWXpyJEj1xzb09OjVatWaerUqZo0aZI8Hs+IMZ9//rnWr1+v+++/X5GRkZo1a5bee++9kDFVVVWy2WwhzeVyhYwxDENVVVVKTk5WVFSU5s+fr1OnTo1niQAAIAyZDj51dXXyeDyqrKxUW1ub5s6dq8LCQnV2do46PhAIKD4+XpWVlZo1a9aoY9atW6c33nhDr732mj766COVl5dr+fLlamtrCxk3Y8YM9fT0BNvJkydDjr/66qvavHmztm3bppaWFrlcLhUUFKi/v9/sMgEAQBiyGYZhmDkhJydHmZmZ2rFjR7Bv+vTpKioqUnV19XXPnT9/vmbPnq0tW7aE9CcnJ6uyslKrV68O9hUVFSk6OlpvvfWWpKs7Pg0NDWpvbx91bsMwlJycLI/Ho+eee07S1dCVmJiojRs36sknn/zKtfn9fjmdTvl8PsXGxn7leAAAMPHMvH+b2vEZHBxUa2ur3G53SL/b7daxY8fMV/p/AoGAIiMjQ/qioqJ09OjRkL6Ojg4lJycrLS1NP/nJT3T69OngsTNnzqi3tzekNofDofz8/GvWFggE5Pf7QxoAAAhfpoLP+fPnNTQ0pMTExJD+xMRE9fb2jruIRYsWafPmzero6NDw8LC8Xq8aGxvV09MTHJOTk6Oamhrt379fv/rVr9Tb26u8vDxduHBBkoLXN1NbdXW1nE5nsKWkpIx7DQAA4NtvXF9uttlsIa8NwxjRZ8bWrVuVnp6uadOmyW63a82aNXrssccUERERHFNYWKgVK1bowQcf1MKFC/Xuu+9Kkn7zm9+Mu7a1a9fK5/MFW1dX17jXAAAAvv1MBZ+4uDhFRESM2EHp6+sbsdNiRnx8vBoaGjQwMKBPP/1UH3/8saKjo5WWlnbNc+644w49+OCD6ujokKTgb3iZqc3hcCg2NjakAQCA8GUq+NjtdmVlZcnr9Yb0e71e5eXlfe1iIiMjdffdd+vKlSuqr6/XsmXLrjk2EAjoT3/6k5KSkiRJaWlpcrlcIbUNDg6qubn5G6kNAADc+m4ze0JFRYVKSkqUnZ2t3Nxc7dy5U52dnSovL5d09eOj7u5u1dTUBM/54jexLl26pHPnzqm9vV12u10ZGRmSpBMnTqi7u1uzZ89Wd3e3qqqqNDw8rGeffTY4xzPPPKOlS5fq3nvvVV9fn15++WX5/X6VlpZKuvoRl8fj0YYNG5Senq709HRt2LBBt99+u1atWjXuGwQAAMKH6eBTXFysCxcuaP369erp6dHMmTPV1NSk1NRUSVcfWPjlZ/o89NBDwZ9bW1u1e/dupaam6uzZs5Kky5cva926dTp9+rSio6P1yCOP6M0339Sdd94ZPO8vf/mLfvrTn+r8+fOKj4/XnDlz9MEHHwSvK0nPPvus/vGPf+gXv/iF/va3vyknJ0cHDhxQTEyM2WUCAIAwZPo5PuGM5/gAAHDruWHP8QEAALiVEXwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBlEHwAAIBljCv4bN++XWlpaYqMjFRWVpaOHDlyzbE9PT1atWqVpk6dqkmTJsnj8YwY8/nnn2v9+vW6//77FRkZqVmzZum9994LGVNdXa3vf//7iomJUUJCgoqKivTJJ5+EjCkrK5PNZgtpc+bMGc8SAQBAGDIdfOrq6uTxeFRZWam2tjbNnTtXhYWF6uzsHHV8IBBQfHy8KisrNWvWrFHHrFu3Tm+88YZee+01ffTRRyovL9fy5cvV1tYWHNPc3KzVq1frgw8+kNfr1ZUrV+R2uzUwMBAy1+LFi9XT0xNsTU1NZpcIAADClM0wDMPMCTk5OcrMzNSOHTuCfdOnT1dRUZGqq6uve+78+fM1e/ZsbdmyJaQ/OTlZlZWVWr16dbCvqKhI0dHReuutt0ad69y5c0pISFBzc7PmzZsn6eqOz8WLF9XQ0GBmSUF+v19Op1M+n0+xsbHjmgMAANxcZt6/Te34DA4OqrW1VW63O6Tf7Xbr2LFj5iv9P4FAQJGRkSF9UVFROnr06DXP8fl8kqQpU6aE9L///vtKSEjQAw88oCeeeEJ9fX3Xva7f7w9pAAAgfJkKPufPn9fQ0JASExND+hMTE9Xb2zvuIhYtWqTNmzero6NDw8PD8nq9amxsVE9Pz6jjDcNQRUWFfvjDH2rmzJnB/sLCQr399ts6dOiQNm3apJaWFj388MMKBAKjzlNdXS2n0xlsKSkp414DAAD49hvXl5ttNlvIa8MwRvSZsXXrVqWnp2vatGmy2+1as2aNHnvsMUVERIw6fs2aNfrjH/+o2trakP7i4mItWbJEM2fO1NKlS7Vv3z79+c9/1rvvvjvqPGvXrpXP5wu2rq6uca8BAAB8+5kKPnFxcYqIiBixu9PX1zdiF8iM+Ph4NTQ0aGBgQJ9++qk+/vhjRUdHKy0tbcTYp556Sr/73e/03//937rnnnuuO29SUpJSU1PV0dEx6nGHw6HY2NiQBgAAwpep4GO325WVlSWv1xvS7/V6lZeX97WLiYyM1N13360rV66ovr5ey5YtCx4zDENr1qzR3r17dejQoVFD0ZdduHBBXV1dSkpK+tq1AQCAW99tZk+oqKhQSUmJsrOzlZubq507d6qzs1Pl5eWSrn581N3drZqamuA57e3tkqRLly7p3Llzam9vl91uV0ZGhiTpxIkT6u7u1uzZs9Xd3a2qqioNDw/r2WefDc6xevVq7d69W42NjYqJiQnuOjmdTkVFRenSpUuqqqrSihUrlJSUpLNnz+qFF15QXFycli9fPu4bBAAAwofp4FNcXKwLFy5o/fr16unp0cyZM9XU1KTU1FRJVx9Y+OVn+jz00EPBn1tbW7V7926lpqbq7NmzkqTLly9r3bp1On36tKKjo/XII4/ozTff1J133hk874tfn58/f37I3Lt27VJZWZkiIiJ08uRJ1dTU6OLFi0pKStKCBQtUV1enmJgYs8sEAABhyPRzfMIZz/EBAODWc8Oe4wMAAHArI/gAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLIPgAAADLGFfw2b59u9LS0hQZGamsrCwdOXLkmmN7enq0atUqTZ06VZMmTZLH4xkx5vPPP9f69et1//33KzIyUrNmzdJ7771n+rqGYaiqqkrJycmKiorS/PnzderUqfEsEQAAhCHTwaeurk4ej0eVlZVqa2vT3LlzVVhYqM7OzlHHBwIBxcfHq7KyUrNmzRp1zLp16/TGG2/otdde00cffaTy8nItX75cbW1tpq776quvavPmzdq2bZtaWlrkcrlUUFCg/v5+s8sEAADhyDDpBz/4gVFeXh7SN23aNOP555//ynPz8/ONp59+ekR/UlKSsW3btpC+ZcuWGT/72c/GfN3h4WHD5XIZr7zySvD45cuXDafTafzyl7/8ytoMwzB8Pp8hyfD5fGMaDwAAJp6Z929TOz6Dg4NqbW2V2+0O6Xe73Tp27Ni4w1cgEFBkZGRIX1RUlI4ePTrm6545c0a9vb0hYxwOh/Lz869ZWyAQkN/vD2kAACB8mQo+58+f19DQkBITE0P6ExMT1dvbO+4iFi1apM2bN6ujo0PDw8Pyer1qbGxUT0/PmK/7xb9maquurpbT6Qy2lJSUca8BAAB8+43ry802my3ktWEYI/rM2Lp1q9LT0zVt2jTZ7XatWbNGjz32mCIiIkxf10xta9eulc/nC7aurq5xrwEAAHz7mQo+cXFxioiIGLGD0tfXN2KnxYz4+Hg1NDRoYGBAn376qT7++GNFR0crLS1tzNd1uVySZKo2h8Oh2NjYkAYAAMKXqeBjt9uVlZUlr9cb0u/1epWXl/e1i4mMjNTdd9+tK1euqL6+XsuWLRvzddPS0uRyuULGDA4Oqrm5+RupDQAA3PpuM3tCRUWFSkpKlJ2drdzcXO3cuVOdnZ0qLy+XdPXjo+7ubtXU1ATPaW9vlyRdunRJ586dU3t7u+x2uzIyMiRJJ06cUHd3t2bPnq3u7m5VVVVpeHhYzz777Jiva7PZ5PF4tGHDBqWnpys9PV0bNmzQ7bffrlWrVo37BgEAgPBhOvgUFxfrwoULWr9+vXp6ejRz5kw1NTUpNTVV0tUHFn75mT4PPfRQ8OfW1lbt3r1bqampOnv2rCTp8uXLWrdunU6fPq3o6Gg98sgjevPNN3XnnXeO+bqS9Oyzz+of//iHfvGLX+hvf/ubcnJydODAAcXExJhdJgAACEM2wzCMiS7i28Lv98vpdMrn8/F9HwAAbhFm3r/5W10AAMAyCD4AAMAyCD4AAMAyCD4AAMAyCD4AAMAyCD4AAMAyCD4AAMAyCD4AAMAyCD4AAMAyTP/JinD2xUOs/X7/BFcCAADG6ov37bH8MQqCzz/p7++XJKWkpExwJQAAwKz+/n45nc7rjuFvdf2T4eFhffbZZ4qJiZHNZvtG5/b7/UpJSVFXVxd/B+wG4j7fHNznm4d7fXNwn2+OG3WfDcNQf3+/kpOTNWnS9b/Fw47PP5k0aZLuueeeG3qN2NhY/lPdBNznm4P7fPNwr28O7vPNcSPu81ft9HyBLzcDAADLIPgAAADLIPjcJA6HQy+99JIcDsdElxLWuM83B/f55uFe3xzc55vj23Cf+XIzAACwDHZ8AACAZRB8AACAZRB8AACAZRB8AACAZRB8boLt27crLS1NkZGRysrK0pEjRya6pLBz+PBhLV26VMnJybLZbGpoaJjoksJSdXW1vv/97ysmJkYJCQkqKirSJ598MtFlhZ0dO3boe9/7XvAhb7m5udq3b99ElxX2qqurZbPZ5PF4JrqUsFNVVSWbzRbSXC7XhNRC8LnB6urq5PF4VFlZqba2Ns2dO1eFhYXq7Oyc6NLCysDAgGbNmqVt27ZNdClhrbm5WatXr9YHH3wgr9erK1euyO12a2BgYKJLCyv33HOPXnnlFf3hD3/QH/7wBz388MNatmyZTp06NdGlha2Wlhbt3LlT3/ve9ya6lLA1Y8YM9fT0BNvJkycnpA5+nf0Gy8nJUWZmpnbs2BHsmz59uoqKilRdXT2BlYUvm82md955R0VFRRNdStg7d+6cEhIS1NzcrHnz5k10OWFtypQp+n//7//p8ccfn+hSws6lS5eUmZmp7du36+WXX9bs2bO1ZcuWiS4rrFRVVamhoUHt7e0TXQo7PjfS4OCgWltb5Xa7Q/rdbreOHTs2QVUB3xyfzyfp6psyboyhoSH99re/1cDAgHJzcye6nLC0evVqLVmyRAsXLpzoUsJaR0eHkpOTlZaWpp/85Cc6ffr0hNTBHym9gc6fP6+hoSElJiaG9CcmJqq3t3eCqgK+GYZhqKKiQj/84Q81c+bMiS4n7Jw8eVK5ubm6fPmyoqOj9c477ygjI2Oiywo7v/3tb/U///M/amlpmehSwlpOTo5qamr0wAMP6K9//atefvll5eXl6dSpU/rOd75zU2sh+NwENpst5LVhGCP6gFvNmjVr9Mc//lFHjx6d6FLC0tSpU9Xe3q6LFy+qvr5epaWlam5uJvx8g7q6uvT000/rwIEDioyMnOhywlphYWHw5wcffFC5ubm6//779Zvf/EYVFRU3tRaCzw0UFxeniIiIEbs7fX19I3aBgFvJU089pd/97nc6fPiw7rnnnokuJyzZ7XZ997vflSRlZ2erpaVFW7du1RtvvDHBlYWP1tZW9fX1KSsrK9g3NDSkw4cPa9u2bQoEAoqIiJjACsPXHXfcoQcffFAdHR03/dp8x+cGstvtysrKktfrDen3er3Ky8uboKqA8TMMQ2vWrNHevXt16NAhpaWlTXRJlmEYhgKBwESXEVb+9V//VSdPnlR7e3uwZWdn62c/+5na29sJPTdQIBDQn/70JyUlJd30a7Pjc4NVVFSopKRE2dnZys3N1c6dO9XZ2any8vKJLi2sXLp0Sf/7v/8bfH3mzBm1t7drypQpuvfeeyewsvCyevVq7d69W42NjYqJiQnuZjqdTkVFRU1wdeHjhRdeUGFhoVJSUtTf36/f/va3ev/99/Xee+9NdGlhJSYmZsT30+644w595zvf4Xtr37BnnnlGS5cu1b333qu+vj69/PLL8vv9Ki0tvem1EHxusOLiYl24cEHr169XT0+PZs6cqaamJqWmpk50aWHlD3/4gxYsWBB8/cVnxqWlpfqv//qvCaoq/HzxWIb58+eH9O/atUtlZWU3v6Aw9de//lUlJSXq6emR0+nU9773Pb333nsqKCiY6NKAcfnLX/6in/70pzp//rzi4+M1Z84cffDBBxPyXshzfAAAgGXwHR8AAGAZBB8AAGAZBB8AAGAZBB8AAGAZBB8AAGAZBB8AAGAZBB8AAGAZBB8AAGAZBB8AAGAZBB8AAGAZBB8AAGAZBB8AAGAZ/x8GHnVTFxwIdQAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Import the following\n",
"from scipy.stats import uniform\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"#Let's set an A and B\n",
"A=0\n",
"B=5\n",
"\n",
"# Set x as 100 linearly spaced points between A and B\n",
"x = np.linspace(A,B,100)\n",
"\n",
"# Use uniform(loc=start point,scale=endpoint)\n",
"rv = uniform(loc=A,scale=B)\n",
"\n",
"#Plot the PDF of that uniform distirbution\n",
"plt.plot(x,rv.pdf(x))\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note the above line is at 0.2, as we would expect since 1/(5-0) is 1/5 or 0.2.\n",
"\n",
"####That's it for Uniform Continuous Distributions. Here are some more resource for you:\n",
"\n",
"1.)http://en.wikipedia.org/wiki/Uniform_distribution_%28continuous%29\n",
"\n",
"2.)http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.uniform.html\n",
"\n",
"3.)http://mathworld.wolfram.com/UniformDistribution.html"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
}
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
================================================
FILE: .ipynb_checkpoints/Discrete Uniform Distributions-checkpoint.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Let's start off with a definition for discrete uniform distributions."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Definition: A random variable X has a discrete uniform distribution if each of the n values in its range:\n",
" x1,x2,x3....xn has equal probability:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$ f(x_{i}) = 1/n $$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let's use python to show a simple example!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First the imports:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"# Import all the usual imports from the Python for Data Analysis and Visualization Course.\n",
"import numpy as np\n",
"from numpy.random import randn\n",
"import pandas as pd\n",
"from scipy import stats\n",
"import matplotlib as mpl\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from __future__ import division\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let's set up a dice roll and plot the distribution using seaborn before we go use matplotlib by itself."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Probability Mass Function for Dice Roll')"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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ISEhLj+7Vxrj9Rzf3dNURZc2Lz/+jXzyqiiUlXQZ9ciRI1c837/++qu2b9/uCChFm7+/vwzDuKrQXLFiRUdA/uSTT9SyZUstXrxYr7/+uqOm6FwUd74uP1coH7gHB6UiMjLScWNfcdxdSw8ICNCGDRtkGIbT+9nZ2SooKHD5hWe32132UdRW9Avkgw8+UMuWLTVr1iynupMnT7odV3H79PX1VZUqVUqc0+81dOhQvf/++/r444+VmpqqatWqFfvUWUl69+6tl19+WbNnz3b6l+vllixZIh8fH3366adOq1YfffSRS21cXJzi4uJUWFioTZs26R//+IeGDRum4OBgde/eXdLFm6f79Omj06dP65tvvtH48ePVsWNH/fjjjwoPD7/meRTx8/Nze5P5ta4SFalevbq8vLxu6A2lAQEBKigo0JEjR5xCjmEYstvtjhvMPSUgIECHDx92aS+6Of3yPzvXcy+LO4Zh6JNPPlHlypVL/DNfo0aNK57vwMBAVaxYsdibra8m8FaoUMFpHK1bt1ZUVJQmTJigP//5zwoLC3P83XD48GGX0HXo0CHuvymnWMHBTa1Vq1Y6deqUyy/YhQsXOt6/1FdffeX0ZERhYaGWLl2qunXrOv7islgsLo+/bt++3e0TS5L073//2+lpkJMnT+qTTz5RXFycvLy8rntukhzjKO5f6VFRUYqNjdXkyZO1aNEi9e7d+7q+N+jWW2/VX//6V3Xq1Em9evUqtq7oyxgvndfZs2f1/vvvF9vHy8tL0dHRmjFjhiTpu+++c6mpXLmy2rVrp7Fjxyo/P187d+685jlcqnbt2srOznb6rPPz8/XFF19c1/4qVqyoFi1a6F//+leJIelKn9elin42P/jgA6f2ZcuW6fTp0y4/uzdaq1attGvXLpfPY+HChbJYLHrooYc8ctwJEyZo165dGjp0qFNIvly7du20evVq7d69u9iajh076ueff1ZAQIDLal6zZs2u64sVrVarZsyYoXPnzunVV1+VJD388MOSXD+rzMxMZWVlefyzgmewgoObWs+ePTVjxgz16tVLe/fuVePGjfXtt99q0qRJat++vR555BGn+sDAQD388MN66aWXHE9R/fDDD06Pinfs2FGvvPKKxo8frxYtWmj37t2aOHGiIiIiXJ7akS7+Am/durWGDx+uCxcuaPLkycrNzdWECRN+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ycmy2WyOLSws7AbMDgAA3KxK5SZji8Xi9NowDJe2K9Vf2n7hwgUFBQVpzpw5ioqKUvfu3TV27Finy2CXGj16tHJychzbgQMHfs90AADATc7bkzsPDAyUl5eXy2pNdna2yypNkZCQELf13t7eCggIkCTVrFlTPj4+8vLyctRERkbKbrcrPz9fvr6+Tv2tVqusVuuNmBIAACgHPLqC4+vrq6ioKKWlpTm1p6WlKTY21m2fmJgYl/pVq1apWbNmjhuK77//fv3000+6cOGCo+bHH39UzZo1XcINAAD44/H4Jarhw4frnXfe0fz585WVlaXExETt379f/fv3l3Tx8lHPnj0d9f3799e+ffs0fPhwZWVlaf78+Zo3b55GjBjhqBkwYICOHTumoUOH6scff9Rnn32mSZMmadCgQZ6eDgAAKAc8eolKkrp166Zjx45p4sSJOnz4sBo1aqSVK1cqPDxcknT48GGn78SJiIjQypUrlZiYqBkzZig0NFTTp09X165dHTVhYWFatWqVEhMTddddd+nWW2/V0KFDNXLkSE9PBwAAlAMe/x6cmxHfgwMAQPlz03wPDgAAQFkg4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMh4AAAANMplYAzc+ZMRUREyM/PT1FRUVq7dm2J9enp6YqKipKfn5/q1Kmj2bNnF1u7ZMkSWSwWdenS5QaPGgAAlFceDzhLly7VsGHDNHbsWG3ZskVxcXFq166d9u/f77Z+z549at++veLi4rRlyxaNGTNGQ4YM0bJly1xq9+3bpxEjRiguLs7T0wAAAOWIxTAMw5MHiI6OVtOmTTVr1ixHW2RkpLp06aLk5GSX+pEjR2rFihXKyspytPXv31/btm1TRkaGo62wsFAtWrRQnz59tHbtWp04cUIfffTRVY0pNzdXNptNOTk5qlq16vVPDgAAlJpr+f3t0RWc/Px8bd68WfHx8U7t8fHxWrdunds+GRkZLvVt2rTRpk2bdP78eUfbxIkTVaNGDT377LNXHEdeXp5yc3OdNgAAYF4eDThHjx5VYWGhgoODndqDg4Nlt9vd9rHb7W7rCwoKdPToUUnSf/7zH82bN09z5869qnEkJyfLZrM5trCwsOuYDQAAKC9K5SZji8Xi9NowDJe2K9UXtZ88eVJPP/205s6dq8DAwKs6/ujRo5WTk+PYDhw4cI0zAAAA5Ym3J3ceGBgoLy8vl9Wa7Oxsl1WaIiEhIW7rvb29FRAQoJ07d2rv3r3q1KmT4/0LFy5Ikry9vbV7927VrVvXqb/VapXVar0RUwIAAOWAR1dwfH19FRUVpbS0NKf2tLQ0xcbGuu0TExPjUr9q1So1a9ZMPj4+atCggXbs2KGtW7c6ts6dO+uhhx7S1q1bufwEAAA8u4IjScOHD1dCQoKaNWummJgYzZkzR/v371f//v0lXbx8dPDgQS1cuFDSxSemUlJSNHz4cPXt21cZGRmaN2+eFi9eLEny8/NTo0aNnI5RrVo1SXJpBwAAf0weDzjdunXTsWPHNHHiRB0+fFiNGjXSypUrFR4eLkk6fPiw03fiREREaOXKlUpMTNSMGTMUGhqq6dOnq2vXrp4eKgAAMAmPfw/OzYjvwQEAoPy5ab4HBwAAoCwQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOkQcAAAgOmUSsCZOXOmIiIi5Ofnp6ioKK1du7bE+vT0dEVFRcnPz0916tTR7Nmznd6fO3eu4uLidMstt+iWW27RI488oo0bN3pyCgAAoBzxeMBZunSphg0bprFjx2rLli2Ki4tTu3bttH//frf1e/bsUfv27RUXF6ctW7ZozJgxGjJkiJYtW+aoWbNmjZ566imtXr1aGRkZqlWrluLj43Xw4EFPTwcAAJQDFsMwDE8eIDo6Wk2bNtWsWbMcbZGRkerSpYuSk5Nd6keOHKkVK1YoKyvL0da/f39t27ZNGRkZbo9RWFioW265RSkpKerZs+cVx5SbmyubzaacnBxVrVr1OmYFAABK27X8/vboCk5+fr42b96s+Ph4p/b4+HitW7fObZ+MjAyX+jZt2mjTpk06f/682z5nzpzR+fPnVb16dbfv5+XlKTc312kDAADm5dGAc/ToURUWFio4ONipPTg4WHa73W0fu93utr6goEBHjx5122fUqFG69dZb9cgjj7h9Pzk5WTabzbGFhYVdx2wAAEB5USo3GVssFqfXhmG4tF2p3l27JE2ZMkWLFy/Wv//9b/n5+bnd3+jRo5WTk+PYDhw4cK1TAAAA5Yi3J3ceGBgoLy8vl9Wa7Oxsl1WaIiEhIW7rvb29FRAQ4NT+5ptvatKkSfryyy911113FTsOq9Uqq9V6nbMAAADljUdXcHx9fRUVFaW0tDSn9rS0NMXGxrrtExMT41K/atUqNWvWTD4+Po62N954Q6+88opSU1PVrFmzGz94AABQbnn8EtXw4cP1zjvvaP78+crKylJiYqL279+v/v37S7p4+ejSJ5/69++vffv2afjw4crKytL8+fM1b948jRgxwlEzZcoUjRs3TvPnz1ft2rVlt9tlt9t16tQpT08HAACUAx69RCVJ3bp107FjxzRx4kQdPnxYjRo10sqVKxUeHi5JOnz4sNN34kRERGjlypVKTEzUjBkzFBoaqunTp6tr166OmpkzZyo/P1+PP/6407HGjx+vpKQkT08JAADc5Dz+PTg3I74HBwCA8uem+R4cAACAskDAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAApkPAAQAAplMqAWfmzJmKiIiQn5+foqKitHbt2hLr09PTFRUVJT8/P9WpU0ezZ892qVm2bJkaNmwoq9Wqhg0bavny5Z4aPgAAKGc8HnCWLl2qYcOGaezYsdqyZYvi4uLUrl077d+/3239nj171L59e8XFxWnLli0aM2aMhgwZomXLljlqMjIy1K1bNyUkJGjbtm1KSEjQk08+qQ0bNnh6OgAAoBywGIZhePIA0dHRatq0qWbNmuVoi4yMVJcuXZScnOxSP3LkSK1YsUJZWVmOtv79+2vbtm3KyMiQJHXr1k25ubn6/PPPHTVt27bVLbfcosWLF7vsMy8vT3l5eY7Xubm5CgsLU05OjqpWrXpD5gkAADwrNzdXNpvtqn5/e3QFJz8/X5s3b1Z8fLxTe3x8vNatW+e2T0ZGhkt9mzZttGnTJp0/f77EmuL2mZycLJvN5tjCwsKud0oAAKAc8GjAOXr0qAoLCxUcHOzUHhwcLLvd7raP3W53W19QUKCjR4+WWFPcPkePHq2cnBzHduDAgeudEgAAKAe8S+MgFovF6bVhGC5tV6q/vP1a9mm1WmW1Wq9pzAAAoPzy6ApOYGCgvLy8XFZWsrOzXVZgioSEhLit9/b2VkBAQIk1xe0TAAD8sXg04Pj6+ioqKkppaWlO7WlpaYqNjXXbJyYmxqV+1apVatasmXx8fEqsKW6fAADgj8Xjl6iGDx+uhIQENWvWTDExMZozZ47279+v/v37S7p4f8zBgwe1cOFCSRefmEpJSdHw4cPVt29fZWRkaN68eU5PRw0dOlQPPvigJk+erD/96U/6+OOP9eWXX+rbb7/19HQAAEA54PGA061bNx07dkwTJ07U4cOH1ahRI61cuVLh4eGSpMOHDzt9J05ERIRWrlypxMREzZgxQ6GhoZo+fbq6du3qqImNjdWSJUs0btw4vfTSS6pbt66WLl2q6OhoT08HAACUAx7/Hpyb0bU8Rw8AAG4ON8334AAAAJQFAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdAg4AADAdjwac48ePKyEhQTabTTabTQkJCTpx4kSJfQzDUFJSkkJDQ1WxYkW1bNlSO3fudLz/22+/6fnnn1f9+vVVqVIl1apVS0OGDFFOTo4npwIAAMoRjwacHj16aOvWrUpNTVVqaqq2bt2qhISEEvtMmTJFU6dOVUpKijIzMxUSEqLWrVvr5MmTkqRDhw7p0KFDevPNN7Vjxw69++67Sk1N1bPPPuvJqQAAgHLEYhiG4YkdZ2VlqWHDhlq/fr2io6MlSevXr1dMTIx++OEH1a9f36WPYRgKDQ3VsGHDNHLkSElSXl6egoODNXnyZPXr18/tsf71r3/p6aef1unTp+Xt7X3FseXm5spmsyknJ0dVq1b9HbMEAACl5Vp+f3tsBScjI0M2m80RbiTpvvvuk81m07p169z22bNnj+x2u+Lj4x1tVqtVLVq0KLaPJMdEiws3eXl5ys3NddoAAIB5eSzg2O12BQUFubQHBQXJbrcX20eSgoODndqDg4OL7XPs2DG98sorxa7uSFJycrLjPiCbzaawsLCrnQYAACiHrjngJCUlyWKxlLht2rRJkmSxWFz6G4bhtv1Sl79fXJ/c3Fx16NBBDRs21Pjx44vd3+jRo5WTk+PYDhw4cDVTBQAA5dSVb1i5zODBg9W9e/cSa2rXrq3t27fr119/dXnvyJEjLis0RUJCQiRdXMmpWbOmoz07O9ulz8mTJ9W2bVtVqVJFy5cvl4+PT7HjsVqtslqtJY4ZAACYxzUHnMDAQAUGBl6xLiYmRjk5Odq4caOaN28uSdqwYYNycnIUGxvrtk9ERIRCQkKUlpamJk2aSJLy8/OVnp6uyZMnO+pyc3PVpk0bWa1WrVixQn5+ftc6DQAAYGIeuwcnMjJSbdu2Vd++fbV+/XqtX79effv2VceOHZ2eoGrQoIGWL18u6eKlqWHDhmnSpElavny5vv/+e/Xu3VuVKlVSjx49JF1cuYmPj9fp06c1b9485ebmym63y263q7Cw0FPTAQAA5cg1r+Bci0WLFmnIkCGOp6I6d+6slJQUp5rdu3c7fUnfiy++qLNnz2rgwIE6fvy4oqOjtWrVKvn7+0uSNm/erA0bNkiS6tWr57SvPXv2qHbt2h6cEQAAKA889j04NzO+BwcAgPLnpvgeHAAAgLJCwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKZDwAEAAKbj0YBz/PhxJSQkyGazyWazKSEhQSdOnCixj2EYSkpKUmhoqCpWrKiWLVtq586dxda2a9dOFotFH3300Y2fAAAAKJc8GnB69OihrVu3KjU1Vampqdq6dasSEhJK7DNlyhRNnTpVKSkpyszMVEhIiFq3bq2TJ0+61E6bNk0Wi8VTwwcAAOWUt6d2nJWVpdTUVK1fv17R0dGSpLlz5yomJka7d+9W/fr1XfoYhqFp06Zp7NixeuyxxyRJ7733noKDg/XPf/5T/fr1c9Ru27ZNU6dOVWZmpmrWrOmpaQAAgHLIYys4GRkZstlsjnAjSffdd59sNpvWrVvnts+ePXtkt9sVHx/vaLNarWrRooVTnzNnzuipp55SSkqKQkJCrjiWvLw85ebmOm0AAMC8PBZw7Ha7goKCXNqDgoJkt9uL7SNJwcHBTu3BwcFOfRITExUbG6s//elPVzWW5ORkx31ANptNYWFhVzsNAABQDl1zwElKSpLFYilx27RpkyS5vT/GMIwr3jdz+fuX9lmxYoW+/vprTZs27arHPHr0aOXk5Di2AwcOXHVfAABQ/lzzPTiDBw9W9+7dS6ypXbu2tm/frl9//dXlvSNHjris0BQputxkt9ud7qvJzs529Pn666/1888/q1q1ak59u3btqri4OK1Zs8Zlv1arVVartcQxAwAA87jmgBMYGKjAwMAr1sXExCgnJ0cbN25U8+bNJUkbNmxQTk6OYmNj3faJiIhQSEiI0tLS1KRJE0lSfn6+0tPTNXnyZEnSqFGj9Je//MWpX+PGjfW3v/1NnTp1utbpAAAAE/LYU1SRkZFq27at+vbtq7fffluS9Nxzz6ljx45OT1A1aNBAycnJevTRR2WxWDRs2DBNmjRJt99+u26//XZNmjRJlSpVUo8ePSRdXOVxd2NxrVq1FBER4anpAACAcsRjAUeSFi1apCFDhjieiurcubNSUlKcanbv3q2cnBzH6xdffFFnz57VwIEDdfz4cUVHR2vVqlXy9/f35FABAICJWAzDMMp6EKUtNzdXNptNOTk5qlq1alkPBwAAXIVr+f3N/0UFAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMh4ADAABMx6MB5/jx40pISJDNZpPNZlNCQoJOnDhRYh/DMJSUlKTQ0FBVrFhRLVu21M6dO13qMjIy9PDDD6ty5cqqVq2aWrZsqbNnz3poJgAAoDzxaMDp0aOHtm7dqtTUVKWmpmrr1q1KSEgosc+UKVM0depUpaSkKDMzUyEhIWrdurVOnjzpqMnIyFDbtm0VHx+vjRs3KjMzU4MHD1aFCixIAQAASYaH7Nq1y5BkrF+/3tGWkZFhSDJ++OEHt30uXLhghISEGK+//rqj7dy5c4bNZjNmz57taIuOjjbGjRt33WPLyckxJBk5OTnXvY/i5B8/bhxctszIP378hu8b/4fzXDo4z6WD81x6ONelw1Pn+Vp+f3tsySMjI0M2m03R0dGOtvvuu082m03r1q1z22fPnj2y2+2Kj493tFmtVrVo0cLRJzs7Wxs2bFBQUJBiY2MVHBysFi1a6Ntvvy12LHl5ecrNzXXaPOX8iROyL1+u81e4FIffh/NcOjjPpYPzXHo416XjZjjPHgs4drtdQUFBLu1BQUGy2+3F9pGk4OBgp/bg4GDHe7/88oskKSkpSX379lVqaqqaNm2qVq1a6b///a/b/SYnJzvuA7LZbAoLC7vueQEAgJvfNQecpKQkWSyWErdNmzZJkiwWi0t/wzDctl/q8vcv7XPhwgVJUr9+/dSnTx81adJEf/vb31S/fn3Nnz/f7f5Gjx6tnJwcx3bgwIFrnTYAAChHvK+1w+DBg9W9e/cSa2rXrq3t27fr119/dXnvyJEjLis0RUJCQiRdXMmpWbOmoz07O9vRp6i9YcOGTn0jIyO1f/9+t/u1Wq2yWq0ljhkAAJjHNQecwMBABQYGXrEuJiZGOTk52rhxo5o3by5J2rBhg3JychQbG+u2T0REhEJCQpSWlqYmTZpIkvLz85Wenq7JkydLuhieQkNDtXv3bqe+P/74o9q1a3et0wEAACbksXtwIiMj1bZtW/Xt21fr16/X+vXr1bdvX3Xs2FH169d31DVo0EDLly+XdPHS1LBhwzRp0iQtX75c33//vXr37q1KlSqpR48ejpq//vWvmj59uj788EP99NNPeumll/TDDz/o2Wef9dR0AABAOXLNKzjXYtGiRRoyZIjjqajOnTsrJSXFqWb37t3KyclxvH7xxRd19uxZDRw4UMePH1d0dLRWrVolf39/R82wYcN07tw5JSYm6rffftPdd9+ttLQ01a1b15PTAQAA5YRHA0716tX1wQcflFhjGIbTa4vFoqSkJCUlJZXYb9SoURo1atTvHSIAADAhvvoXAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYDgEHAACYjkcDzvHjx5WQkCCbzSabzaaEhASdOHGixD6GYSgpKUmhoaGqWLGiWrZsqZ07dzrV2O12JSQkKCQkRJUrV1bTpk314YcfenAmAACgPPFowOnRo4e2bt2q1NRUpaamauvWrUpISCixz5QpUzR16lSlpKQoMzNTISEhat26tU6ePOmoSUhI0O7du7VixQrt2LFDjz32mLp166YtW7Z4cjoAAKCc8FjAycrKUmpqqt555x3FxMQoJiZGc+fO1aeffqrdu3e77WMYhqZNm6axY8fqscceU6NGjfTee+/pzJkz+uc//+moy8jI0PPPP6/mzZurTp06GjdunKpVq6bvvvvOU9MBAADliMcCTkZGhmw2m6Kjox1t9913n2w2m9atW+e2z549e2S32xUfH+9os1qtatGihVOfBx54QEuXLtVvv/2mCxcuaMmSJcrLy1PLli3d7jcvL0+5ublOGwAAMC+PBRy73a6goCCX9qCgINnt9mL7SFJwcLBTe3BwsFOfpUuXqqCgQAEBAbJarerXr5+WL1+uunXrut1vcnKy4z4gm82msLCw650WAAAoB6454CQlJclisZS4bdq0SZJksVhc+huG4bb9Upe/f3mfcePG6fjx4/ryyy+1adMmDR8+XE888YR27Njhdn+jR49WTk6OYztw4MC1ThsAAJQj3tfaYfDgwerevXuJNbVr19b27dv166+/urx35MgRlxWaIiEhIZIuruTUrFnT0Z6dne3o8/PPPyslJUXff/+9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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# How about a roll of a dice?\n",
"\n",
"# Let's check out the Probability Mass function!\n",
"\n",
"# Each number\n",
"roll_options = [1,2,3,4,5,6]\n",
"\n",
"# Total probability space\n",
"tprob = 1\n",
"\n",
"# Each roll has same odds of appearing (on a fair die at least)\n",
"prob_roll = tprob / len(roll_options)\n",
"\n",
"# Plot using seaborn rugplot (note this is not really a rugplot), setting height equal to probability of roll\n",
"uni_plot = sns.rugplot(roll_options,height=prob_roll,c='indianred')\n",
"\n",
"# Set Title\n",
"uni_plot.set_title('Probability Mass Function for Dice Roll')\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can see in the above example that the f(x) value on the plot is just equal to 1/(Total Possible Outcomes)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"-------"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So what's the mean and variance of this uniform distribution? "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The mean is simply the max and min value divided by two, just like the mean of two numbers."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$ \\mu = (b+a)/2 $$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With a variance of:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$ \\sigma^2=\\frac{(b-a+1)^2 - 1 }{12}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"--------"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let's see how to automatically create a Discrete Uniform Distribution using Scipy."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The mean is 3.5\n"
]
}
],
"source": [
"# Imports\n",
"from scipy.stats import randint\n",
"\n",
"#Set up a low and high boundary for dice roll ( go to 7 since index starts at 0)\n",
"low,high = 1,7\n",
"\n",
"# Get mean and variance\n",
"mean,var = randint.stats(low,high)\n",
"\n",
"print('The mean is %2.1f' % mean)\n"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"<BarContainer object of 6 artists>"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Now we can make a simple bar plot\n",
"plt.bar(roll_options,randint.pmf(roll_options,low,high))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#####That's basically it for a discrete uniform distribution, check out the rest of the reading below if you're still interested."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---------------------------------------------"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Example of real world use: German Tank Problem"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So now that we know some information about the uniform discrete distribution function, how about we use it to solve a problem?\n",
"\n",
"In this case we'll solve the famous German Tank Problem."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For background, first read the wikipedia page: http://en.wikipedia.org/wiki/German_tank_problem"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Excerpt from Wikipedia:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\"In the statistical theory of estimation, the problem of estimating the maximum of a discrete uniform distribution from sampling without replacement is known in English as the German tank problem, due to its application in World War II to the estimation of the number of German tanks. Estimating the population maximum based on a single sample yields divergent results, while the estimation based on multiple samples is an instructive practical estimation question whose answer is simple but not obvious.\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"After reading the Wikipedia article, check out the following code for an example Python workout of the example problem."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Using a Minimum-variance unbiased estimator we obtain the population max is equal to :"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$ Population\\max = sample \\max + \\frac{sample \\max}{sample \\ size} -1 $$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If we for instance captured 5 tanks with the serial numbers 3,7,11,16 then we know the max observed serial number was m=16.\n",
"This is our sample max with a sample size of 5 tanks. Plugging into the MVUE results in:"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"18.2"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tank_estimate = 16 + (16/5) - 1\n",
"tank_estimate"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For a Bayseian Approach:"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"20.0"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m=16\n",
"k=5\n",
"tank_b_estimate = (m-1)*( (k-1)/ ( k-2) )\n",
"tank_b_estimate"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Remember, this is still missing the STD"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
}
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
================================================
FILE: .ipynb_checkpoints/Exponential Distribution-checkpoint.ipynb
================================================
{
"cells": [],
"metadata": {},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: .ipynb_checkpoints/Frequentist A-B Testing-checkpoint.ipynb
================================================
{
"cells": [],
"metadata": {},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: .ipynb_checkpoints/Gamma Distribution-checkpoint.ipynb
================================================
{
"cells": [],
"metadata": {},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: .ipynb_checkpoints/Hypothesis Testing and Confidence Intervals-checkpoint.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Hypothesis Testing\n",
"\n",
"Hypothesis testing is the use of statistics to determine the probability that a given hypothesis is true. \n",
"\n",
"Hypothesis Testing can be broken into 10 basic steps.\n",
"\n",
" 1.) Data Testing\n",
" 2.) Assumptions\n",
" 3.) Hypothesis\n",
" 4.) Test Statistic\n",
" 5.) Distribution of Test Statistic\n",
" 6.) Decision Rule\n",
" 7.) Calculation of Test Statistic\n",
" 8.) Statistical Decision\n",
" 9.) Conclusion\n",
" 10.) p-values\n",
" \n",
"It is important to note that the initial steps can be done in different orders or at the same time, specifically, I would suggest you come up with you research question first, before going out to do data testing. Moving along:\n",
"\n",
"Let's now break down these steps:\n",
"\n",
"##### Step 1: Data Testing\n",
"\n",
"This one is pretty simple, to do any sort of statistical testing, we'll need some data from a population.\n",
"\n",
"##### Step 2: Assumptions\n",
"\n",
"We will need to make some assumptions regarding our data, such as assuming the data is normally distributed, or what the Standard Deviation of the data is. Another example would be whether to use a T-Distribution or a Normal Distribution.\n",
"\n",
"##### Step 3: Hypothesis\n",
"\n",
"In our Hypothesis Testing, we will have two Hypothesis: *The Null Hypothesis* (denoted as H<sub>o</sub>) and the *Alternative Hypothesis* (denoted as H<sub>A</sub>). The Null Hypothesis is the hypothesis we are looking to test against the alternative hypothesis. Let's get an example of what this looks like:\n",
"\n",
"Let's assume we have a data set regarding ages of customers to a restaurant. Let's say for this particular data set we want to try to prove that the mean of that sample population is *not* 30. So we set our null hypothesis as:\n",
"\n",
"$$ H_o : \\mu = 30 $$\n",
"And our Alternative Hypothesis as:\n",
"$$ H_A : \\mu \\neq 30 $$ "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We could have also set out Alternative Hypothesis to be that the mean is greater than 30 or another Alternative Hypothesis we could have proposed is the mean is less than 30. We will discuss these other options later when we go into one-tail versus two-tail tests.\n",
"\n",
"Continuing on with our steps:\n",
"\n",
"##### Step 4: Test Statistic\n",
"\n",
"Based on our assumptions, we'll choose a suitable test statistic. For example, if we believe to have a normal distribution with our data we would choose a z-score as our standard error:\n",
"\n",
"$$ z = \\frac{\\overline{x}-\\mu_o}{\\sigma / \\sqrt{n}}$$\n",
"\n",
"Or if we assume to have a t-distribution we would choose a t-score (estimated standard error):\n",
"\n",
"$$ t = \\frac{\\overline{x}-\\mu_o}{s/ \\sqrt{n}}$$\n",
"\n",
"Then our test statistic is defined as:\n",
"\n",
"$$ Test \\ Statistic = \\frac{Relevant \\ Statistic - Hypothesized \\ Parameter}{ Standard \\ Error \\ of \\ Releveant \\ Statistic}$$\n",
"\n",
"\n",
"##### Step 5: Distribution of Test Statistic\n",
"\n",
"As discussed earlier, verify that whether your data should use a t or z distribution.\n",
"\n",
"##### Step 6: Decision Rule\n",
"\n",
"Considering the distribution, we need to establish a significance level, usually denoted as alpha, α. Alpha is the probability of having a Null Hypothesis that is true, but our data shows is wrong. So alpha is the probability of rejecting a *true* Null Hypothesis. By convention, alpha is usually equal to 0.05 or 5%. This means that 5% of the time, we will falsely reject a true null hypothesis, this is best explained through a picture."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"image/jpeg": "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wir/AKxEfxkzpxOr4rBXjWUGoTtru3OInX+frFTnf9eruu/0lz0ff1gf4LGPj+leP/RDlQZ1brVjwyvHwHvP0WtzCSdN2kY37qerqf1gue5leFiFzCQR9qdOh2/9xk33Qen/ADWX7pkHWA/6pj/751ajlF/6ZrGs9NpJa4uPqHd6rfc1n6Jvs2P/AD0ZAofmOLRkVMrHpMc4tfu/Snd61Tfa39HX7Ntn+ER05rkUaUkkkkpSSSSSn//V9VSXyqkkp+qkl8qpJKfqpMV8rJJKfqOv6Tv5r6X5vPDfpfy1Ifz4+h9F39flvH8j99fLSSS77X6qSXyqkktfqpMePu5Xyskkp+o6uT/NfSP0OeG/9NSb/PD+b+h2+nz/AOe18tJJLvtfqpJfKqSS1+qkl8qpJKfqpJfKqSSn/9n/7RPsUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAccAgAAAgAAADhCSU0EJQAAAAAAEOjxXPMvwRihontnrcVk1bo4QklNA+0AAAAAABABLAAAAAEAAQEsAAAAAQABOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD+AAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNJxAAAAAAAAoAAQAAAAAAAAABOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAANdAAAABgAAAAAAAAAAAAAD+AAABnAAAAAUAHMAaABhAGYAZQByAF8AMQAuADAALQBmAGkAZwAwADgAXwAwADAANAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAGcAAAA/gAAAAAAAAAAAAAAAAAAAAAAQAAAAAA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
gitextract_e7icusc_/ ├── .gitattributes ├── .gitignore ├── .ipynb_checkpoints/ │ ├── Bayes' Theorem-checkpoint.ipynb │ ├── Bayseian A-B Testing-checkpoint.ipynb │ ├── Beta Distribution-checkpoint.ipynb │ ├── Binomial Distribution-checkpoint.ipynb │ ├── Chi-Square-checkpoint.ipynb │ ├── Continuous Uniform Distributions-checkpoint.ipynb │ ├── Discrete Uniform Distributions-checkpoint.ipynb │ ├── Exponential Distribution-checkpoint.ipynb │ ├── Frequentist A-B Testing-checkpoint.ipynb │ ├── Gamma Distribution-checkpoint.ipynb │ ├── Hypothesis Testing and Confidence Intervals-checkpoint.ipynb │ ├── Kolmogorov-Smirnov Test-checkpoint.ipynb │ ├── Markov Chain Monte Carlo Algorithm-checkpoint.ipynb │ ├── Normal Distribution-checkpoint.ipynb │ ├── Poisson Distribution-checkpoint.ipynb │ ├── Sampling Techniques-checkpoint.ipynb │ ├── Statistical Estimation Theory-checkpoint.ipynb │ ├── Statistics Overview-checkpoint.ipynb │ └── T Distribution (Small Sampling Theory)-checkpoint.ipynb ├── Bayes' Theorem.ipynb ├── Bayseian A-B Testing.ipynb ├── Beta Distribution.ipynb ├── Binomial Distribution.ipynb ├── Chi-Square.ipynb ├── Continuous Uniform Distributions.ipynb ├── Discrete Uniform Distributions.ipynb ├── Exponential Distribution.ipynb ├── Frequentist A-B Testing.ipynb ├── Gamma Distribution.ipynb ├── Hypothesis Testing and Confidence Intervals.ipynb ├── Kolmogorov-Smirnov Test.ipynb ├── Markov Chain Monte Carlo Algorithm.ipynb ├── Normal Distribution.ipynb ├── Poisson Distribution.ipynb ├── Sampling Techniques.ipynb ├── Statistical Estimation Theory.ipynb ├── Statistics Overview.ipynb └── T Distribution (Small Sampling Theory).ipynb
Condensed preview — 40 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,076K chars).
[
{
"path": ".gitattributes",
"chars": 378,
"preview": "# Auto detect text files and perform LF normalization\n* text=auto\n\n# Custom for Visual Studio\n*.cs diff=csharp\n\n# St"
},
{
"path": ".gitignore",
"chars": 574,
"preview": "# Windows image file caches\nThumbs.db\nehthumbs.db\n\n# Folder config file\nDesktop.ini\n\n# Recycle Bin used on file shares\n$"
},
{
"path": ".ipynb_checkpoints/Bayes' Theorem-checkpoint.ipynb",
"chars": 6940,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"collapsed\": false,\n \"jupyter\": {\n \"outputs_hi"
},
{
"path": ".ipynb_checkpoints/Bayseian A-B Testing-checkpoint.ipynb",
"chars": 72,
"preview": "{\n \"cells\": [],\n \"metadata\": {},\n \"nbformat\": 4,\n \"nbformat_minor\": 0\n}\n"
},
{
"path": ".ipynb_checkpoints/Beta Distribution-checkpoint.ipynb",
"chars": 1558,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"####Let's learn the Beta distributi"
},
{
"path": ".ipynb_checkpoints/Binomial Distribution-checkpoint.ipynb",
"chars": 27994,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"### Binomial is a specific type of "
},
{
"path": ".ipynb_checkpoints/Chi-Square-checkpoint.ipynb",
"chars": 77829,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Chi-Square\\n\",\n \"\\n\",\n \"In "
},
{
"path": ".ipynb_checkpoints/Continuous Uniform Distributions-checkpoint.ipynb",
"chars": 24340,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"#### Let's learn about Continous Un"
},
{
"path": ".ipynb_checkpoints/Discrete Uniform Distributions-checkpoint.ipynb",
"chars": 45079,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"### Let's start off with a definiti"
},
{
"path": ".ipynb_checkpoints/Exponential Distribution-checkpoint.ipynb",
"chars": 72,
"preview": "{\n \"cells\": [],\n \"metadata\": {},\n \"nbformat\": 4,\n \"nbformat_minor\": 0\n}\n"
},
{
"path": ".ipynb_checkpoints/Frequentist A-B Testing-checkpoint.ipynb",
"chars": 72,
"preview": "{\n \"cells\": [],\n \"metadata\": {},\n \"nbformat\": 4,\n \"nbformat_minor\": 0\n}\n"
},
{
"path": ".ipynb_checkpoints/Gamma Distribution-checkpoint.ipynb",
"chars": 72,
"preview": "{\n \"cells\": [],\n \"metadata\": {},\n \"nbformat\": 4,\n \"nbformat_minor\": 0\n}\n"
},
{
"path": ".ipynb_checkpoints/Hypothesis Testing and Confidence Intervals-checkpoint.ipynb",
"chars": 226730,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Hypothesis Testing\\n\",\n \"\\n\",\n"
},
{
"path": ".ipynb_checkpoints/Kolmogorov-Smirnov Test-checkpoint.ipynb",
"chars": 72,
"preview": "{\n \"cells\": [],\n \"metadata\": {},\n \"nbformat\": 4,\n \"nbformat_minor\": 0\n}\n"
},
{
"path": ".ipynb_checkpoints/Markov Chain Monte Carlo Algorithm-checkpoint.ipynb",
"chars": 72,
"preview": "{\n \"cells\": [],\n \"metadata\": {},\n \"nbformat\": 4,\n \"nbformat_minor\": 0\n}\n"
},
{
"path": ".ipynb_checkpoints/Normal Distribution-checkpoint.ipynb",
"chars": 49454,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"collapsed\": true,\n \"jupyter\": {\n \"outputs_hid"
},
{
"path": ".ipynb_checkpoints/Poisson Distribution-checkpoint.ipynb",
"chars": 23362,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"#### Let's learn about the Poisson "
},
{
"path": ".ipynb_checkpoints/Sampling Techniques-checkpoint.ipynb",
"chars": 5992,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"#### Let's learn about sampling th"
},
{
"path": ".ipynb_checkpoints/Statistical Estimation Theory-checkpoint.ipynb",
"chars": 581,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n \"metadata\": {\n \"collapsed\": true\n },\n \"o"
},
{
"path": ".ipynb_checkpoints/Statistics Overview-checkpoint.ipynb",
"chars": 1503,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"#APPENDIX B- STATISTICS OVERVIEW\"\n "
},
{
"path": ".ipynb_checkpoints/T Distribution (Small Sampling Theory)-checkpoint.ipynb",
"chars": 32069,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"#### Let's learn the T-distribution"
},
{
"path": "Bayes' Theorem.ipynb",
"chars": 6940,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"collapsed\": false,\n \"jupyter\": {\n \"outputs_hi"
},
{
"path": "Bayseian A-B Testing.ipynb",
"chars": 72,
"preview": "{\n \"cells\": [],\n \"metadata\": {},\n \"nbformat\": 4,\n \"nbformat_minor\": 0\n}\n"
},
{
"path": "Beta Distribution.ipynb",
"chars": 1558,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"####Let's learn the Beta distributi"
},
{
"path": "Binomial Distribution.ipynb",
"chars": 27994,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"### Binomial is a specific type of "
},
{
"path": "Chi-Square.ipynb",
"chars": 77829,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Chi-Square\\n\",\n \"\\n\",\n \"In "
},
{
"path": "Continuous Uniform Distributions.ipynb",
"chars": 24340,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"#### Let's learn about Continous Un"
},
{
"path": "Discrete Uniform Distributions.ipynb",
"chars": 45079,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"### Let's start off with a definiti"
},
{
"path": "Exponential Distribution.ipynb",
"chars": 709,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"####Let's learn the exponential dis"
},
{
"path": "Frequentist A-B Testing.ipynb",
"chars": 72,
"preview": "{\n \"cells\": [],\n \"metadata\": {},\n \"nbformat\": 4,\n \"nbformat_minor\": 0\n}\n"
},
{
"path": "Gamma Distribution.ipynb",
"chars": 699,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"####Let's learn gamma distribution!"
},
{
"path": "Hypothesis Testing and Confidence Intervals.ipynb",
"chars": 226730,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Hypothesis Testing\\n\",\n \"\\n\",\n"
},
{
"path": "Kolmogorov-Smirnov Test.ipynb",
"chars": 72,
"preview": "{\n \"cells\": [],\n \"metadata\": {},\n \"nbformat\": 4,\n \"nbformat_minor\": 0\n}\n"
},
{
"path": "Markov Chain Monte Carlo Algorithm.ipynb",
"chars": 72,
"preview": "{\n \"cells\": [],\n \"metadata\": {},\n \"nbformat\": 4,\n \"nbformat_minor\": 0\n}\n"
},
{
"path": "Normal Distribution.ipynb",
"chars": 49454,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"collapsed\": true,\n \"jupyter\": {\n \"outputs_hid"
},
{
"path": "Poisson Distribution.ipynb",
"chars": 23362,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"#### Let's learn about the Poisson "
},
{
"path": "Sampling Techniques.ipynb",
"chars": 5992,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"#### Let's learn about sampling th"
},
{
"path": "Statistical Estimation Theory.ipynb",
"chars": 581,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n \"metadata\": {\n \"collapsed\": true\n },\n \"o"
},
{
"path": "Statistics Overview.ipynb",
"chars": 1503,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"#APPENDIX B- STATISTICS OVERVIEW\"\n "
},
{
"path": "T Distribution (Small Sampling Theory).ipynb",
"chars": 32069,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"#### Let's learn the T-distribution"
}
]
About this extraction
This page contains the full source code of the jmportilla/Statistics-Notes GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 40 files (1.0 MB), approximately 593.9k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.