在 Julia 中估计概率分布并从中抽样

Estimating a probability distribution and sampling from it in Julia

我正在尝试使用 Julia 使用 N 个观察到的数据点(存储为 Float64 数字的数组)来估计连续单变量分布,然后从这个估计的分布中抽样。我没有将注意力限制在某些分布族上的先验知识。

我正在考虑使用 KernelDensity 包来估计分布,但我不确定如何从结果输出中抽样。

任何 help/tips 将不胜感激。

如果对估计分布没有任何限制,经验分布函数(参见Wikipedia). For this distribution there are very nice theorems about convergence to actual distribution (see Dvoretzky–Kiefer–Wolfowitz inequality)是一个自然的候选者。

有了这个选择,采样就特别简单了。如果 dataset 是当前样本的列表,那么 dataset[rand(1:length(dataset),sample_size)] 是来自经验分布的一组新样本。使用 Distributions 包,它可以更具可读性,如下所示:

using Distributions
new_sample = sample(dataset,sample_size)

最后,内核密度估计也不错,但可能需要选择一个参数(内核及其宽度)。这显示了对特定分布族的偏好。从核分布中抽样与从经验分布中抽样惊人地相似: 1. 从经验分布中选择一个样本; 2. 使用来自核函数的样本对每个样本进行扰动。

例如,如果核函数是宽度为w的正态分布,那么扰动样本可以计算为:

new_sample = dataset[rand(1:length(dataset),sample_size)]+w*randn(sample_size)