Skip to content

Instantly share code, notes, and snippets.

@jonnylaw
jonnylaw / harrier_league_actual.md
Last active October 9, 2017 13:17
What if the harrier league started from scratch

Harrier League Cross Country From Scratch The Harrier League is a cross country running league with seven fixtures across the North East of England in the 2017/18 season across the winter months from September ’17 until March ‘18.

The harrier league is unique to other cross country fixtures because the senior runners are divided up into slow, medium and fast packs. In the senior men’s race, the slow runners start first followed 2 minutes 30 seconds later by the medium pack runners, then a further 2 minutes 30

#####################################
# Simulate Data From Regression DLM #
#####################################
regression_dlm = function(n = 6 * 24, psi, X) {
theta = matrix(NA_real_, ncol = ncol(X), nrow = n)
y = numeric(n)
V = psi[1]
W = diag(psi[2:3])
theta[1,] = rnorm(2)
import akka.stream.scaladsl._
import akka.actor.ActorSystem
import akka.NotUsed
import akka.stream._
import akka.util.ByteString
import java.nio.file.Paths
import scala.concurrent.Future
object DescriptiveStats extends App {
package model
import breeze.stats.distributions._
import breeze.linalg._
import breeze.numerics.exp
import java.io.{File, PrintWriter}
object GaussianModel {
case class Parameters(mu: DenseVector[Double], sigma: Double) {
override def toString = s"${mu.data.mkString(", ")}, $sigma"
import cats.implicits._
import cats.data.OptionT
object ErrorHandling {
// Calculate the square root of a positive number or return an exception (which isn't obvious from the return type)
def unsafe_sqrt(a: Double): Double = {
if (a > 0) math.sqrt(a)
else throw new Exception("Can't calculate square root of negative number")
}
type Likelihood = Double
case class Observation(y: Int, x: DenseVector[Double])
def likelihood(data: Vector[Observation]): Parameters => Likelihood = p => {
val ll = data.
map{ y => Poisson(exp(p.dot(y.x))).logProbabilityOf(y.y) }.
sum
exp(ll)
}
type Parameters = DenseVector[Double]
def proposal(delta: Double): Parameters => Rand[Parameters] = p => {
for {
d <- Gaussian(0, delta)
params = p mapValues (d + _)
} yield params
}
import breeze.stats.distributions.Gaussian
import Stream._
import java.io.{PrintWriter, File}
object MetropolisHastings {
case class Parameter(mu: Double, sigma: Double) {
override def toString = s"$mu, $sigma"
}
def sims(n: Int, params: Parameter): List[Double] = {