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
// len(x) must equal len(weights).
func Moment(moment float64, x, weights []float64) float64 {
// This also checks that x and weights have the same length.
mean := Mean(x, weights)
if weights == nil {
var m float64
@@ -916,8 +917,9 @@ func Moment(moment float64, x, weights []float64) float64 {
sumWeights float64
)
for i, v := range x {
m += weights[i] * math.Pow(v-mean, moment)
sumWeights += weights[i]
w := weights[i]
m += w * math.Pow(v-mean, moment)
sumWeights += w
}
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)) }) {
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) {