📜  Python – 统计中的偏正态分布(1)

📅  最后修改于: 2023-12-03 15:04:13.308000             🧑  作者: Mango

Python - 统计中的偏正态分布

什么是偏正态分布?

偏正态分布,也称为斯凯(G)分布,是统计学中的一种概率分布。它具有单峰、偏态和正态尾部的特点,它的概率密度函数 (PDF) 为:

$$ f(x; \alpha) = \frac{2}{\sqrt{\pi}} \exp(-\alpha x^2) \cdot \int_0^x \exp(\alpha t^2) dt $$

其中 $\alpha > 0$ 是分布的一个形状参数。

如何生成偏正态分布?

Python 中可以使用 scipy.stats.skewnorm 模块来生成偏正态分布。可以使用 skewnorm.rvs() 方法来生成偏正态分布的随机变量。

from scipy.stats import skewnorm

# 生成偏正态分布的随机变量
a = 4 # shape parameter
data = skewnorm.rvs(a, size=1000)

偏正态分布的随机变量的概率密度函数可以使用 skewnorm.pdf() 方法来计算。

import numpy as np
import matplotlib.pyplot as plt

# 绘制偏正态分布的概率密度函数
x = np.linspace(-10, 10, 1000)
pdf = skewnorm.pdf(x, a)
plt.plot(x, pdf, label=f'shape parameter = {a}')

plt.title('Skew Normal PDF')
plt.xlabel('x')
plt.ylabel('pdf')
plt.legend()
plt.show()

skew_normal_pdf.png

如何计算偏正态分布的统计指标?

可以使用 scipy.stats.skewnorm 模块提供的各种方法来计算偏正态分布的统计指标,例如均值、方差、偏度、峰度等。

import scipy.stats as stats

# 计算偏正态分布的均值和方差
mean, var = stats.skewnorm.stats(a, moments='mv')
print(f'mean = {mean:.2f}, variance = {var:.2f}')

# 计算偏正态分布的偏度和峰度
skewness = stats.skew(data)
kurtosis = stats.kurtosis(data)
print(f'skewness = {skewness:.2f}, kurtosis = {kurtosis:.2f}')
如何拟合偏正态分布?

可以使用 scipy.stats.skewnorm.fit() 方法来拟合偏正态分布。这个方法返回偏正态分布的两个参数:$\alpha$ 和 $\mu$。其中,$\alpha$ 是分布的形状参数,$\mu$ 是分布的均值。

# 拟合偏正态分布
shape, loc, scale = stats.skewnorm.fit(data)
print(f'shape parameter = {shape:.2f}, location parameter = {loc:.2f}, scale parameter = {scale:.2f}')
参考资料