首页 > 解决方案 > 使用 python 拟合经验分布

问题描述

我有 255 个月(约 21 年)的金融资产回报率,范围从 -22.25% 到 +18.09%。我正在使用Scipy (Python) 将经验分布拟合到理论分布中的代码?将数据拟合到分布中并生成随机数。

在此处输入图像描述

这是数据的直方图。我相信上面的代码尝试使用 MLE(最大似然估计)将数据拟合到分布中,并且列表中有大约 88 种不同的分布。我的问题是,例如,burr分布只是正随机变量(https://en.wikipedia.org/wiki/Burr_distributionhttps://docs.scipy.org/doc/scipy/reference/generated/scipy.stats .burr.html)。

但是当我拟合分布、获取参数并制作 PDF 时,我得到以下结果: 在此处输入图像描述

其中分布既有正值又有负值。

老实说,我认为我并不完全理解代码和拟合分布的含义。为什么应该只适合正值的分布也适合负值?

标签: pythonscipystatistics

解决方案


试试distfit库。它适合基于您的经验数据的最佳理论分布。它返回 loc/scale 参数。您可以设置方向性以测试显着性(上限/下限)。拟合模型可用于生成新样本。有关文档,请参见此处。

pip install distfit

# import library
from distfit import distfit

# Lets create some random data for demonstration purposes. Ssuppose that X is your data.
X = np.random.normal(0, 2, 10000)

# Initialize with default settings
model= distfit(bound='both')

# Fit to find the best theoretical distribution 
model.fit_transform(X)

# The fitted distribution can now be used to generate new samples.
Xgenerate = model.generate(n=1000)

推荐阅读