本文介绍了如何通过KS检验判断数据是否服从正态分布,使用Python的scipy库进行检验,并展示了统计结果。当p值小于0.05时,数据不符合正态分布。此外,通过绘制散点图和直方图,可直观地观察数据分布情况。对于非正态分布数据,建议采取转换如对数处理,以便后续分析。
摘要由CSDN通过智能技术生成
从文件中获取数据,判断数据是否服从正态分布或者近似服从正态分布。
正态分布
:也称“常态分布”,又名高斯分布(Gaussian distribution)
若随机变量X服从一个数学期望为μ、方差为σ2的正态分布,记为N(μ,σ2)。
其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。
当μ = 0,σ = 1时的正态分布是标准正态分布。
-
KS检验
基于累计分布函数的,用于检验一个分布是否符合某种理论分布或比较两个经验分布是否有显著差异。
kstest方法:参数分别是:待检验的数据,检验方法(这里设置成norm正态分布),均值与标准差
结果返回两个值:statistic → D值,pvalue → P值
p值大于0.05,为正态分布
H0:样本符合
H1:样本不符合
如何p>0.05接受H0 ,反之
from scipy import stats
import pandas as pd
data = pd.read_excel(r'sale.xls', index_col = False)
u = data[u'销量'].mean()
std = data[u'销量'].std()
stats.kstest(data[u'销量'], 'norm', (u, std))
KstestResult(statistic=0.16962184456795837, pvalue=1.5900252683896546e-05)
pvalue < 0.05,不符合
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from scipy import stats
data = pd.read_excel(r'sale.xls', index_col = False)
s = data[u'销量']
fig = plt.figure(figsize = (10,6))
ax1 = fig.add_subplot(2,1,1)
ax1.scatter(s.index, s.values)
plt.grid()
ax2 = fig.add_subplot(2,1,2)
s.hist(bins=30,alpha = 0.5,ax = ax2)
s.plot(kind = 'kde', secondary_y=True,ax = ax2)
plt.grid()
从图中观察,不符合,但近似符合。
有些时候需要数据为正态分布才能进行研究,所以要先对数据进行判断一下。如果不满足正态分布,可以对数据进行处理分析。
采用方法为log 取对数,之后再对其进行分析。
data[u'销量'] = data['销量'].apply(lambda x: np.log(x))
针对具体应用场景,近似正态分布也可以采用正态分布相关的方法分析。
https://blog.csdn.net/cyan_soul/article/details/81236124
from scipy import stats
stats.kstest(df['value'], 'norm', (u, std))
# 结果返回两个值:statistic → D值,pvalue → P值
# p值大于0.05,很可能为
正态分布
可以使用夏皮罗一威尔克检验法(Shapiro-Wilk test),直接使用scipy里边现成的轮子即可。代码如下:
>>> from scipy import stats
>>> np.random.seed(12345678)
>>> x = stats.norm.rvs(loc=5, scale=3, size=100)
>>> shapiro_test = stats.shapiro(x)
>>> shapir
若随机变量x
服从有个数学期望为μ,方差为σ2的
正态分布,记为N(μ,σ)
其中期望值决定密度函数的位置,标准差决定分布的幅度,当υ=0,σ=0 时的
正态分布是标准
正态分布
判断方法有画图/k-s
检验
#导入模块
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
#构造
一组随机
数据
s = pd.DataFrame(np.random.randn.
我们在线性回归做假设检验,在时间序列分析做自回归检验,那么我们如何检验一个分布是否是正态分布的呢?
首先,我们定义一个用来生成价格路径的函数。当然啦,在这之前我们先导入我们今天要用的库。
import numpy as np
np.random.seed(1000)
import scipy.stats as scs
import statsmodels.api as sm
QQ图判断:(s_r.index - 0.5)/len(s_r) p(i)=(i-0.5)/n 分 位数与value值作图
排序 s.sort_values(by = 'value',inplace = True)