常用统计检验的Python实现和结果解释

实战统计学

共 4253字,需浏览 9分钟

 ·

2020-07-11 12:33


前言


今天给大家整理了一些使用python进行常用统计检验的命令与说明,请注意,本文仅介绍如何使用python进行不同的统计检验,对于文中涉及的假设检验、统计量p值非参数检验iid等统计学相关的专业名词以及检验背后的统计学意义不做讲解,因此读者应该具有一定统计学基础


正态性检验

0ad2dd3e51515d978a4fcc23bd609b99.webp正态性检验检验数据是否符合正态分布,也是很多统计建模的必要步骤,在Python中实现正态性检验可以使用W检验(SHAPIRO-WILK TEST)

检验原假设:样本服从正态分布

Python命令 stat, p = shapiro(data) 

结果解释当p值小于某个显著性水平α(如0.05)时,则认为样本不是来自正态分布的总体,否则承认样本来自正态分布的总体。

##########示例代码
from scipy.stats import shapiro
data = [0.86, 0.78, 0.83, 0.84, 0.77, 0.84, 0.81, 0.84, 0.81, 0.81, 0.80, 0.81,
       0.79, 0.74, 0.82, 0.78, 0.82, 0.78, 0.81, 0.80, 0.81, 0.74, 0.87, 0.78]
stat, p = shapiro(data)
print("stat为:%f" %stat,"p值为:%f" %p)
#stat为:0.966175 p值为:0.574134


相关性检验:皮尔逊相关系数

0ad2dd3e51515d978a4fcc23bd609b99.webp

皮尔逊相关系数(Pearson Correlation Coefficient)用于衡量两个变量之间的线性相关相关关系,相关系数的取值在-1与1之间,大于0为正相关,小于0为负相关。

基本假定

  • 每个样本中的观察是独立同分布的

  • 每个样本的观察都是正态分布的

  • 每个样本的观察具有相同的方差

  • 所有变量都是连续型变量

检验原假设:两个变量不相关

Python命令:corr,p = pearsonr(x,y)

结果解释:当p值小于某个显著性水平α(比如0.05)时,则拒绝原假设,认为两个变量是相关的。否则认为是不相关的。

注意:这里的相关仅为统计学意义上的相关性,并不能理解为实际因果关系!

#########示例代码
from scipy.stats import pearsonr
data1 = [23,20,18,29,43,35,32,40,29,26,24,26]
data2 = [1000,1000,500,500,500,100,100,100,100,100,100,100]
corr,p = pearsonr(data1,data2)
print("corr为:%f" %corr,"p值为:%f" %p)
#corr为:-0.392250 p值为:0.207253


相关性检验:斯皮尔曼相关系数

0ad2dd3e51515d978a4fcc23bd609b99.webp

斯皮尔曼相关系数(SPEARMAN’S RANK CORRELATION)又称为斯皮尔曼等级相关系数。是一种非参数方法,衡量两个变量的依赖性的非参数指标。

基本假定:

  • 每个样本中的观察是独立同分布的

  • 每个样本的观察具有相同的方差

  • 所有变量可以是连续型变量或可排序的分类变量

检验原假设:两个变量不相关

Python命令:corr,p =spearmanr(x,y)

结果解释:当p值小于某个显著性水平α(比如0.05)时,则则拒绝原假设,认为两个变量是相关的。否则认为是不相关的。

#######示例代码
from scipy.stats import spearmanr
data1 = [23,20,18,29,43,35,32,40,29,26,24,26]
data2 = [1000,1000,500,500,500,100,100,100,100,100,100,100]
corr, p= spearmanr(data1, data2)
print("corr为:%f" %corr,"p值为:%f" %p)
#corr为:-0.435153 p值为:0.157414


卡方检验

0ad2dd3e51515d978a4fcc23bd609b99.webp

卡方检验是一种用途很广的计数资料的假设检验方法。它属于非参数检验的范畴,卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,如果卡方值越大,二者偏差程度越大;反之,二者偏差越小;若两个值完全相等时,卡方值就为0,表明理论值完全符合。

注意

  • 卡方检验仅针对分类变量

  • 用于计算列联表的观察是独立的。

  • 列联表的每个单元格中有25个或更多个实例。

检验原假设观察频数与期望频数无显著差异

Python命令:chi2_contingency(data)

结果解释:当p值小于某个显著性水平α(比如0.05)时,则拒绝原假设,认为两个样本有显著差异。

########示例代码
from scipy.stats import chi2_contingency
import numpy as np
kf_data = np.array([[20,21], [22,24]])
kf = chi2_contingency(kf_data)
print('chisq-statistic=%.4f, p-value=%.4f, df=%i expected_frep=%s'%kf)
chisq-statistic=0.0159, p-value=0.8997, df=1 expected_frep=[[19.79310345 21.20689655]
 [22.20689655 23.79310345]]


T检验:单样本T检验

0ad2dd3e51515d978a4fcc23bd609b99.webp单样本t检验是样本均值与总体均值的比较问题。其中总体服从正态分布,从正态总体中抽样得到n个个体组成抽样样本,计算抽样样本均值和标准差,判断总体均值与抽样样本均值是否相同。

基本假定:

  • 样本数据服从正态或近似正态分布

  • 每个样本中的观察是独立同分布的

  • T检验属于参数检验,用于检验定量数据,若数据均为定类数据则应使用卡方检验

检验原假设:样本均值无差异(μ=μ0)

Python命令.ttest_1samp(data,1) 

结果解释:当p值小于某个显著性水平α(比如0.05)时,则认为样本均值存在显著差异,具体的分析要看所选择的是双边假设还是单边假设(又分小于和大于)注意ttest_1samp进行双侧检验。

#示例代码,检验样本均值与1是否有差异
from scipy import stats
data = [23,20,18,29,43,35,32,40,29,26,24,26]
stats.ttest_1samp(data,1)
#Ttest_1sampResult(statistic=-29.095366280269644, pvalue=1.2015599001111872e-19)


T检验:两样本T检验

0ad2dd3e51515d978a4fcc23bd609b99.webp

两样本t检验比较两个样本所代表的两个总体均值是否存在显著差异。除了要求样本来自正态分布,还要求两个样本的总体方差相等也就是“方差齐性”。

检验原假设:样本均值无差异(μ=μ0)

Python命令stats.ttest_ind(data1,data2)

当不确定两总体方差是否相等时,应先利用levene检验检验两总体是否具有方差齐性stats.levene(data1,data2)如果返回结果的p值远大于0.05,那么我们认为两总体具有方差齐性。如果两总体不具有方差齐性,需要加上参数equal_val并设定为False,如下。

stats.ttest_ind(data1,data2,equal_var=False)

结果解释:当p值小于某个显著性水平α(比如0.05)时,则认为样本均值存在显著差异,具体的分析要看所选择的是双边假设还是单边假设(又分小于和大于)注意stats.ttest_ind进行双侧检验。

#示例代码,检验两组样本均值是否相等
from scipy import stats
data1 = [23,20,18,29,43,35,32,40,29,26,24,26]
data2 = [1000,1000,500,500,500,100,100,100,100,100,100,100]
stats.ttest_ind(data1,data2)
#Ttest_indResult(statistic=-3.1758496679296524, pvalue=0.004373771039397662)


T检验:配对T检验

0ad2dd3e51515d978a4fcc23bd609b99.webp配对样本均数T检验简称配对T检验(paired t test), 又称非独立两样本均数t检验,适用于配对设计计量资料均数的比较,其比较目的是检验两相关样本均数所代表的未知总体均数是否有差别。与独立样本T检验相比,配对样本T检验要求样本是配对的。两个样本的样本量要相同;样本先后的顺序是一一对应的。

基本假定:

  • 每个样本中的观察是独立同分布的

  • 每个样本的观察都是正态分布的

  • 每个样本中的观察具有相同的方差

  • 每个样本的观察结果是成对的

检验原假设:样本均值无差异(μ=μ0)

Python命令stats.ttest_rel(data1,data2)

结果解释:当p值小于某个显著性水平α(比如0.05)时,则认为样本均值存在显著差异,具体的分析要看所选择的是双边假设还是单边假设(又分小于和大于)注意stats.ttest_rel进行双侧检验。

####示例代码,配对样本T检验
from scipy import stats
data1 = [23,20,18,29,43,35,32,40,29,26,24,26]
data2 = [1000,1000,500,500,500,100,100,100,100,100,100,100]
stats.ttest_rel(data1,data2)
#Ttest_relResult(statistic=-3.149034903041314, pvalue=0.009258094005021552)


【推荐阅读】

 制造业生产质量业务大数据设计方案分享
 供应链流程体系建设的系统化创新应用案例分享
 在线一键分析报告
 原来SPC应用如此简单,有了它工作不再困难
 传统IT应用如何拥抱大数据?谈python大数据的应用落地方法
 基于BOM的总供应周期分析
 用Python整合的大数据分析实例

认真细致的作图和码字你不收藏在看转发关注 鼓励一下我吗?


记得点个在看支持下~?
浏览 114
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报