python数据分析之卡方检验、T检验、方差分析

x33g5p2x  于2021-09-19 转载在 Python  
字(2.7k)|赞(0)|评价(0)|浏览(489)

🌼今天就来记录一下自己学习的统计学的知识,介绍几种参数检验,并用python来进行实践,并进行解释,有错误的地方,或者不足的地方还请大家指正。

1.常见概念的介绍

1.1 常见的检验方式

  • 参数检验:在总体分布形式已知的情况下,对总体分布的参数如均值、方差等进行推断的方法。
  • 非参数检验:在总体方差未知或知道甚少的情况下,利用样本数据对总体分布形态等进行推断的方法。由于非参数检验方法在推断过程中不涉及有关总体分布的参数,因而得名为“非参数”检验。

1.2 原假设和备择假设

  • 原假设(H 0 H_0H0​):没有充分理由不能轻易否定的命题(保守的命题)
  • 备择假设(H 1 H_1H1​):没有把握不能轻易肯定的命题(激进的,怀疑的命题)。

例如:检验H 0 H_0H0​时,我们先假设H 0 H_0H0​正确,在此基础上,构建一个事件A,他在H 0 H_0H0​为正确的条件下概率很小,可以表示为P ( A / H 0 ) = α P(A/H_0)=\alphaP(A/H0​)=α现在进行一次实验,如果事件A发生了,也就是说小概率事件在一次实验中发生了,这与实际推断原理相矛盾,这说明‘假定H 0 H_0H0​为正确的’命题是值得怀疑的,我们通常拒绝H 0 H_0H0​,反之,如果小概率事件没有发生,我们就没有理由拒绝H 0 H_0H0​,通常就接受H 0 H_0H0​。

1.3 两类错误

主观上来说,我们希望通过假设检验来得到正确的判断,如果H 0 H_0H0​确实为真,则接受H 0 H_0H0​,如果H 0 H_0H0​确实为假,则拒绝H 0 H_0H0​,但实际上我们是根据样本来推断总体,由于样本存在随机性,在推断时就不免会发生错误。

  • 弃真:因为小概率事件的发生导致我们错误地否定了H 0 H_0H0​。
  • 取伪:当H 0 H_0H0​不为真的时候我们却接受了H 0 H_0H0​

1.4 常见的差异分析方法

2.卡方检验

卡方检验定义:统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,如果卡方值越大,二者偏差程度越大;反之,二者偏差越小;若两个值完全相等时,卡方值就为0。(看不懂也没关系,通俗一点就是检验两个变量之间有没有关系)

特点:一般情况下适用于自变量X为离散类型,因变量Y为离散类别的值,数据一般呈现正态分布

卡方检验的计算方式:
χ 2 = ∑ ( 实 际 频 数 − 理 论 频 数 ) 2 理 论 频 数 \chi^2=\sum\dfrac{(实际频数-理论频数)^2}{理论频数}χ2=∑理论频数(实际频数−理论频数)2​

例如:从某中学随机抽取两个班,调查他们对待上晚自习的态度,甲班41人赞成,25人反对;乙班34人赞成,29人反对,这两个班对待上晚自习的态度是否有显著差异(α= 0.05)?

变量同意反对
甲班4125
乙班3429
from  scipy.stats import chi2_contingency
import numpy as np
data = np.array([[41,25], [34,29]])
kt= chi2_contingency(data)
print('卡方值=%.4f, p值=%.4f, 自由度=%i expected_frep=%s'%kt)

结果如下:

可以看出p值大于0.05,则接受原假设,认为对待晚自习的态度与班级无关。

3.T检验

T检验的定义:亦称student t检验(Student’s t test),主要用于样本含量较小(例如n < 30),总体标准差σ未知的正态分布。t检验是用t分布理论来推论差异发生的概率,从而比较两个平均数的差异是否显著。(百度百科)t检验可分为单总体检验、双总体检验和配对样本检验

特点:用于自变量X是离散的数据,自变量Y是连续型数据(x只能是2类),数据一定要是正态分布。
单总体检验使用较多,我们主要介绍着一种:单总体t检验是检验一个样本平均数与一个已知的总体平均数的差异是否显著。
例如:我们检验两组数据是否符合来自同一个分布的数据

import numpy
import scipy
from scipy import stats
#stats.norm.rvs是从均值为5,标准差为10的分布中抽取10个数
data1=stats.norm.rvs(loc=5,scale=10,size=10)
data2=stats.norm.rvs(loc=5,scale=20,size=10)
print(stats.levene(data1, data2)) #如果返回结果的p值远大于0.05,那么我们认为两总体具有方差齐性。
#如果两总体不具有方差齐性,需要加上参数equal_val并设定为False。
print (stats.ttest_ind(data1, data2, equal_var=True))

结果如下:我们设置的方差是不一样的,但发现方差通过,很正常,因为样本量很少。

解释一次下这里的结果吧,首先是方差齐次的检验,p值大于0.05,我们认为他们两是方差齐的,于是接着做了t检验,发现p值大于0.05,于是我们可以接受他们两属于同一个正态分布。
ps:做t检验之前最好还是做一下正太性和方差齐次性的检验。

4.方差检验

方差检验的概念:是用于比较两个或者多个变量数据的样本,来确定它们之间的差别是简单随机的,或者是由于流程之间统计上显著的差别所致。

特点:用于自变量X是离散的数据,自变量Y是连续型数据(x可以是多种类型),数据要是正态分布,方差要齐次。

import pandas as pd
import numpy as np
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
data = pd.DataFrame([[1, 1, 32],
                     [1, 2, 35],
                     [1, 3, 35.5],
                     [1, 4, 38.5],
                     [2, 1, 33.5],
                     [2, 2, 36.5],
                     [2, 3, 38],
                     [2, 4, 39.5],
                     [3, 1, 36],
                     [3, 2, 37.5],
                     [3, 3, 39.5],
                     [3, 4, 43]],
                    columns=['x1', 'x2', 'y'])
# 多因素无重复试验,不计算交互作用的影响
model = ols('y~C(x1) + C(x2)', data=data[['x1', 'x2', 'y']]).fit()
anovat = anova_lm(model)
anovat

结果如下:

看出x1的p值小于0.05,x2的p值小于0.05,说明拒绝原假设,x1与y值有关,x2与y值有关。

参考资料

《应用商务统计分析》
《百度百科》
《深入浅出统计学》
博客: python做方差分析.
博客: 几种统计学检验.

相关文章