Skip to content

Commit 2a11703

Browse files
better link interface and docs (#34)
1 parent 4df2542 commit 2a11703

File tree

13 files changed

+115
-66
lines changed

13 files changed

+115
-66
lines changed

docs/src/manual.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,21 @@
11
# Manual
22

3-
TODO
3+
## Links
4+
5+
### Types of links
6+
7+
The abstract type `Link` subsumes any type of link that can be expressed.
8+
9+
```@docs
10+
ScoreDrivenModels.IdentityLink
11+
ScoreDrivenModels.LogLink
12+
```
13+
14+
### Link functions
15+
16+
```@docs
17+
ScoreDrivenModels.link
18+
ScoreDrivenModels.unlink
19+
ScoreDrivenModels.jacobian_link
20+
```
21+

src/distributions/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ Each distribution must have the following methods:
77
* fisher information
88
* log likelihood
99
* link interface
10-
* param_to_param_tilde
11-
* param_tilde_to_param
10+
* link
11+
* unlink
1212
* jacobian_link
1313
* update_dist
1414
* num_params

src/distributions/beta.jl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,22 +34,22 @@ function log_likelihood(::Type{Beta}, y::Vector{T}, param::Vector{Vector{T}}, n:
3434
end
3535

3636
# Links
37-
function param_to_param_tilde(::Type{Beta}, param::Vector{T}) where T
37+
function link(::Type{Beta}, param::Vector{T}) where T
3838
return [
39-
param_to_param_tilde(ExponentialLink, param[1], zero(T));
40-
param_to_param_tilde(ExponentialLink, param[2], zero(T))
39+
link(LogLink, param[1], zero(T));
40+
link(LogLink, param[2], zero(T))
4141
]
4242
end
43-
function param_tilde_to_param(::Type{Beta}, param_tilde::Vector{T}) where T
43+
function unlink(::Type{Beta}, param_tilde::Vector{T}) where T
4444
return [
45-
param_tilde_to_param(ExponentialLink, param_tilde[1], zero(T));
46-
param_tilde_to_param(ExponentialLink, param_tilde[2], zero(T))
45+
unlink(LogLink, param_tilde[1], zero(T));
46+
unlink(LogLink, param_tilde[2], zero(T))
4747
]
4848
end
4949
function jacobian_link(::Type{Beta}, param_tilde::Vector{T}) where T
5050
return Diagonal([
51-
jacobian_link(ExponentialLink, param_tilde[1], zero(T));
52-
jacobian_link(ExponentialLink, param_tilde[2], zero(T))
51+
jacobian_link(LogLink, param_tilde[1], zero(T));
52+
jacobian_link(LogLink, param_tilde[2], zero(T))
5353
])
5454
end
5555

src/distributions/common_interface.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ end
1717
function fisher_information(D::Type{<:Distribution}, param::Vector{T}) where T
1818
return error("fisher_information not implemented for $D distribution")
1919
end
20-
function param_to_param_tilde(D::Type{<:Distribution}, param::Vector{T}) where T
21-
return error("param_to_param_tilde not implemented for $D distribution")
20+
function link(D::Type{<:Distribution}, param::Vector{T}) where T
21+
return error("link not implemented for $D distribution")
2222
end
23-
function param_tilde_to_param(D::Type{<:Distribution}, param_tilde::Vector{T}) where T
24-
return error("param_tilde_to_param not implemented for $D distribution")
23+
function unlink(D::Type{<:Distribution}, param_tilde::Vector{T}) where T
24+
return error("unlink not implemented for $D distribution")
2525
end
2626
function jacobian_link(D::Type{<:Distribution}, param_tilde::Vector{T}) where T
2727
return error("jacobian_link not implemented for $D distribution")

src/distributions/gamma.jl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,22 +31,22 @@ function log_likelihood(::Type{Gamma}, y::Vector{T}, param::Vector{Vector{T}}, n
3131
end
3232

3333
# Links
34-
function param_to_param_tilde(::Type{Gamma}, param::Vector{T}) where T
34+
function link(::Type{Gamma}, param::Vector{T}) where T
3535
return [
36-
param_to_param_tilde(ExponentialLink, param[1], zero(T));
37-
param_to_param_tilde(ExponentialLink, param[2], zero(T))
36+
link(LogLink, param[1], zero(T));
37+
link(LogLink, param[2], zero(T))
3838
]
3939
end
40-
function param_tilde_to_param(::Type{Gamma}, param_tilde::Vector{T}) where T
40+
function unlink(::Type{Gamma}, param_tilde::Vector{T}) where T
4141
return [
42-
param_tilde_to_param(ExponentialLink, param_tilde[1], zero(T));
43-
param_tilde_to_param(ExponentialLink, param_tilde[2], zero(T))
42+
unlink(LogLink, param_tilde[1], zero(T));
43+
unlink(LogLink, param_tilde[2], zero(T))
4444
]
4545
end
4646
function jacobian_link(::Type{Gamma}, param_tilde::Vector{T}) where T
4747
return Diagonal([
48-
jacobian_link(ExponentialLink, param_tilde[1], zero(T));
49-
jacobian_link(ExponentialLink, param_tilde[2], zero(T))
48+
jacobian_link(LogLink, param_tilde[1], zero(T));
49+
jacobian_link(LogLink, param_tilde[2], zero(T))
5050
])
5151
end
5252

src/distributions/log_normal.jl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ parametrized in \\mu and \\sigma^2
55
function score(y::T, ::Type{LogNormal}, param::Vector{T}) where T
66
return [
77
(log(y) - param[1])/param[2] ;
8-
-0.5/param[2] + 0.5*(log(y) - param[1])^2/param[2]^2
8+
-(0.5/param[2]) * (1 - ((log(y) - param[1])^2)/param[2])
99
]
1010
end
1111

@@ -28,22 +28,22 @@ function log_likelihood(::Type{LogNormal}, y::Vector{T}, param::Vector{Vector{T}
2828
end
2929

3030
# Links
31-
function param_to_param_tilde(::Type{LogNormal}, param::Vector{T}) where T
31+
function link(::Type{LogNormal}, param::Vector{T}) where T
3232
return [
33-
param_to_param_tilde(IdentityLink, param[1]);
34-
param_to_param_tilde(ExponentialLink, param[2], zero(T))
33+
link(IdentityLink, param[1]);
34+
link(LogLink, param[2], zero(T))
3535
]
3636
end
37-
function param_tilde_to_param(::Type{LogNormal}, param_tilde::Vector{T}) where T
37+
function unlink(::Type{LogNormal}, param_tilde::Vector{T}) where T
3838
return [
39-
param_tilde_to_param(IdentityLink, param_tilde[1]);
40-
param_tilde_to_param(ExponentialLink, param_tilde[2], zero(T))
39+
unlink(IdentityLink, param_tilde[1]);
40+
unlink(LogLink, param_tilde[2], zero(T))
4141
]
4242
end
4343
function jacobian_link(::Type{LogNormal}, param_tilde::Vector{T}) where T
4444
return Diagonal([
4545
jacobian_link(IdentityLink, param_tilde[1]);
46-
jacobian_link(ExponentialLink, param_tilde[2], zero(T))
46+
jacobian_link(LogLink, param_tilde[2], zero(T))
4747
])
4848
end
4949

src/distributions/normal.jl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,22 +31,22 @@ function log_likelihood(::Type{Normal}, y::Vector{T}, param::Vector{Vector{T}},
3131
end
3232

3333
# Links
34-
function param_to_param_tilde(::Type{Normal}, param::Vector{T}) where T
34+
function link(::Type{Normal}, param::Vector{T}) where T
3535
return [
36-
param_to_param_tilde(IdentityLink, param[1]);
37-
param_to_param_tilde(ExponentialLink, param[2], zero(T))
36+
link(IdentityLink, param[1]);
37+
link(LogLink, param[2], zero(T))
3838
]
3939
end
40-
function param_tilde_to_param(::Type{Normal}, param_tilde::Vector{T}) where T
40+
function unlink(::Type{Normal}, param_tilde::Vector{T}) where T
4141
return [
42-
param_tilde_to_param(IdentityLink, param_tilde[1]);
43-
param_tilde_to_param(ExponentialLink, param_tilde[2], zero(T))
42+
unlink(IdentityLink, param_tilde[1]);
43+
unlink(LogLink, param_tilde[2], zero(T))
4444
]
4545
end
4646
function jacobian_link(::Type{Normal}, param_tilde::Vector{T}) where T
4747
return Diagonal([
4848
jacobian_link(IdentityLink, param_tilde[1]);
49-
jacobian_link(ExponentialLink, param_tilde[2], zero(T))
49+
jacobian_link(LogLink, param_tilde[2], zero(T))
5050
])
5151
end
5252

src/distributions/poisson.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ function log_likelihood(::Type{Poisson}, y::Vector{Int}, param::Vector{Vector{T}
2424
end
2525

2626
# Links
27-
param_to_param_tilde(::Type{Poisson}, param::Vector{T}) where T = param_to_param_tilde.(ExponentialLink, param, zero(T))
28-
param_tilde_to_param(::Type{Poisson}, param_tilde::Vector{T}) where T = param_tilde_to_param.(ExponentialLink, param_tilde, zero(T))
29-
jacobian_link(::Type{Poisson}, param_tilde::Vector{T}) where T = Diagonal(jacobian_link.(ExponentialLink, param_tilde, zero(T)))
27+
link(::Type{Poisson}, param::Vector{T}) where T = link.(LogLink, param, zero(T))
28+
unlink(::Type{Poisson}, param_tilde::Vector{T}) where T = unlink.(LogLink, param_tilde, zero(T))
29+
jacobian_link(::Type{Poisson}, param_tilde::Vector{T}) where T = Diagonal(jacobian_link.(LogLink, param_tilde, zero(T)))
3030

3131
# utils
3232
function update_dist(::Type{Poisson}, param::Vector{T}) where T

src/distributions/weibull.jl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,22 @@ function log_likelihood(::Type{Weibull}, y::Vector{T}, param::Vector{Vector{T}},
2828
end
2929

3030
# Links
31-
function param_to_param_tilde(::Type{Weibull}, param::Vector{T}) where T
31+
function link(::Type{Weibull}, param::Vector{T}) where T
3232
return [
33-
param_to_param_tilde(ExponentialLink, param[1], zero(T));
34-
param_to_param_tilde(ExponentialLink, param[2], zero(T))
33+
link(LogLink, param[1], zero(T));
34+
link(LogLink, param[2], zero(T))
3535
]
3636
end
37-
function param_tilde_to_param(::Type{Weibull}, param_tilde::Vector{T}) where T
37+
function unlink(::Type{Weibull}, param_tilde::Vector{T}) where T
3838
return [
39-
param_tilde_to_param(ExponentialLink, param_tilde[1], zero(T));
40-
param_tilde_to_param(ExponentialLink, param_tilde[2], zero(T))
39+
unlink(LogLink, param_tilde[1], zero(T));
40+
unlink(LogLink, param_tilde[2], zero(T))
4141
]
4242
end
4343
function jacobian_link(::Type{Weibull}, param_tilde::Vector{T}) where T
4444
return Diagonal([
45-
jacobian_link(ExponentialLink, param_tilde[1], zero(T));
46-
jacobian_link(ExponentialLink, param_tilde[2], zero(T))
45+
jacobian_link(LogLink, param_tilde[1], zero(T));
46+
jacobian_link(LogLink, param_tilde[2], zero(T))
4747
])
4848
end
4949

src/gas/simulate.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,22 @@ function simulate(gas::GAS{D, T}, n::Int, initial_param_tilde::Vector{Vector{T}}
2727
# initial_values
2828
for i in 1:biggest_lag
2929
param_tilde[i] = initial_param_tilde[i]
30-
param[i] = param_tilde_to_param(D, initial_param_tilde[i])
30+
param[i] = unlink(D, initial_param_tilde[i])
3131
# Sample
32-
updated_dist = update_dist(D, param_tilde_to_param(D, param_tilde[i]))
32+
updated_dist = update_dist(D, unlink(D, param_tilde[i]))
3333
serie[i] = sample_observation(updated_dist)
3434
scores_tilde[i] = score_tilde(serie[i], D, param[i], param_tilde[i], gas.scaling)
3535
end
3636

3737
update_param_tilde!(param_tilde, gas.ω, gas.A, gas.B, scores_tilde, biggest_lag)
38-
updated_dist = update_dist(D, param_tilde_to_param(D, param_tilde[biggest_lag + 1]))
38+
updated_dist = update_dist(D, unlink(D, param_tilde[biggest_lag + 1]))
3939
serie[biggest_lag + 1] = sample_observation(updated_dist)
4040

4141
for i in biggest_lag + 1:n-1
4242
# update step
4343
univariate_score_driven_update!(param, param_tilde, scores_tilde, serie[i], gas, i)
4444
# Sample from the updated distribution
45-
updated_dist = update_dist(D, param_tilde_to_param(D, param_tilde[i + 1]))
45+
updated_dist = update_dist(D, unlink(D, param_tilde[i + 1]))
4646
serie[i + 1] = sample_observation(updated_dist)
4747
end
4848
update_param!(param, param_tilde, D, n)

0 commit comments

Comments
 (0)