J'essaie d'apprendre à utiliser le paquet Mamba dans Julia pour faire des inférences bayésiennes. Bien que le paquet soit génial, en tant que débutant je trouve la documentation un peu rare en information. Par conséquent, j'essaie de comprendre comment mettre en œuvre des exemples très simples.Apprendre à utiliser le paquet Mamba dans Julia
Ce que j'ai essayé
I mis en œuvre un exemple pour faire l'inférence bayésienne pour la moyenne d'une distribution normale univariée. Le code suivant:
using Mamba
## Model Specification
model = Model(
x = Stochastic(1,
mu -> Normal(mu, 2.0),
false
),
mu = Stochastic(
() -> Normal(0.0, 1000.0),
true
)
)
## Data
data = Dict{Symbol, Any}(
:x => randn(30)*2+13
)
## Initial Values
inits = [
Dict{Symbol, Any}(
:x => data[:x],
:mu => randn()*1
)
]
## Sampling Scheme Assignment
scheme1 = NUTS([:mu])
setsamplers!(model, [scheme1])
sim1 = mcmc(model, data, inits, 10000, burnin=250, thin=2, chains=1);
describe(sim1)
Cela semble fonctionner tout à fait bien (mais il peut y avoir de meilleures façons de coder peut-être cela?). Ce que j'essaie de faire et ne fonctionne pas.
Dans cet exemple, j'essaie de faire une inférence bayésienne pour la moyenne d'une distribution normale bivariée. Le code suit:
using Mamba
## Model Specification
model = Model(
x = Stochastic(1,
mu -> MvNormal(mu, eye(2)),
false
),
mu = Stochastic(1,
() -> MvNormal(zeros(2), 1000.0),
true
)
)
## Data
data = Dict{Symbol, Any}(
:x => randn(2,30)+13
)
## Initial Values
inits = [
Dict{Symbol, Any}(
:x => data[:x],
:mu => randn(2)*1
)
]
## Sampling Scheme Assignment
scheme1 = NUTS([:mu])
setsamplers!(model, [scheme1])
sim1 = mcmc(model, data, inits, 10000, burnin=250, thin=2, chains=1);
describe(sim1)
Comme vous pouvez le remarquer, les changements que je suppose nécessaires sont minimes. Cependant, je fais quelque part quelque chose de mal et quand j'essaye d'exécuter ceci j'obtiens une erreur (une conversion entre les types erreur) qui ne m'aide pas plus loin.
Toute aide appréciée. Si cela fonctionne, je vais envisager de contribuer cet exemple simple à la documentation Mamba pour d'autres nouveaux utilisateurs. Merci.
Addendum: le message d'erreur
ERROR: MethodError: Cannot `convert` an object of type Array{Float64,2} to an object of type Array{Float64,1}
This may have arisen from a call to the constructor Array{Float64,1}(...),
since type constructors fall back to convert methods.
in setinits!(::Mamba.ArrayStochastic{1}, ::Mamba.Model, ::Array{Float64,2}) at /lhome/lgiannins/.julia/v0.5/Mamba/src/model/dependent.jl:164
in setinits!(::Mamba.Model, ::Dict{Symbol,Any}) at /lhome/lgiannins/.julia/v0.5/Mamba/src/model/initialization.jl:11
in setinits!(::Mamba.Model, ::Array{Dict{Symbol,Any},1}) at /lhome/lgiannins/.julia/v0.5/Mamba/src/model/initialization.jl:24
in #mcmc#29(::Int64, ::Int64, ::Int64, ::Bool, ::Function, ::Mamba.Model, ::Dict{Symbol,Any}, ::Array{Dict{Symbol,Any},1}, ::Int64) at /lhome/lgiannins/.julia/v0.5/Mamba/src/model/mcmc.jl:29
in (::Mamba.#kw##mcmc)(::Array{Any,1}, ::Mamba.#mcmc, ::Mamba.Model, ::Dict{Symbol,Any}, ::Array{Dict{Symbol,Any},1}, ::Int64) at ./<missing>:0
S'il vous plaît ajouter le retraçage (ou au moins le message d'erreur) pour que quelqu'un puisse vous aider à trouver ce qui se passe. –
bon point. Mise à jour post ci-dessus. – user1438310
étant donné le retraçage, je suppose que l'une de vos entrées a les mauvaises dimensions? –