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

时间:2016-10-19 14:54:58

标签: julia distribution kernel-density

我正在尝试使用Julia来估计使用N个观察数据点(存储为Float64数组的数组)的连续单变量分布,然后从该估计分布中进行采样。我没有先前的知识限制对某些发行家族的关注。

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

非常感谢任何帮助/提示。

1 个答案:

答案 0 :(得分:6)

对估计分布没有任何限制,自然候选者将是经验分布函数(见Wikipedia)。对于这种分布,有关于收敛到实际分布的非常好的定理(见Dvoretzky–Kiefer–Wolfowitz inequality)。

通过这种选择,采样特别简单。如果dataset[rand(1:length(dataset),sample_size)]是当前样本的列表,则using Distributions new_sample = sample(dataset,sample_size) 是来自经验分布的一组新样本。使用Distributions包,它可以更具可读性,如下所示:

w

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

例如,如果核函数是宽度new_sample = dataset[rand(1:length(dataset),sample_size)]+w*randn(sample_size) 的正态分布,那么扰动的样本可以计算为:

@@Identity