blob: b9fd4bf96ae55f360fb12d96fb39d47c70eef992 [file] [log] [blame]
// Copyright 2022 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 benchmath
import "github.com/aclements/go-moremath/stats"
// AssumeNormal is an assumption that a sample is normally distributed.
// The summary statistic is the sample mean and comparisons are done
// using the two-sample t-test.
var AssumeNormal = assumeNormal{}
type assumeNormal struct{}
var _ Assumption = assumeNormal{}
func (assumeNormal) SummaryLabel() string {
return "mean"
}
func (assumeNormal) Summary(s *Sample, confidence float64) Summary {
// TODO: Perform a normality test.
sample := s.sample()
mean, lo, hi := sample.MeanCI(confidence)
return Summary{
Center: mean,
Lo: lo,
Hi: hi,
Confidence: confidence,
}
}
func (assumeNormal) Compare(s1, s2 *Sample) Comparison {
t, err := stats.TwoSampleWelchTTest(s1.sample(), s2.sample(), stats.LocationDiffers)
if err != nil {
// The t-test failed. Report as if there's no
// significant difference, along with the error.
return Comparison{P: 1, N1: len(s1.Values), N2: len(s2.Values), Warnings: []error{err}}
}
return Comparison{P: t.P, N1: len(s1.Values), N2: len(s2.Values)}
}