|
2 | 2 | Proof somewhere
|
3 | 3 | parametrized in \\alpha and \\beta
|
4 | 4 | """
|
5 |
| -function score(y::T, ::Type{Beta}, param::Vector{T}) where T |
6 |
| - digamma_a_b = digamma(param[1] + param[2]) |
7 |
| - return [ |
8 |
| - log(y) + digamma_a_b - digamma(param[1]); |
9 |
| - log(1 - y) + digamma_a_b - digamma(param[2]) |
10 |
| - ] |
| 5 | +function score!(score_til::Matrix{T}, y::T, ::Type{Beta}, param::Matrix{T}, t::Int) where T |
| 6 | + score_til[t, 1] = log(y) + digamma(param[t, 1] + param[t, 2]) - digamma(param[t, 1]) |
| 7 | + score_til[t, 2] = log(1 - y) + digamma(param[t, 1] + param[t, 2]) - digamma(param[t, 2]) |
| 8 | + return |
11 | 9 | end
|
12 | 10 |
|
13 | 11 | """
|
14 | 12 | Proof somewhere
|
15 | 13 | """
|
16 |
| -function fisher_information(::Type{Beta}, param::Vector{T}) where T |
17 |
| - minus_trigamma_a_b = -trigamma(param[1] + param[2]) |
18 |
| - |
19 |
| - return [ |
20 |
| - trigamma(param[1]) + minus_trigamma_a_b minus_trigamma_a_b; |
21 |
| - minus_trigamma_a_b trigamma(param[2]) + minus_trigamma_a_b |
22 |
| - ] |
| 14 | +function fisher_information!(aux::AuxiliaryLinAlg{T}, ::Type{Beta}, param::Matrix{T}, t::Int) where T |
| 15 | + minus_trigamma_a_b = -trigamma(param[t, 1] + param[t, 2]) |
| 16 | + aux.fisher[1, 1] = trigamma(param[t, 1]) + minus_trigamma_a_b |
| 17 | + aux.fisher[2, 2] = trigamma(param[t, 2]) + minus_trigamma_a_b |
| 18 | + aux.fisher[2, 1] = minus_trigamma_a_b |
| 19 | + aux.fisher[1, 2] = minus_trigamma_a_b |
| 20 | + return |
23 | 21 | end
|
24 | 22 |
|
25 | 23 | """
|
26 | 24 | Proof somewhere
|
27 | 25 | """
|
28 |
| -function log_likelihood(::Type{Beta}, y::Vector{T}, param::Vector{Vector{T}}, n::Int) where T |
| 26 | +function log_likelihood(::Type{Beta}, y::Vector{T}, param::Matrix{T}, n::Int) where T |
29 | 27 | loglik = 0.0
|
30 |
| - for i in 1:n |
31 |
| - loglik += (param[i][1] - 1)*log(y[i]) + (param[i][2] - 1)*log(1 - y[i]) - logbeta(param[i][1], param[i][2]) |
| 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]) |
32 | 30 | end
|
33 | 31 | return -loglik
|
34 | 32 | end
|
35 | 33 |
|
36 | 34 | # Links
|
37 |
| -function link(::Type{Beta}, param::Vector{T}) where T |
38 |
| - return [ |
39 |
| - link(LogLink, param[1], zero(T)); |
40 |
| - link(LogLink, param[2], zero(T)) |
41 |
| - ] |
| 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 |
42 | 39 | end
|
43 |
| -function unlink(::Type{Beta}, param_tilde::Vector{T}) where T |
44 |
| - return [ |
45 |
| - unlink(LogLink, param_tilde[1], zero(T)); |
46 |
| - unlink(LogLink, param_tilde[2], zero(T)) |
47 |
| - ] |
| 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 |
48 | 44 | end
|
49 |
| -function jacobian_link(::Type{Beta}, param_tilde::Vector{T}) where T |
50 |
| - return Diagonal([ |
51 |
| - jacobian_link(LogLink, param_tilde[1], zero(T)); |
52 |
| - jacobian_link(LogLink, param_tilde[2], zero(T)) |
53 |
| - ]) |
| 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 |
54 | 49 | end
|
55 | 50 |
|
56 | 51 | # utils
|
57 |
| -function update_dist(::Type{Beta}, param::Vector{T}) where T |
58 |
| - small_threshold!(param, T(1e-8)) |
59 |
| - return Beta(param[1], param[2]) |
| 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]) |
60 | 55 | end
|
61 | 56 |
|
62 | 57 | function num_params(::Type{Beta})
|
|
0 commit comments