// NormPostSimNoPrior returns a simulated sample from the joint posterior distribution of the mean and variance for a normal // sampling prior. func NormPostSimNoPrior(data []float64, m int) (postMu, postS2 []float64) { // Arguments: // data - vector of observations // m - number of simulations desired // Returns: // mu - vector of simulated draws of normal mean // sigma2 - vector of simulated draws of normal variance xbar := mean(data) n := len(data) diff2 := make([]float64, n) for i, val := range data { diff2[i] = (val - xbar) * (val - xbar) } s := sum(diff2) postS2 = make([]float64, m) postMu = make([]float64, m) for i, _ := range postMu { postS2[i] = s / dst.ChiSquareNext(int64(n)-1) sd := sqrt(postS2[i]) / sqrt(float64(n)) postMu[i] = dst.NormalNext(xbar, sd) } return }
// NormPostNoPriorNext returns a sampled tuple from the joint posterior distribution of the mean and variance for a normal // sampling prior. func NormPostNoPriorNext(data []float64) (postMu, postS2 float64) { // Arguments: // data - vector of observations // Returns: // postMu - simulated draw of normal mean // postS2 - simulated draw of normal variance xbar := mean(data) n := len(data) diff2 := make([]float64, n) for i, val := range data { diff2[i] = (val - xbar) * (val - xbar) } s := sum(diff2) postS2 = s / dst.ChiSquareNext(int64(n)-1) sd := sqrt(postS2) / sqrt(float64(n)) postMu = dst.NormalNext(xbar, sd) return }