使用 Python 验证数据集中的体温是否符合正态分布

数据集地址:http://jse.amstat.org/datasets/normtemp.dat.txt 

数据集描述:总共只有三列:体温、性别、心率

 

#代码

from scipy import stats as st
import matplotlib.pyplot as plt
import pandas as pd

#防止乱码
mpl.rcParams['font.sans-serif'] = [u'SimHei']
mpl.rcParams['axes.unicode_minus'] = False

 

#读入数据

data = pd.read_csv('http://jse.amstat.org/datasets/normtemp.dat.txt',sep='\s+',header=None,names='temperature;Gender;Heart rate'.split(';'))

#数据描述

data['temperature'].describe()

输出:

count    130.000000
mean      98.249231
std        0.733183
min       96.300000
25%       97.800000
50%       98.300000
75%       98.700000
max      100.800000
#四种方法验证

#1 shapiro方法来检验体温是否符合正态分布

print(st.shapiro(data['temperature']))

#(0.9865769743919373, 0.2331680953502655)  第二个数为P值,大于0.05

#2 normaltest方法验证体温是否符合正态分布

print(st.normaltest(data['temperature'], axis=None))

#NormaltestResult(statistic=2.703801433319236, pvalue=0.2587479863488212) 第二个数为P值,大于0.05

#3 kstest方法来检验体温是否符合正态分布

u = data['temperature'].mean()
std = data['temperature'].std()
print(st.kstest(data['temperature'], 'norm',(u,std)))

#KstestResult(statistic=0.06472685044046644, pvalue=0.645030731743997) 第二个数为P值,大于0.05

#4 anderson方法来检验体温是否符合正态分布

print(st.anderson(data['temperature']))

#AndersonResult(statistic=0.5201038826714353, critical_values=array([0.56 , 0.637, 0.765, 0.892, 1.061]), significance_level=array([15. , 10. ,  5. ,  2.5,  1. ])) 

#显著性水平为[15. , 10. ,  5. ,  2.5,  1. ],statistic小于critical_values,该检验不能拒绝为正态分布,即该检验为正态分布。

anderson方法说明:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.anderson.html#scipy.stats.anderson
normal/exponenential
15%, 10%, 5%, 2.5%, 1%

logistic
25%, 10%, 5%, 2.5%, 1%, 0.5%

Gumbel
25%, 10%, 5%, 2.5%, 1%

If the returned statistic is larger than these critical values then for the corresponding significance level, 
the null hypothesis that the data come from the chosen distribution can be rejected.

#绘图

x = data['temperature']
x = x.sort_values()
loc,scale = st.norm.fit(x)
plt.plot(x, st.norm.pdf(x,loc,scale),'b-',label = 'norm')
plt.show()

转载于:https://www.cnblogs.com/zgq25302111/p/11334044.html

判断一维数据是否符合正态分布可以通过可视化或统计检验来实现。 1. 可视化检验 使用直方图或密度图可以直观地判断一维数据是否符合正态分布。如果数据分布近似于正态分布,直方图或密度图应当呈现出钟型曲线。你可以使用Python的matplotlib库或seaborn库来绘制直方图或密度图,并观察曲线是否近似于钟型曲线。 下面是一个绘制直方图并判断数据是否符合正态分布的例子: ```python import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm from scipy.stats import kstest # 生成一维数据 data = np.random.normal(size=1000) # 绘制直方图 plt.hist(data, bins=30, density=True) # 绘制正态分布曲线 mu, std = norm.fit(data) xmin, xmax = plt.xlim() x = np.linspace(xmin, xmax, 100) p = norm.pdf(x, mu, std) plt.plot(x, p, 'k', linewidth=2) # 显示图像 plt.show() # 进行K-S检验 p_value = kstest(data, 'norm', (mu, std)).pvalue if p_value > 0.05: print('数据符合正态分布') else: print('数据符合正态分布') ``` 在这个例子,我们使用了matplotlib库绘制了一维数据的直方图,并使用了scipy库的norm.fit()函数来拟合正态分布曲线。同时,我们还使用了scipy库的kstest()函数对数据进行了K-S检验,并通过p-value来判断数据是否符合正态分布。 2. 统计检验 还可以使用统计检验来判断一维数据是否符合正态分布。在Python,可以使用scipy库的normaltest()函数进行正态性检验。如果p-value小于显著性水平(如0.05),则可以拒绝原假设,即数据符合正态分布。 下面是一个使用normaltest()函数进行正态性检验的例子: ```python from scipy.stats import normaltest # 生成一维数据 data = np.random.normal(size=1000) # 进行正态性检验 k2, p_value = normaltest(data) if p_value > 0.05: print('数据符合正态分布') else: print('数据符合正态分布') ``` 在这个例子,我们使用了scipy库的normaltest()函数对数据进行了正态性检验,并通过p-value来判断数据是否符合正态分布
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值