statistic

统计学中的各种检验-scipy.stats和statsmodel

2020-04-13  本文已影响0人  不分享的知识毫无意义

这里会罗列一些统计学中的检验方法,当然顺序以笔者遇到的为准。

1.方差分析

1.1 概述

对于均值的检验,一般分为以下几种情况:

1.2 常用术语

1.3 单因素方差分析原理

进行方差分析的要满足两个前提:

1.4 单因素方差分析案例

饮料案例,我们要观察饮料的不同颜色对销售额是不是有显著的影响,基础数据如下:


基础数据

1.5 python实现方差检验

很遗憾,python里没有包直接做方差分析,但是自己实现一个类应该是很简单的。
python里有方差齐性检验的包叫levene,在scipy里,直接调用scipy.stats.levene(rvs1, rvs2)
-- 2020.4.13更新
笔者原来说python里没有方差检验的包,笔者说错了,今天无意中发现
statsmodels.stats.power.FTestAnovaPower是可以进行方差检验的。

2.t检验

t检验的概念是通过比较不同数据之间的差值,以观察数据之间有没有显著差异。适用于小样本(30个以下),总体方差未知的情况。
t检验有几个假设条件:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
data = pd.Series([15.6,16.2 ,22.5 ,20.5 ,16.4 ,19.4 ,16.6, 17.9 ,12.7, 13.9])
data_mean = data.mean()
data_std = data.std()
pop_mean=20
t,p_towTail = stats.ttest_1samp(data,pop_mean)
from  scipy.stats import ttest_ind, levene
import pandas as pd
x = [20.5, 19.8, 19.7, 20.4, 20.1, 20.0, 19.0, 19.9]
y = [20.7, 19.8, 19.5, 20.8, 20.4, 19.6, 20.2]
print(levene(x,y))
print(ttest_ind(x, y))
#levene检验p值大于0.05认为是满足方差齐性的,如果不满足则加一个参数equal_var=False
print(ttest_ind(x,y,equal_var=False))
from  scipy.stats import ttest_rel
import pandas as pd
x = [20.5, 18.8, 19.8, 20.9, 21.5, 19.5, 21.0, 21.2]
y = [17.7, 20.3, 20.0, 18.8, 19.0, 20.1, 20.0, 19.1]
# 配对样本t检验
print(ttest_rel(x, y))

3.Z检验

Z检验和t检验其实一样,都是对均值进行检验,但是不一样的地方在于Z检验要求样本量比较大,并且总体方差已知。由于t检验不要求总体方差已知,所以t检验的应用范围比较广。Z检验其实和t检验有相同的计算形式:


Z检验的计算公式

python实现用的是scipy.stats.weightstats.ztest(data1,data2),来看一个小demo:

import statsmodels.stats.weightstats as sw
arr=[23,36,42,34,39,34,35,42,53,28,49,39,\
46,45,39,38,45,27,43,54,36,34,48,36,\
47,44,48,45,44,33,24,40,50,32,39,31]
sw.ztest(arr, value=39)

当然了单样本和双样本都可以做。Z检验就不过多介绍了。

4.F检验

如果大家还有印象,我们之前用F检验做过方差齐性分析。F检验还有一个广为人知的名字叫联合假设检验,主要用在方差分析中。


计算公式如下

怎么实现我们之前已经讲过了,用scipy.stats.levene这个准没错。

5.卡方检验

卡方检验是用于检验样本实际值与理论值之间是否存在显著差异,原假设是没有显著差异的。举两个好理解的例子:卡方检验可以检验男性或者女性对线上买生鲜食品有没有区别;也可以检验不同城市级别的消费者对买SUV车有没有什么区别。
具体计算过程可以看这篇文章,讲的很好:卡方检验的实际应用
python实现用的是scipy.stats.chisquare,来看一个小demo:

import scipy.stats as ss
obs=[107,198,192,125,132,248]
exp=[167]*6
#拒绝域 1%的显著水平,自由度5
#jjy=ss.chi2.isf(0.01,5)
#卡方
kf=ss.chisquare(obs,f_exp=exp).statistic

6.比率检验

这个真的是太神奇了,通常用在互联网中,用来比较两个比率有没有显著差异。
使用A方案的付费转化率为30%,使用B方案的付费转化率为34%,可以检验这两个转化率之间是否有显著不同。本质和z检验一样,把标准差换成了比例而已,可以用单样本也可以用双样本。

比率检验统计量计算公式
其中π0是总体比率,p是样本比率。
比率检验的演化
用python的话调用statsmodels.stats里的相关函数,来看个小demo:
from statsmodels.stats.proportion import proportion_effectsize
from statsmodels.stats.power import zt_ind_solve_power
effect_size=proportion_effectsize(prop1=0.3, prop2=0.4, method=‘normal‘)
sample_size=zt_ind_solve_power(effect_size=effect_size, nobs1=None, alpha=0.05, power=0.8, ratio=1.0, alternative=‘two-sided‘)
这个包可以推广到以上的F检验,t检验和Z检验。
基本上检验的方法和用途都说完了,希望起到启发的作用,大家如有需要可以探索更多假设检验的方法。
上一篇 下一篇

猜你喜欢

热点阅读