Last active
March 7, 2023 18:11
-
-
Save HarryMcCarney/d82909d55014d211aef420747d659564 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(* | |
Exercise: In Major League Baseball, most players have a batting average between .200 and .330, which means that their probability of getting a hit is between 0.2 and 0.33. | |
Suppose a player appearing in their first game gets 3 hits out of 3 attempts. What is the posterior distribution for their probability of getting a hit? | |
https://colab.research.google.com/github/AllenDowney/ThinkBayes2/blob/master/notebooks/chap04.ipynb#scrollTo=LB4DESMrA0bs | |
*) | |
#r "nuget: FSharp.Stats, 0.4.12-preview.1" | |
#r "nuget: Plotly.NET" | |
open FSharp.Stats.Distributions | |
open Plotly.NET | |
let linspace start stop count = | |
[| start .. ((stop - start) / (count - 1.)) .. stop |] | |
let updateBinomPosterior (priorDist: Map<float, float>) (posteriorN: int) (posteriorK: int) = | |
priorDist | |
|> Map.map (fun p v -> Discrete.Binomial.PMF p posteriorN posteriorK * v) | |
|> Empirical.normalize | |
let uniformPrior = Empirical.createNominal (linspace 0.1 0.4 101) | |
let posteriorAfter25 = updateBinomPosterior uniformPrior 100 25 | |
let posteriorAfter25and33 = updateBinomPosterior posteriorAfter25 3 3 | |
[ Chart.Line(posteriorAfter25 |> Map.toSeq, Name = "Probability of hit after 25/100") | |
Chart.Line(posteriorAfter25and33 |> Map.toSeq, Name = "Probability of hit after 25/100 and then 3/3") | |
Chart.Line((uniformPrior |> Map.toSeq), Name = "Uniform Probability") ] | |
|> Chart.combine | |
|> Chart.withXAxisStyle ("Proportion of Hits") | |
|> Chart.withYAxisStyle ("Probability") | |
|> Chart.show |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment