我正在尝试使用Python中的scypi来定义Pareto分布。我有alpha和xm的值,就像它们在分布的经典定义中一样,例如在维基百科:https://en.wikipedia.org/wiki/Pareto_distribution 假设我想要alpha = 4和xm = 3。 如何使用这些参数初始化scipy.stats.pareto?
import scipy.stats as sts
pareto_alpha = 4
pareto_xm = 3
pareto_rv = sts.pareto(???)
以下是帕累托函数https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.pareto.html#scipy.stats.pareto的文档页面 我找不到那里的构造函数的清晰描述。
答案 0 :(得分:2)
您可以将pdf绘制为不同的b值(形状参数),如下所示:
import numpy as np
from matplotlib import pyplot as plt
from scipy.stats import pareto
xm = 1 # scale
alphas = [1, 2, 3] # shape parameters
x = np.linspace(0, 5, 1000)
output = np.array([pareto.pdf(x, scale = xm, b = a) for a in alphas])
plt.plot(x, output.T)
plt.show()
答案 1 :(得分:1)
由于我没有被完全定罪,所以我进行了一些测试。
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import pareto
def my_pareto_pdf(x, a, x_m):
"""
Returns the value of the pareto density function at
the point x.
"""
if x >= x_m:
pdv = a
pdv *= x_m**a
pdv /= x**(a+1)
return pdv
else:
return 0
x = np.linspace(0, 10, 100)
plt.plot(x, pareto.pdf(x, b=1.3), color='k', label='Scipy: b=1.3')
plt.plot(x, [my_pareto_pdf(val, a=1.3, x_m=1) for val in x], color='tab:blue', alpha=0.5, lw=5, label='Mypdf: a=1.3 x_m=1')
plt.plot(x, pareto.pdf(x, b=1.7, scale=3), color='k', label='Scipy: b=1.7 scale=3')
plt.plot(x, [my_pareto_pdf(val, a=1.7, x_m=3) for val in x], color='tab:blue', alpha=0.5, lw=5, label='Mypdf: a=1.7 x_m=3')
plt.plot(x, pareto.pdf(x, b=2.3, scale=6), color='k', label='Scipy: b=2.3 scale=6')
plt.plot(x, [my_pareto_pdf(val, a=2.3, x_m=6) for val in x], color='tab:blue', alpha=0.5, lw=5, label='Mypdf: a=2.3 x_m=6')
plt.legend(loc='best')
plt.title('Pareto PDFs')
plt.show()
这是输出。
因此,在scipy中,参数b充当经典定义的Alpha,缩放作为xm。