Python正态分布检验
时间: 2025-06-17 07:51:59 浏览: 14
### Python 正态分布检验方法
在 Python 中,可以使用多种方法进行正态分布检验。以下介绍几种常用的方法及其实现方式。
#### 1. 使用 `scipy.stats.anderson` 进行 Anderson-Darling 检验
Anderson-Darling 检验是一种强大的统计测试方法,用于判断数据是否符合正态分布或其他分布类型。默认情况下,该函数会执行正态性检验。
代码示例如下:
```python
from scipy.stats import anderson
import numpy as np
data = np.random.normal(size=100) # 生成100个标准正态分布的随机数
result = anderson(data)
print(f"Statistic: {result.statistic}")
print("Critical Values:", result.critical_values)
print("Significance Levels:", result.significance_level)
```
上述代码输出的统计量(statistic)越小,越倾向于认为数据服从正态分布[^1]。
#### 2. 使用 `scipy.stats.shapiro` 进行 Shapiro-Wilk 检验
Shapiro-Wilk 检验适用于小样本数据集,能够有效检测数据是否符合正态分布。
代码示例如下:
```python
from scipy.stats import shapiro
import numpy as np
data = np.random.normal(size=50) # 生成50个标准正态分布的随机数
stat, p_value = shapiro(data)
print(f"Statistic: {stat}, P-value: {p_value}")
```
如果 p 值大于显著性水平(通常为 0.05),则不能拒绝原假设,即数据可能服从正态分布[^4]。
#### 3. 使用 D’Agostino’s K-squared 检验
D’Agostino’s K-squared 检验基于偏度和峰度计算统计量,具有较高的准确性。其实现如下:
```python
from scipy.stats import skew, kurtosis
from scipy.stats import chi2
import numpy as np
def dagostino_k_squared(data):
n = len(data)
s = skew(data) # 计算偏度
k = kurtosis(data) # 计算峰度
g1 = (s**2 + 1) / 4
g2 = (s**4 - k + 3) / 48
ksquared = g1**2 + g2**2
p_value = 1 - chi2.cdf(ksquared, df=2)
return ksquared, p_value
data = np.random.normal(size=100) # 生成100个标准正态分布的随机数
ksquared, p_value = dagostino_k_squared(data)
print(f"K-squared Statistic: {ksquared}, P-value: {p_value}")
```
当 p 值较大时,说明数据更可能服从正态分布[^2]。
#### 4. 可视化方法:绘制 Q-Q 图
Q-Q 图(Quantile-Quantile Plot)通过比较数据的分位数与理论正态分布的分位数,直观地判断数据是否符合正态分布。
代码示例如下:
```python
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
data = np.random.normal(size=100) # 生成100个标准正态分布的随机数
stats.probplot(data, dist="norm", plot=plt)
plt.title("Q-Q Plot")
plt.show()
```
若数据点接近对角线,则表明数据更接近正态分布[^3]。
### 总结
以上介绍了四种常用的正态分布检验方法:Anderson-Darling 检验、Shapiro-Wilk 检验、D’Agostino’s K-squared 检验以及 Q-Q 图可视化方法。每种方法各有优劣,可根据实际需求选择合适的检验方法。
阅读全文
相关推荐


















