1
- import { nelderMead } from './nelderMead.js' ;
1
+ import { nelderMead } from './nelderMead/nelderMead .js' ;
2
2
import betainc from '@stdlib/math-base-special-betainc/lib/index.js'
3
3
4
4
/*
@@ -18,7 +18,7 @@ const beta_cdf = ({x,a,b}) => betainc(x,a,b)
18
18
// https://www.squiggle-language.com/playground#code=eNqrVirOyC8PLs3NTSyqVLIqKSpN1QELuaZkluQXwURSUtMSS3NKnPNTUpWslJJT0jSSUksSNQz1DHQUjEz1DBQ0dRQM9Aw1lWoBnIcZzA%3D%3D
19
19
*/
20
20
21
- const find_beta_from_ci = ( { ci_lower, ci_upper} ) => {
21
+ export const find_beta_from_ci = ( { ci_lower, ci_upper} ) => {
22
22
23
23
function loss ( x ) {
24
24
let a = x [ 0 ]
@@ -49,21 +49,42 @@ const find_beta_from_ci = ({ci_lower, ci_upper}) => {
49
49
50
50
return [ df_da , df_db ]
51
51
}
52
+
53
+ // Try a sensible default
54
+ let x0_init = [ 50 , 50 ]
55
+ let nelderMead_init = nelderMead ( loss , x0_init ) ;
56
+ let result_init = [ nelderMead_init . x [ 0 ] , nelderMead_init . x [ 1 ] ]
57
+ let loss_init = loss ( result_init )
58
+ // console.log(loss_init)
52
59
53
- let x0 = [ 10 , 5 ]
54
- let result = nelderMead ( loss , x0 ) ;
55
- return [ result . x [ 0 ] , result . x [ 1 ] ]
60
+ if ( loss < 10e-8 ) {
61
+ return result_init
62
+ }
56
63
57
- }
64
+ // if the sensible default doesn't work,
65
+ // try a grid search
66
+ let min_loss = Infinity
67
+ let result = null
68
+ for ( let a = 1 ; a < 40 ; a = a + 2 ) {
69
+ for ( let b = 1 ; b < 40 ; b = b + 2 ) {
70
+ let x0 = [ a , b ]
71
+
72
+ let nelderMead_output = nelderMead ( loss , x0 ) ;
73
+ let new_result = [ nelderMead_output . x [ 0 ] , nelderMead_output . x [ 1 ] ]
74
+ let new_loss = loss ( new_result )
58
75
59
- let ci_lower = 0.3
60
- let ci_upper = 0.8
76
+ if ( loss < 10e-8 ) {
77
+ return new_result
78
+ }
61
79
62
- let result = find_beta_from_ci ( { ci_lower, ci_upper} )
63
- console . log ( result )
64
- /* console.log([a,b])
65
- console.log(`beta(${a}, ${b})`)
80
+ if ( new_loss < min_loss ) {
81
+ min_loss = new_loss
82
+ result = new_result
83
+ }
84
+ }
85
+ }
86
+ // console.log(min_loss)
87
+ return result
88
+
89
+ }
66
90
67
- console.log(beta_cdf({x: ci_lower, a, b}))
68
- console.log(beta_cdf({x: ci_upper, a, b}))
69
- */
0 commit comments