1
+ """
2
+ Beta
3
+ * Parametrization
4
+ * Score
5
+ * Fisher Information
6
+ * `time_varying_params` map.
7
+ * Default link
8
+ """
9
+ Beta
10
+
11
+ function score! (score_til:: Matrix{T} , y:: T , :: Type{Beta} , param:: Matrix{T} , t:: Int ) where T
12
+ score_til[t, 1 ] = log (y) + digamma (param[t, 1 ] + param[t, 2 ]) - digamma (param[t, 1 ])
13
+ score_til[t, 2 ] = log (1 - y) + digamma (param[t, 1 ] + param[t, 2 ]) - digamma (param[t, 2 ])
14
+ return
15
+ end
16
+
17
+ function fisher_information! (aux:: AuxiliaryLinAlg{T} , :: Type{Beta} , param:: Matrix{T} , t:: Int ) where T
18
+ minus_trigamma_a_b = - trigamma (param[t, 1 ] + param[t, 2 ])
19
+ aux. fisher[1 , 1 ] = trigamma (param[t, 1 ]) + minus_trigamma_a_b
20
+ aux. fisher[2 , 2 ] = trigamma (param[t, 2 ]) + minus_trigamma_a_b
21
+ aux. fisher[2 , 1 ] = minus_trigamma_a_b
22
+ aux. fisher[1 , 2 ] = minus_trigamma_a_b
23
+ return
24
+ end
25
+
26
+ function log_likelihood (:: Type{Beta} , y:: Vector{T} , param:: Matrix{T} , n:: Int ) where T
27
+ loglik = 0.0
28
+ for t in 1 : n
29
+ loglik += (param[t, 1 ] - 1 )* log (y[t]) + (param[t, 2 ] - 1 )* log (1 - y[t]) - logbeta (param[t, 1 ], param[t, 2 ])
30
+ end
31
+ return - loglik
32
+ end
33
+
34
+ # Links
35
+ function link! (param_tilde:: Matrix{T} , :: Type{Beta} , param:: Matrix{T} , t:: Int ) where T
36
+ param_tilde[t, 1 ] = link (LogLink, param[t, 1 ], zero (T))
37
+ param_tilde[t, 2 ] = link (LogLink, param[t, 2 ], zero (T))
38
+ return
39
+ end
40
+ function unlink! (param:: Matrix{T} , :: Type{Beta} , param_tilde:: Matrix{T} , t:: Int ) where T
41
+ param[t, 1 ] = unlink (LogLink, param_tilde[t, 1 ], zero (T))
42
+ param[t, 2 ] = unlink (LogLink, param_tilde[t, 2 ], zero (T))
43
+ return
44
+ end
45
+ function jacobian_link! (aux:: AuxiliaryLinAlg{T} , :: Type{Beta} , param:: Matrix{T} , t:: Int ) where T
46
+ aux. jac[1 ] = jacobian_link (LogLink, param[t, 1 ], zero (T))
47
+ aux. jac[2 ] = jacobian_link (LogLink, param[t, 2 ], zero (T))
48
+ return
49
+ end
50
+
51
+ # utils
52
+ function update_dist (:: Type{Beta} , param:: Matrix{T} , t:: Int ) where T
53
+ small_threshold! (param, SMALL_NUM, t)
54
+ return Beta (param[t, 1 ], param[t, 2 ])
55
+ end
56
+
57
+ function params_sdm (d:: Beta )
58
+ return Distributions. params (d)
59
+ end
60
+
61
+ function num_params (:: Type{Beta} )
62
+ return 2
63
+ end
0 commit comments