stat: Improve documentation and test for Moment (#248)

This commit is contained in:
Brendan Tracey
2017-09-29 22:27:21 -06:00
committed by GitHub
parent 1f58387cb6
commit 3a687b33d4
2 changed files with 7 additions and 2 deletions

View File

@@ -903,6 +903,7 @@ func BivariateMoment(r, s float64, x, y, weights []float64) float64 {
// If weights is nil then all of the weights are 1. If weights is not nil, then // If weights is nil then all of the weights are 1. If weights is not nil, then
// len(x) must equal len(weights). // len(x) must equal len(weights).
func Moment(moment float64, x, weights []float64) float64 { func Moment(moment float64, x, weights []float64) float64 {
// This also checks that x and weights have the same length.
mean := Mean(x, weights) mean := Mean(x, weights)
if weights == nil { if weights == nil {
var m float64 var m float64
@@ -916,8 +917,9 @@ func Moment(moment float64, x, weights []float64) float64 {
sumWeights float64 sumWeights float64
) )
for i, v := range x { for i, v := range x {
m += weights[i] * math.Pow(v-mean, moment) w := weights[i]
sumWeights += weights[i] m += w * math.Pow(v-mean, moment)
sumWeights += w
} }
return m / sumWeights return m / sumWeights
} }

View File

@@ -1178,6 +1178,9 @@ func TestMoment(t *testing.T) {
if !Panics(func() { Moment(1, make([]float64, 3), make([]float64, 2)) }) { if !Panics(func() { Moment(1, make([]float64, 3), make([]float64, 2)) }) {
t.Errorf("Moment did not panic with x, weights length mismatch") t.Errorf("Moment did not panic with x, weights length mismatch")
} }
if !Panics(func() { Moment(1, make([]float64, 2), make([]float64, 3)) }) {
t.Errorf("Moment did not panic with x, weights length mismatch")
}
} }
func TestMomentAbout(t *testing.T) { func TestMomentAbout(t *testing.T) {