我正在尝试使用Julia来估计使用N个观察数据点(存储为Float64
数组的数组)的连续单变量分布,然后从该估计分布中进行采样。我没有先前的知识限制对某些发行家族的关注。
我在考虑使用KernelDensity包来估计分布,但我不确定如何从结果输出中进行采样。
非常感谢任何帮助/提示。
答案 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