Accept PDH on command line.
[lightning.git] / chisquare.go
1 // Copyright (C) The Lightning Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 package lightning
6
7 import (
8         "golang.org/x/exp/rand"
9         "gonum.org/v1/gonum/stat/distuv"
10 )
11
12 var chisquared = distuv.ChiSquared{K: 1, Src: rand.NewSource(rand.Uint64())}
13
14 func pvalue(a, b []bool) float64 {
15         //     !b        b
16         // !a  tab[0]    tab[1]
17         // a   tab[2]    tab[3]
18         tab := make([]int, 4)
19         for ai, aval := range []bool{false, true} {
20                 for bi, bval := range []bool{false, true} {
21                         obs := 0
22                         for i := range a {
23                                 if a[i] == aval && b[i] == bval {
24                                         obs++
25                                 }
26                         }
27                         tab[ai*2+bi] = obs
28                 }
29         }
30         var sum float64
31         for ai := 0; ai < 2; ai++ {
32                 for bi := 0; bi < 2; bi++ {
33                         rowtotal := tab[ai*2] + tab[ai*2+1]
34                         coltotal := tab[bi] + tab[2+bi]
35                         exp := float64(rowtotal) * float64(coltotal) / float64(len(a))
36                         obs := tab[ai*2+bi]
37                         d := float64(obs) - exp
38                         sum += (d * d) / exp
39                 }
40         }
41         return 1 - chisquared.CDF(sum)
42 }