Skip to content
This repository has been archived by the owner on Nov 8, 2024. It is now read-only.

Commit

Permalink
Fixed Turing @model to functions (#41)
Browse files Browse the repository at this point in the history
  • Loading branch information
storopoli authored Mar 13, 2022
1 parent e77c5d5 commit fec2d6f
Show file tree
Hide file tree
Showing 9 changed files with 16 additions and 16 deletions.
6 changes: 3 additions & 3 deletions _literate/10_multilevel_models.jl
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ using Random:seed!
seed!(123)
setprogress!(false) # hide

@model varying_intercept(X, idx, y; n_gr=length(unique(idx)), predictors=size(X, 2)) = begin
@model function varying_intercept(X, idx, y; n_gr=length(unique(idx)), predictors=size(X, 2))
#priors
α ~ Normal(mean(y), 2.5 * std(y)) # population-level intercept
β ~ filldist(Normal(0, 2), predictors) # population-level coefficients
Expand Down Expand Up @@ -135,7 +135,7 @@ end;

# In Turing we can accomplish this as:

@model varying_slope(X, idx, y; n_gr=length(unique(idx)), predictors=size(X, 2)) = begin
@model function varying_slope(X, idx, y; n_gr=length(unique(idx)), predictors=size(X, 2))
#priors
α ~ Normal(mean(y), 2.5 * std(y)) # population-level intercept
σ ~ Exponential(1 / std(y)) # residual SD
Expand Down Expand Up @@ -175,7 +175,7 @@ end;

# In Turing we can accomplish this as:

@model varying_intercept_slope(X, idx, y; n_gr=length(unique(idx)), predictors=size(X, 2)) = begin
@model function varying_intercept_slope(X, idx, y; n_gr=length(unique(idx)), predictors=size(X, 2))
#priors
α ~ Normal(mean(y), 2.5 * std(y)) # population-level intercept
σ ~ Exponential(1 / std(y)) # residual SD
Expand Down
10 changes: 5 additions & 5 deletions _literate/11_Turing_tricks.jl
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ using Random:seed!
seed!(123)
setprogress!(false) # hide

@model linreg(X, y; predictors=size(X, 2)) = begin
@model function function linreg(X, y; predictors=size(X, 2)
#priors
α ~ Normal(mean(y), 2.5 * std(y))
β ~ filldist(TDist(3), predictors)
Expand Down Expand Up @@ -144,7 +144,7 @@ savefig(joinpath(@OUTPUT, "funnel.svg")); # hide

# To see the devil's funnel (how it is known in some Bayesian circles) in action, let's code it in Turing and then sample:

@model funnel() = begin
@model function funnel()
y ~ Normal(0, 3)
x ~ Normal(0, exp(y / 2))
end
Expand All @@ -162,7 +162,7 @@ end
# This is why is called Non-Centered Parametrization because we "decouple" the parameters and
# reconstruct them before.

@model ncp_funnel() = begin
@model function ncp_funnel()
~ Normal()
~ Normal()
y = 3.0 *# implies y ~ Normal(0, 3)
Expand All @@ -177,7 +177,7 @@ chain_ncp_funnel = sample(ncp_funnel(), NUTS(), MCMCThreads(), 2_000, 4)
# in [10. **Multilevel Models (a.k.a. Hierarchical Models)**](/pages/10_multilevel_models/). Here was the
# approach that we took, also known as Centered Parametrization (CP):

@model varying_intercept(X, idx, y; n_gr=length(unique(idx)), predictors=size(X, 2)) = begin
@model function varying_intercept(X, idx, y; n_gr=length(unique(idx)), predictors=size(X, 2))
#priors
α ~ Normal(mean(y), 2.5 * std(y)) # population-level intercept
β ~ filldist(Normal(0, 2), predictors) # population-level coefficients
Expand All @@ -194,7 +194,7 @@ end;

# To perform a Non-Centered Parametrization (NCP) in this model we do as following:

@model varying_intercept_ncp(X, idx, y; n_gr=length(unique(idx)), predictors=size(X, 2)) = begin
@model function varying_intercept_ncp(X, idx, y; n_gr=length(unique(idx)), predictors=size(X, 2))
#priors
α ~ Normal(mean(y), 2.5 * std(y)) # population-level intercept
β ~ filldist(Normal(0, 2), predictors) # population-level coefficients
Expand Down
2 changes: 1 addition & 1 deletion _literate/12_epi_models.jl
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ using Random:seed!
seed!(123)
setprogress!(false) # hide

@model bayes_sir(infected, i₀, r₀, N) = begin
@model function bayes_sir(infected, i₀, r₀, N)
#calculate number of timepoints
l = length(infected)

Expand Down
2 changes: 1 addition & 1 deletion _literate/4_Turing.jl
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ savefig(joinpath(@OUTPUT, "dice.svg")); # hide
using Turing
setprogress!(false) # hide

@model dice_throw(y) = begin
@model function dice_throw(y)
#Our prior belief about the probability of each result in a six-sided dice.
#p is a vector of length 6 each with probability p that sums up to 1.
p ~ Dirichlet(6, 1)
Expand Down
2 changes: 1 addition & 1 deletion _literate/5_MCMC.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1137,7 +1137,7 @@ savefig(joinpath(@OUTPUT, "funnel.svg")); # hide
using Turing
setprogress!(false) # hide

@model dice_throw(y) = begin
@model function dice_throw(y)
#Our prior belief about the probability of each result in a six-sided dice.
#p is a vector of length 6 each with probability p that sums up to 1.
p ~ Dirichlet(6, 1)
Expand Down
2 changes: 1 addition & 1 deletion _literate/6_linear_reg.jl
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ using Random:seed!
seed!(123)
setprogress!(false) # hide

@model linreg(X, y; predictors=size(X, 2)) = begin
@model function linreg(X, y; predictors=size(X, 2))
#priors
α ~ Normal(mean(y), 2.5 * std(y))
β ~ filldist(TDist(3), predictors)
Expand Down
2 changes: 1 addition & 1 deletion _literate/7_logistic_reg.jl
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ using Random:seed!
seed!(123)
setprogress!(false) # hide

@model logreg(X, y; predictors=size(X, 2)) = begin
@model function logreg(X, y; predictors=size(X, 2))
#priors
α ~ Normal(0, 2.5)
β ~ filldist(TDist(3), predictors)
Expand Down
4 changes: 2 additions & 2 deletions _literate/8_count_reg.jl
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ using Random:seed!
seed!(123)
setprogress!(false) # hide

@model poissonreg(X, y; predictors=size(X, 2)) = begin
@model function poissonreg(X, y; predictors=size(X, 2))
#priors
α ~ Normal(0, 2.5)
β ~ filldist(TDist(3), predictors)
Expand Down Expand Up @@ -253,7 +253,7 @@ end

# Now we create our Turing model with the alternative `NegBinomial2` parameterization:

@model negbinreg(X, y; predictors=size(X, 2)) = begin
@model function negbinreg(X, y; predictors=size(X, 2))
#priors
α ~ Normal(0, 2.5)
β ~ filldist(TDist(3), predictors)
Expand Down
2 changes: 1 addition & 1 deletion _literate/9_robust_reg.jl
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ seed!(123)
seed!(456) # hide
setprogress!(false) # hide

@model robustreg(X, y; predictors=size(X, 2)) = begin
@model function robustreg(X, y; predictors=size(X, 2))
#priors
νₐ ~ LogNormal(1, 1)
νᵦ ~ LogNormal(1, 1)
Expand Down

0 comments on commit fec2d6f

Please sign in to comment.