t检验与卡方检验

参考
Chi-Square Test vs. t-Test: What's the Difference? - Statology
Chi-Square Test | How to Calculate Chi-square using Formula with Example (byjus.com) ⬅可查看卡方表

1. 卡方检验

实际上卡方检验有几种不同的版本,但最常见的是卡方独立性检验(Chi-Square Test of Independence)。

1.1 定义

当我们想要检验两个分类变量之间是否存在统计上显着的关联时,我们使用卡方独立性检验。

原假设(\(H_0\)): 两个变量之间没有显著的关联。 备择假设(\(H_a\)): 两个变量之间有显著的关联。

即:拒绝原假设,表示两个变量之间有显著的关联

1.2 案例

以下是可能用到卡方独立性检验的一些例子。

(1)案例1: 我们想知道性别(男性、女性)和政党偏好(共和党、民主党、独立党派)之间是否有统计学上的显著关联。为了验证这一点,我们可以随机调查100个人,记录他们的性别和政党偏好。然后,我们可以对独立性进行卡方检验,以确定性别和政党偏好之间是否有统计学上的显著关联。

(2)案例2: 我们想知道年级(大一、大二、大三、大四)和最喜欢的电影类型(惊悚片、戏剧、西部片)之间是否有统计学上的显著关联。为了验证这一点,我们可以随机调查某所学校每个年级的100名学生,并记录下他们最喜欢的电影类型。然后,我们可以对独立性进行卡方检验,以确定年级和喜爱的电影类型之间是否有统计学意义上的关联。

(3)案例3: 我们想知道一个人最喜欢的运动(篮球、棒球、足球)和他们成长的地方(城市、农村)之间是否有统计学上的显著关联。为了验证这一点,我们可以随机调查100个人,问他们在什么样的地方长大,他们最喜欢的运动是什么。然后,我们可以对独立性进行卡方检验,以确定一个人最喜欢的运动和他们成长的地方之间是否有统计学上的显著关联

1.3 假设

在对独立性进行卡方检验之前,我们首先需要确保满足以下假设,以确保检验有效

  • 随机:应该使用随机样本或随机实验来收集两个样本的数据。
  • 分类型:我们正在研究的变量应该是分类型的。
  • 样本量 :变量的每个取值的预期观察数应至少为5。

1.4 如何计算

参考 https://www.statology.org/chi-square-test-of-independence/

\[ \chi^2=\frac{\sum(O-E)^2}{E} \]

where: \(O:\) observed value \(E:\) expected value

If the p-value that corresponds to the test statistic X2 with (#rows-1)*(#columns-1) degrees of freedom is less than your chosen significance level then you can reject the null hypothesis.

假设我们想知道性别是否与政党偏好有关。我们随机抽取500名选民,调查他们的政党偏好。下表显示了调查结果:

接下来,我们将用下面的公式计算列联表中每个单元格的期望值 \[ Expected\ value = (row\ sum * column\ sum) / table\ sum. \] For example, the expected value for Male Republicans is: \((230*250) / 500 = 115\)​. We can repeat this formula to obtain the expected value for each cell in the table:

下一步,对每个单元格计算\((O-E)^2/E\) For example, Male Republicans would have a value of: \((120-115)^2 /115 = 0.2174\). We can repeat this formula for each cell in the table:

计算检验统计量 \(\chi^2\) 和相应的p值:

\(\chi^2 = Σ(O-E)^2 / E = 0.2174 + 0.2174 + 0.0676 + 0.0676 + 0.1471 + 0.1471 =0.8642\)

According to the Chi-Square Score to P Value Calculator, the p-value associated with \(\chi^2\) = 0.8642 and (2-1)*(3-1) = 2 degrees of freedom is 0.649198. 由于这个p值不小于0.05,我们无法拒绝零假设。这意味着我们没有足够的证据表明性别和政党偏好之间存在联系。

Note : You can also perform this entire test by simply using the Chi-Square Test of Independence Calculator.

2. t检验

t检验也有一些不同的版本,但最常见的是均值差异的t检验 (t-test for a difference in means)。

2.1 定义

当我们想检验两个总体均值之间是否有统计学上的显著差异时,我们用t检验来检验均值的差异。

原假设(\(H_0\)):两个总体均值相等。 备择假设(\(H_a\)): 两个总体均值不相等。

即:拒绝原假设,表示两个总体的均值不相等

2.2 案例

(1)案例1: 我们想知道饮食A或饮食B,哪一个会导致更大的体重减轻。我们随机分配100人使用A饮食2个月,另外100人使用B饮食2个月。我们可以对平均值的差异进行t检验,以确定两组之间的平均体重减轻是否有统计学上的差异。

(2)案例2: 我们想知道是否两个不同的学习计划会导致学生不同的考试成绩。我们随机分配50名学生使用一个学习计划,50名学生使用另一个学习计划,为期一个月。我们可以对平均值的差异进行t检验,以确定两个学习计划的平均考试成绩是否有统计学上的显著差异。

(3)案例3: 我们想知道来自两个不同学校的学生是否有相同的平均身高。我们测量了100名随机来自一个学校的学生和100名随机来自另一个学校的学生的身高。我们可以对平均值的差异进行t检验,以确定两所学校学生的平均身高是否有统计学上的显著差异。

2.3 假设

在对两个总体均值之间的差异进行假设检验之前,我们首先需要确保满足以下条件,以确保我们的假设检验有效:

  • 随机:应该使用随机样本或随机实验来收集两个样本的数据。
  • 正态性:抽样分布为正态或近似正态。
  • 独立性:两个样本是独立的。

3. 什么时候使用哪个检验

总结:

卡方独立性检验:可以检验两个分类型变量之间是否有统计学意义上的关联。当你拒绝卡方独立检验的零假设时,这意味着在两个变量之间有显著的关联。

均值差异的t检验:允许你检验两个总体均值之间是否有统计学上的显著差异。拒绝均值差异的t检验的零假设意味着两个总体均值不相等。

想要知道是使用卡方检验还是t检验,最简单的方法就是看看变量的类型。如果你有两个变量都是分类型的,也就是说,例如男性、女性,或共和党、民主党、独立党派,那么你应该使用卡方检验。但是如果一个变量是分类型的(例如学习计划类型 - 计划1或计划2),而另一个变量是连续型的(例如考试分数从0到100),那么你就应该使用t检验

4. 使用 Python 进行 t检验

参考 使用 Python 进行 T检验 - 败北桑 - 博客园 (cnblogs.com)

利用第三方库 scipy

1
from scipy import stats
1
2
3
ttest_1samp: 单样本t检验
ttest_ind: 两独立样本t检验
ttest_rel: 配对样本t检验

注:以上三种检验均默认进行双侧检验

\(H_0:\mu = \mu_0\) \(H_1: \mu \neq \mu_0\)

4.1 单样本t检验

官方文档 scipy.stats.ttest_1samp — SciPy v1.7.0 Manual

使用ttest_1samp()函数可以进行单样本t检验,比如检验一列数据的均值与1的差异是否显著:

1
stats.ttest_1samp(data,1)

结果会返回 t值 和 p值,若 p<0.05,认为有显著差异

语法:

image-20210717192910406

4.2 两独立样本t检验

官方文档 scipy.stats.ttest_ind — SciPy v1.7.0 Manual

使用ttest_ind()函数可以进行两独立样本t检验。

当两总体方差相等时,即具有方差齐性,可以直接检验:

1
stats.ttest_ind(data1,data2)

同样地,返回结果会返回 t值 和 p值。

当不确定两总体方差是否相等时,应先利用levene检验,检验两总体是否具有方差齐性:

官方文档scipy.stats.levene — SciPy v1.7.0 Manual

1
stats.levene(data1,data2)

image-20210717193215478

原假设:两总体具有方差齐性。 如果返回结果的p值远大于0.05,那么我们认为两总体具有方差齐性。

如果两总体不具有方差齐性,需要加上参数equal_val并设定为False。如下:

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

4.3 配对样本t检验

官方文档:scipy.stats.ttest_rel — SciPy v1.7.0 Manual

使用ttest_rel()函数可以进行配对样本t检验。

1
stats.ttest_rel(data1,data2)

同样地,返回结果会返回t值和p值。

5. 使用 Python 进行卡方检验

使用 scipy.stats 库中的 chi2_contingency

传入 contingency table (列联表),返回

  • chi2: The test statistic
  • p: The p-value of the test
  • dof: Degrees of freedom
  • expected: The expected frequencies, based on the marginal sums of the table

官方文档 scipy.stats.chi2_contingency — SciPy v1.7.1 Manual

例:(参考How to run Chi-Square Test in Python | Python-bloggers)

假设我们想要检验吸烟者和非吸烟者在性别(M, F)上是否存在统计学上显著的差异。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import pandas as pd
from scipy.stats import chi2_contingency

df = pd.DataFrame({'Gender' : ['M', 'M', 'M', 'F', 'F'] * 10,
'isSmoker' : ['Smoker', 'Smoker', 'Non-Smpoker', 'Non-Smpoker', 'Smoker'] * 10})

df.head()
'''
Gender isSmoker
0 M Smoker
1 M Smoker
2 M Non-Smpoker
3 F Non-Smpoker
4 F Smoker
'''

# 计算列联表
contingency= pd.crosstab(df['Gender'], df['isSmoker'])
contingency
'''
isSmoker Non-Smpoker Smoker
Gender
F 10 10
M 10 20
'''

# Chi-square test of independence.
c, p, dof, expected = chi2_contingency(contingency)
p
# 0.3767591178115821
# 大于0.05,不拒绝原假设,(原假设:Smokers and Gender are independent.)