【发布时间】:2017-02-01 07:51:43
【问题描述】:
我正在尝试学习如何使用 Julia 中的 Mamba 包进行贝叶斯推理。尽管该软件包很棒,但作为初学者,我发现文档的信息有点稀缺。因此,我试图弄清楚如何实现一些非常简单的示例。
我的尝试
我实现了一个示例,用于对单变量正态分布的均值进行贝叶斯推理。代码如下:
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)
这似乎工作得很好(尽管可能有更好的编码方法?)。
我正在尝试做的事情却没有用。
在此示例中,我尝试对二元正态分布的均值进行贝叶斯推断。代码如下:
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)
您可能会注意到,我认为必要的更改很少。但是,我在某个地方做错了,当我尝试运行它时,我得到一个错误(类型之间的转换错误),这对我没有进一步的帮助。
任何帮助表示赞赏。如果这可行,我会考虑将这个简单的示例贡献给其他新用户的 Mamba 文档。谢谢。
附录:错误信息
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
【问题讨论】:
-
请添加回溯(或至少是错误消息),以便有人可以帮助您找到发生了什么。
-
好点。更新了上面的帖子。
-
鉴于回溯,我猜您的其中一个条目的尺寸有误?
-
我当然尝试将声明“Stochastic(1,...”更改为“Stochastic(2,...”),但无济于事。
-
好的,现在我认为问题必须在我如何指定数据 x 上。不幸的是,在 Mamba 文档中,我找不到将多元数据指定为分布结果的示例。
标签: julia bayesian sampling montecarlo