python怎么实现检验_常用统计检验的Python实现

前言

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

正态性检验

正态性检验是检验数据是否符合正态分布,也是很多统计建模的必要步骤,在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

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

皮尔逊相关系数(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

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

斯皮尔曼相关系数(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

卡方检验

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

单样本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检验

两样本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检验

配对样本均数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)

“以上就是早起的统计工具箱第一期内容,有关如何使用Python进行方差分析以及一些非参数的检验实现方法我们下期再聊,记得在看哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值