python使用scipy.stats检验正态分布

from scipy import stats
import numpy as np
np.random.seed(1)
x = stats.norm.rvs(loc=0, scale=1, size=100)
#print(list(x))
#夏皮罗一威尔克检验法(Shapiro-Wilk test)
shapiro_test = stats.shapiro(x)
shapiro_test

#ShapiroResult(statistic=0.9920045137405396, pvalue=0.8215526342391968)
from scipy import stats
import pandas as pd
# scipy包是一个高级的科学计算库,它和Numpy联系很密切,Scipy一般都是操控Numpy数组来进行科学计算

data = [87,77,92,68,80,78,84,77,81,80,80,77,92,86,
       76,80,81,75,77,72,81,72,84,86,80,68,77,87,
       76,77,78,92,75,80,78]
# 样本数据,35位健康男性在未进食之前的血糖浓度

df = pd.DataFrame(data, columns =['value'])
u = df['value'].mean()  # 计算均值
std = df['value'].std()  # 计算标准差
stats.kstest(df['value'], 'norm', (u, std))
# .kstest方法:KS检验,参数分别是:待检验的数据,检验方法(这里设置成norm正态分布),均值与标准差
# 结果返回两个值:statistic → D值,pvalue → P值
# p值大于0.05,为正态分布

#KstestResult(statistic=0.1590180704824098, pvalue=0.3056480127078781, statistic_location=81, statistic_sign=1)
import numpy as np
from scipy import stats

#函数返回间隔类均匀分布的数值序列
b = np.linspace(0, 10, 100)

# Shapiro-Wilk test
#scipy.stats.shapiro适用于小样本数据,只能检查正态分布。
s,p = stats.shapiro(b)
print(s,p)

# kstest
#statistic,p=scipy.stats.kstest(rvs, cdf, args=(), N=20, alternative='two-sided', mode='approx')
# scipy.stats.kstest是一种K-S检验。它不局限于正态检验,可以检验多种分布。
s,p = stats.kstest(b, 'norm')
print(s,p)

# normaltest
# statistic,p=scipy.stats.normaltest(a, axis=0, nan_policy='propagate')
# 输出结果中第一个为统计量,第二个为P值(注:p值大于显著性水平0.05,认为样本数据符合正态分布)
s,p = stats.normaltest(b)
print(s,p)

# Anderson-Darling test
# 不局限于正态检验,可以检验多种分布(正态分布、指数分布、logistic 或者 Gumbel等分布)。
# statistic,critical_values,significance_level=scipy.stats.anderson(x, dist='norm')
# 返回值中,第一个表示统计值,第二个表示评价值,第三个是显著性水平;评价值和显著性水平对应,不同分布显著性水平不同。
s,c,p = stats.anderson(b,dist='norm')
print(s,c,p)

# 0.9547253251075745 0.0017218869179487228
# 0.7870260992168561 1.9947630078489827e-66
# 33.62988681076687 4.9815313241000405e-08
# 1.0837094127385427 [0.555 0.632 0.759 0.885 1.053] [15.  10.   5.   2.5  1. ]
import pandas as pd
import matplotlib.pyplot as plt

s = pd.DataFrame(np.random.randn(1000)+10,columns = ['value'])
print(s.head())
# 创建随机数据

fig = plt.figure(figsize = (10,6))
ax1 = fig.add_subplot(2,1,1)  # 创建子图1
ax1.scatter(s.index, s.values)
plt.grid()
# 绘制数据分布图

ax2 = fig.add_subplot(2,1,2)  # 创建子图2
s.hist(bins=30,alpha = 0.5,ax = ax2)
s.plot(kind = 'kde', secondary_y=True,ax = ax2)
plt.grid()
# 绘制直方图
# 呈现较明显的正太性

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值