使用 scipy stats 将理论分布拟合到采样经验 CDF

Des*_*ova 1 python distribution scipy cdf

我有一个数据包丢失的 CDF 分布图。因此,我没有原始数据或 CDF 模型本身,而是来自 CDF 曲线的样本。(数据是从文献中发表的图表中提取的。)

我想找到哪种分布以及哪些参数最适合 CDF 样本。

我已经看到 Scipy 统计分布提供 fit(data) 方法,但所有示例都适用于原始数据点。随后根据拟合参数得出 PDF/CDF。对我的 CDF 样本使用拟合不会给出合理的结果。

我是否正确地假设 fit() 不能直接应用于经验 CDF 中的数据样本?

我可以使用哪些替代方法来查找匹配的已知分布?

tch*_*tch 6

我不确定你到底想做什么。当你说你有 CDF 时,这是什么意思?您有一些数据点或函数本身吗?如果您可以发布更多信息或一些示例数据,将会很有帮助。

如果您有一些数据点并且知道分布,那么使用 scipy 并不难做到。如果您不知道该分布,您可以迭代所有分布,直到找到一个效果相当好的分布。

我们可以定义 所需形式的函数scipy.optimize.curve_fit。即第一个参数应该是x,然后其他参数都是形参。

我使用此函数根据带有一点附加噪声的正态随机变量的 CDF 生成一些测试数据。

n = 100
x = np.linspace(-4,4,n)
f = lambda x,mu,sigma: scipy.stats.norm(mu,sigma).cdf(x)

data = f(x,0.2,1) + 0.05*np.random.randn(n)
Run Code Online (Sandbox Code Playgroud)

现在,使用curve_fit来查找参数。

mu,sigma = scipy.optimize.curve_fit(f,x,data)[0]
Run Code Online (Sandbox Code Playgroud)

这给出了输出

>> mu,sigma
0.1828320963531838, 0.9452044983927278
Run Code Online (Sandbox Code Playgroud)

我们可以绘制原始 CDF(橙色)、噪声数据并拟合 CDF(蓝色),并观察其效果非常好。 真实 CDF、噪声数据、恢复 CDF

请注意,curve_fit可以采用一些附加参数,并且输出提供有关函数拟合程度的附加信息。