Python 同一地块中的重尾分布和正态分布

Python 同一地块中的重尾分布和正态分布,python,matplotlib,scipy,statistics,Python,Matplotlib,Scipy,Statistics,我想用高斯分布显示重尾(Levy)分布(在同一个图中) 我是为高斯做的: from pylab import plot, show, grid, axis, xlabel, ylabel, title, rcParams import matplotlib.pyplot as plt import numpy as np import matplotlib.mlab as mlab import math mu = 0 variance = 1

我想用高斯分布显示重尾(Levy)分布(在同一个图中)

我是为高斯做的:

from pylab import plot, show, grid, axis, xlabel, ylabel, title, rcParams
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.mlab as mlab
import math
mu = 0                         
variance = 1
sigma = math.sqrt(variance)     
plt_z = np.linspace(-4, 4, 100)

1./(np.sqrt(2*np.pi)*sigma)*np.exp(-0.5 * (1./sigma*(x - mu))**2)
plt.plot(plt_z, mlab.normpdf(plt_z, mu, sigma))
plt.show()
我得到

现在我想在图中加上Levy分布,但没有得到正确的结果。我尝试使用
scipy.stats.levy
并手动添加公式:

1./(x * np.sqrt(2*np.pi*x)) * np.exp(-1/(2*x))
但是没有得到正确的情节

这就是我想要的

只是在同一个图中的重尾Levy分布

试试:

from pylab import plot, show, grid, axis, xlabel, ylabel, title, rcParams
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.mlab as mlab
import math
mu = 0                         
variance = 1
sigma = math.sqrt(variance)     
plt_z = np.linspace(-4, 4, 100)

1./(np.sqrt(2*np.pi)*sigma)*np.exp(-0.5 * (1./sigma*(x - mu))**2)
plt.plot(plt_z, mlab.normpdf(plt_z, mu, sigma)) #plotting the Gauss curve

mask_positive_x = plt_z > 0
plt_z = plt_z[mask_positive_x]
plt.plot(plt_z, 1./(plt_z * np.sqrt(2*np.pi*plt_z)) * np.exp(-1/(2*plt_z))) #plotting the Levy curve
plt.show()
利维分布仅定义为正x:

如果您绝对希望Levy曲线位于实线的两侧:

from pylab import plot, show, grid, axis, xlabel, ylabel, title, rcParams
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.mlab as mlab
import math
mu = 0                         
variance = 1
sigma = math.sqrt(variance)     
plt_z = np.linspace(-4, 4, 100)

1./(np.sqrt(2*np.pi)*sigma)*np.exp(-0.5 * (1./sigma*(x - mu))**2)
plt.plot(plt_z, mlab.normpdf(plt_z, mu, sigma)) #plotting the Gauss curve

plt.plot(plt_z, 1./(np.abs(plt_z) * np.sqrt(2*np.pi*np.abs(plt_z))) * np.exp(-1/(2*np.abs(plt_z)))) #plotting the Levy curve
plt.show()

我使用软件包在同一个正态分布图中绘制了alpha参数
1
的Levy稳定分布图

如果有人在这方面遇到困难,下面是代码:

from scipy.stats import norm
import matplotlib.pyplot as plt
import numpy as np
import levy


random_sample = levy.random(1.0, 0, 0, 1, shape=200)


parameters = norm.fit(random_sample)

x = np.linspace(-4,4,100)

# Generate the pdf (fitted distribution)
fitted_pdf = norm.pdf(x)

#Generate Levy fitted distribution
parameters2 = levy.fit_levy(random_sample)
levy_fitted = levy.levy(x, *parameters2[:4])

plt.figure(figsize=(12,8))
plt.plot(x,fitted_pdf,"blue",label="Gauss Fot", linewidth=2)
plt.plot(x, levy_fitted, "red", label="Levy Fit", linewidth=2)
plt.legend()

# show plots
plt.show()

您是否尝试将
plt.show()
放在两个
plt.plot()
之后?我得到了两个绘图,但第二个绘图对于某些rason来说几乎是重尾分布。它看起来只有两条垂直线。它的一侧看起来不错,但有一个错误:/Users/xxx/anaconda3/lib/python3.6/site packages/ipykernel_launcher.py:13:RuntimeWarning:sqrt del sys中遇到无效值。路径[0]我注意到Levy公式对
xIt的定义不正确,应该是
plt_z=pltz[mask_positive_x]
那么,
plt_z=np.abs(plt_z)
产生了
plt_z
的所有正值,其中包括每个值两次。因此
plt_z
中基本上没有负值
z
值。你可以打印出来自己看。所以基本上在第二个答案中,你只是在正x轴上绘制了两次。即使现在它也不正确。我建议您需要在发布编辑之前查看结果图。原点附近存在明显的不连续性。Levy分布在极限x趋于0的范围内为零。因此,仅沿y轴镜像正x轴曲线不会产生OP想要的结果。您无法在
plt_z=0
处获得最大值。