Python 同一地块中的重尾分布和正态分布
我想用高斯分布显示重尾(Levy)分布(在同一个图中) 我是为高斯做的: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
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
处获得最大值。