likes
comments
collection
share

使用scipy实现两样本t检验

作者站长头像
站长
· 阅读数 10

两样本t检验是统计学中用于比较两组样本均值是否有显著差异的方法。在数据挖掘中,我们经常需要对不同的特征或变量进行比较,以确定它们之间是否存在显著差异。这时,两样本t检验可以用作一种工具来评估这些差异的显著性。

那到底什么是两样本t检验呢?

我们可以举个简单的例子了解一下:

假设有一所学校现在有两个教学方法:方法A和方法B。那么学校肯定是想知道这两种方法是否对学生成绩产生了显著的影响。

我们首先将学生随机分成两组,一组接受方法A的教学,另一组接受方法B的教学。然后,我们在相同的时间段内进行教学,并在学期结束时收集学生成绩的数据。

接下来,我们计算每组学生的平均分数和标准差。然后,使用两样本t检验计算一个t值,该值表示两组学生的平均分数之间的差异相对于组内变异的程度。

如果计算得到的t值较大,说明两组学生的平均分数差异较大,可能存在真实的差异。然后,我们根据计算得到的t值,样本大小和显著性水平计算一个p值。

如果p值小于设定的显著性水平(通常是0.05),我们可以拒绝原假设,即两种教学方法对学生成绩没有显著影响,而接受备择假设,即两种教学方法对学生成绩有显著影响。

通过两样本t检验,我们可以确定哪种教学方法在学生成绩方面更有效。

那又有一个疑问了,如何计算t值呢?

  1. 计算两组数据的平均值(分别记为x1x2)和标准差(分别记为s1s2)。
  2. 计算每组数据的样本大小(分别记为n1n2)。
  3. 计算两组数据的标准差,它是标准差除以样本大小的平方根。对于两组数据,标准差的计算公式如下: SE = sqrt((s1^2/n1) + (s2^2/n2))
  4. 计算t值,它表示两组数据的平均值之间的差异相对于标准误差的大小。计算公式如下: t = (x1 - x2) / SE

下面是示例代码:

import pandas as pd
df=pd.read_csv(r"C:\Users\ljl20\Desktop\文档\stu_data.csv", encoding='GBK')
df.groupby('性别').身高.describe()

使用scipy实现两样本t检验

from scipy import stats as ss
#方差齐性
ss.levene(df.身高[df.性别=='男'],df.身高[df.性别=='女'])

使用scipy实现两样本t检验

使用了SciPy库中的stats模块,并调用了其中的levene函数来进行方差齐性检验。那么什么是方差齐性检验呢?方差齐性是一项重要的假设,方差齐性检验主要用于检验两个或多个样本的方差是否相等。这段代码就是对男性和女性的身高做一个方差齐性检验。

ss.ttest_ind(df.身高[df.性别=='男'],df.身高[df.性别=='女'],equal_var=False)

使用scipy实现两样本t检验

t_statistic, p_value = ss.ttest_ind_from_stats(
    mean1=171.444444, std1=9.103395, nobs1=27,
    mean2=165.360000, std2=5.179125, nobs2=25,
    equal_var=False
)
print("T统计量:", t_statistic)
print("P值:", p_value)

使用scipy实现两样本t检验

这段代码使用了SciPy库中的stats模块,调用ttest_ind_from_stats函数来进行两样本独立t检验。 代码中的ttest_ind_from_stats函数的参数如下:

  • mean1:第一个样本的均值
  • std1:第一个样本的标准差
  • nobs1:第一个样本的样本大小
  • mean2:第二个样本的均值
  • std2:第二个样本的标准差
  • nobs2:第二个样本的样本大小
  • equal_var:一个布尔值,用于指定是否假设两个样本的方差相等。在这段代码中,equal_var=False表示不假设方差相等。

使用scipy实现两样本t检验,你学会了吗?