用 Julia 绘制分布的混合图

问题描述

我想用 Julia 绘制两个一维高斯分布的混合图。我不确定最好的方法是什么。我正在尝试使用 distributions.jl 并且专门用于两者

  • 使用 d1 = normal(0.0,1.0)d2 = normal(1.0,1.8) 定义两个高斯
  • 定义一个混合物使用 MixtureModel(normal[ normal(-2.0,1.2),normal(0.0,1.0),normal(3.0,2.5)],[0.1,0.6,0.3])

现在,对于第一次尝试,我不知道如何定义权重。因此,我的问题是关于如何继续简单地生成和抽取这种混合物的样本

我想绘制它们并使用这些样本来执行参数估计。

解决方法

我不确定我是否完全理解这个问题 - 为什么要定义 d1d2

要回答您的大胆问题:只需使用 rand() 从您的混合分布中提取:

julia> using Distributions

julia> mm = MixtureModel([Normal(-2.0,1.2),Normal(),Normal(3.0,2.5)],[0.1,0.6,0.3])
MixtureModel{Normal{Float64}}(K = 3)
components[1] (prior = 0.1000): Normal{Float64}(μ=-2.0,σ=1.2)
components[2] (prior = 0.6000): Normal{Float64}(μ=0.0,σ=1.0)
components[3] (prior = 0.3000): Normal{Float64}(μ=3.0,σ=2.5)

julia> rand(mm)
1.882130062980293

请注意,这里我使用了 Normal() 而不是 Normal(0.0,1.0),因为 Normal() 已经返回标准正态分布。

绘制:

julia> using Plots

julia> histogram(rand(mm,100_000),normalize = true,xlabel = "Value",ylabel = "Frequency",label = "Mixture model")

enter image description here