6

我有一组真实数据,我想使用这些数据找到概率分布,然后使用它们的属性根据它们的 pdf 生成一些随机点。我的数据集示例如下:

#Mag Weight
21.9786 3.6782
24.0305 6.1120
21.9544 4.2225
23.9383 5.1375
23.9352 4.6499
23.0261 5.1355
23.8682 5.9932
24.8052 4.1765
22.8976 5.1901
23.9679 4.3190
25.3362 4.1519
24.9079 4.2090
23.9851 5.1951
22.2094 5.1570
22.3452 5.6159
24.0953 6.2697
24.3901 6.9299
24.1789 4.0222
24.2648 4.4997
25.3931 3.3920
25.8406 3.9587
23.1427 6.9398
21.2985 7.7582
25.4807 3.1112
25.1935 5.0913
25.2136 4.0578
24.6990 3.9899
23.5299 4.6788
24.0880 7.0576
24.7931 5.7088
25.1860 3.4825
24.4757 5.8500
24.1398 4.9842
23.4947 4.4730
20.9806 5.2717
25.9470 3.4706
25.0324 3.3879
24.7186 3.8443
24.3350 4.9140
24.6395 5.0757
23.9181 4.9951
24.3599 4.1125
24.1766 5.4360
24.8378 4.9121
24.7362 4.4237
24.4119 6.1648
23.8215 5.9184
21.5394 5.1542
24.0081 4.2308
24.5665 4.6922
23.5827 5.4992
23.3876 6.3692
25.6872 4.5055
23.6629 5.4416
24.4821 4.7922
22.7522 5.9513
24.0640 5.8963
24.0361 5.6406
24.8687 4.5699
24.8795 4.3198
24.3486 4.5305
21.0720 9.5246
25.2960 3.0828
23.8204 5.8605
23.3732 5.1161
25.5097 2.9010
24.9206 4.0999
24.4140 4.9073
22.7495 4.5059
24.3394 3.5061
22.0560 5.5763
25.4404 5.4916
25.4795 4.4089
24.1772 3.8626
23.6042 4.7476
23.3537 6.4804
23.6842 4.3220
24.1895 3.6072
24.0328 4.3273
23.0243 5.6789
25.7042 4.4493
22.1983 6.1868
22.3661 5.9132
20.9426 4.8079
20.3806 10.1128
25.0105 4.4296
23.6648 6.6482
25.2780 4.4933
24.6870 4.4836
25.4565 4.0990
25.0415 3.9384
24.6098 4.6057
24.7796 4.2042

我怎么能这样做?我的第一次尝试是将多项式拟合到分箱数据并找到每个幅度分箱中权重的概率分布,但我认为这可能是一种更聪明的方法。例如,scipy.stats.rv_continuous用于从给定分布中采样数据,但我不知道它是如何工作的,并且没有足够的示例。

更新: 由于我有很多评论要使用KDE,我使用scipy.stats.gaussian_kde并得到以下结果。 在此处输入图像描述

我想知道表示我的数据属性是否是一个好的概率分布?首先,我该如何测试它,其次,是否有可能适合多个高斯 kdescipy.stats

4

3 回答 3

1

(1) 如果您对从中采样这些数据的分布有所了解,则将该分布拟合到数据(即,通过最大似然或其他方式调整参数),然后对其进行采样。

(2) 对于更接近经验的方法,随机选择一个数据(以相等的概率),然后假设它是一个小高斯凹凸的中心,并从那个凹凸中采样。这相当于构造一个核密度估计并从中采样。您必须为颠簸选择标准偏差。

(3) 对于完全经验的方法,随机选择一个数据(以相等的概率)。这相当于假设经验分布与实际分布相同。

于 2014-06-13T17:10:26.473 回答
0

您是否尝试创建数据的直方图?这将使您了解密度函数的形状,此时您可以尝试将数据拟合到已知分布。一旦你有一个拟合分布,你可以生成伪随机变量来进行“健全性检查”,执行像 Kolmogorov-Smirnov 这样的非参数检验。

所以,我会采取以下步骤:

  1. 创建直方图
  2. 确定数据的特征(汇总统计等)。
  3. 尝试拟合参数分布。
  4. 尝试拟合非参数分布。
  5. 进行假设检验以评估拟合度。
于 2014-06-14T02:29:30.673 回答
0

这个数据代表什么?

SciPy 不会帮助您决定使用哪种类型的发行版。这种选择取决于您的数据来自何处。一旦你决定了一个分布(或者你可以尝试几个),那么你可以轻松地对你的数据执行类似 scipy.optimize.curve_fit 的操作,以决定提供给 scipy.stats 中 pdf 类的最佳参数,以便它与您的数据匹配。然后使用 scipy 连续随机变量从您的分布中生成新点。

此外,多项式不是概率密度函数,因为它没有被归一化(对所有 x 发散的积分)。据我所知,多项式拟合不会帮助你。

于 2014-06-13T15:59:29.077 回答