Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save HarryMcCarney/d82909d55014d211aef420747d659564 to your computer and use it in GitHub Desktop.
Save HarryMcCarney/d82909d55014d211aef420747d659564 to your computer and use it in GitHub Desktop.
(*
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