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



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

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

如果对估计分布没有任何限制,一个自然的候选者将是经验分布函数(参见Wikipedia)。对于这个分布,有一些很好的关于收敛到实际分布的定理(见Dvoretzky-Kiefer-Wolfowitz不等式)。

有了这个选择,采样特别简单。如果dataset是当前样本的列表,则dataset[rand(1:length(dataset),sample_size)]是来自经验分布的新样本的集合。使用distribution包,它可以更容易读,像这样:

using Distributions
new_sample = sample(dataset,sample_size)

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

例如,核函数为宽度为w的正态分布,则扰动样本可计算为:

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

最新更新