// Copyright 2015 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package stats import ( "math" "github.com/aclements/go-moremath/mathx" ) // A TDist is a Student's t-distribution with V degrees of freedom. type TDist struct { V float64 } func lgamma(x float64) float64 { y, _ := math.Lgamma(x) return y } func (t TDist) PDF(x float64) float64 { return math.Exp(lgamma((t.V+1)/2)-lgamma(t.V/2)) / math.Sqrt(t.V*math.Pi) * math.Pow(1+(x*x)/t.V, -(t.V+1)/2) } func (t TDist) CDF(x float64) float64 { if x == 0 { return 0.5 } else if x > 0 { return 1 - 0.5*mathx.BetaInc(t.V/(t.V+x*x), t.V/2, 0.5) } else if x < 0 { return 1 - t.CDF(-x) } else { return math.NaN() } } func (t TDist) Bounds() (float64, float64) { return -4, 4 }