概率图相关系数
概率图相关系数 (PPCC) 是一种图形技术,用于识别最能描述数据集的形状参数。大多数统计分析都是在假设分布的形状的情况下完成的。然而,这些假设可能会受到挑战,因为有时根据形状参数,分布可能具有非常不同的形状。因此,最好将形状参数作为分析的一部分,以便我们对总体分布更有信心。
PPCC 图是使用以下轴形成的:
- 纵轴:概率图相关系数
- 水平轴:形状参数的值
PPCC 图的主要目的是首先找到一个合适的形状参数值。除了计算分布的形状参数外,PPCC 图还可用于确定最合适的分布族。
PPCC 图回答了以下问题:
- 分布式家庭中最合适的成员是什么?
- 这个最合适的成员是否产生了足够好的拟合?
- 与其他分布相比,这个分布族是否提供了良好的拟合?
- 形状参数的选择有多敏感?
形状参数为 λ 的土耳其-拉姆达 PPCC 图对于对称分布特别有用。它表明一个分布是短尾还是长尾,它可以进一步表明几个常见的分布。具体来说,
- λ =-1,分布近似为柯西。
- λ = 0,分布完全符合逻辑。
- λ = 0.14,分布近似正态。
- λ = 0.5,分布呈 U 形。
- λ = 1,分布完全均匀。
如果土耳其-Lambda PPCC 图给出的最大值 = 0.14,那么我们可以得出结论,正态分布是数据的良好近似值。如果最大值 < 0.14,则意味着长尾分布(如双指数或逻辑)将是更好的选择。如果最大值为 -1,则表示非常长的尾分布,例如柯西。如果最大值 > 0.14,则表示非常短尾的分布,例如 Beta 或 Uniform。
执行
- 在此实现中,我们将生成不同的分布并检查其土耳其-Lambda 形状参数值,并绘制 PPCC 图。我正在使用 Google Colaboratory,其中包含一些预安装的库,例如 scipy、numpy、statsmodel、seaborn 等。但是,可以在本地环境中使用pip install轻松安装这些库。
Python3
# import libraries
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as sc
import seaborn as sns
# generate different distributions
sample_size = 10000
standard_norm = np.random.normal(size=sample_size)
cauchy_dist = sc.cauchy.rvs(loc=1, scale=10, size=sample_size)
logistic_dist = np.random.logistic(size=sample_size)
uniform_dist = np.random.uniform(size= sample_size)
beta_dist = np.random.beta(a=1, b=1, size=sample_size)
# Normal Distribution
fig, ax = plt.subplots(1, 2, figsize=(12, 7))
sns.histplot(standard_norm,kde=True, color ='blue',ax=ax[0])
sc.ppcc_plot(standard_norm, -5,5, plot=ax[1])
shape_param_normal = sc.ppcc_max(standard_norm)
ax[1].vlines(shape_param_normal,0,1, colors='red')
print("shape parameter of normal distribution is ", shape_param_normal)
# Cauchy Distribution
fig, ax = plt.subplots(1, 2, figsize=(12, 7))
sns.histplot(cauchy_dist, color ='blue',ax=ax[0])
ax[0].set_xlim(-40,40)
sc.ppcc_plot(cauchy_dist, -5,5, plot=ax[1])
shape_param_cauchy = sc.ppcc_max(cauchy_dist)
ax[1].vlines(shape_param_cauchy,0,1, colors='red')
print('shape parameter of cauchy distribution is ',shape_param_cauchy)
# Logistic Distribution
fig, ax = plt.subplots(1, 2, figsize=(12, 7))
sns.histplot(logistic_dist, color ='blue',ax=ax[0])
sc.ppcc_plot(logistic_dist, -5,5, plot=ax[1])
shape_param_logistic = sc.ppcc_max(logistic_dist)
ax[1].vlines(shape_param_logistic,0,1, colors='red')
print("shape parameter of logistic is ",shape_param_logistic)
# Uniform Distribution
fig, ax = plt.subplots(1, 2, figsize=(12, 7))
sns.histplot(uniform_dist, color ='green',ax=ax[0])
sc.ppcc_plot(uniform_dist, -5,5, plot=ax[1])
shape_para_uniform =sc.ppcc_max(uniform_dist)
ax[1].vlines(shape_para_uniform,0,1, colors='red')
print("shape parameter of uniform distribution is ",shape_para_uniform)
# Beta Distribution
fig, ax = plt.subplots(1, 2, figsize=(12, 7))
sns.histplot(beta_dist, color ='blue',ax=ax[0])
sc.ppcc_plot(beta_dist, -5,5, plot=ax[1])
shape_para_beta =sc.ppcc_max(beta_dist)
ax[1].vlines(shape_para_beta,0,1, colors='red')
print("shape parameter of beta distribution is :",shape_para_beta)
shape parameter of normal distribution is 0.14139046072745928
shape parameter of cauchy distribution is -0.8555566289941865
shape parameter of logistic is 0.003792036190661425
shape parameter of uniform distribution is 1.0681942803525217
shape parameter of beta distribution is : 0.9158983492057267
参考
- PPCC 图 NIST