单样本t检验:如何在Python中执行双样本单尾t检验

关于单样本t检验的问题,在one tailed versus two tailed test中经常遇到, 我想执行一个双样本,单尾 t 检验来比较两个均值。对于我正在寻找的特定问题,我希望比较只在一个方向上。我希望零假设是mu_2 >mu_1,替代假设是mu_1 <= mu_2。或者零假设仍然应该是mu_1-mu_2 =0,即使对于单尾情况?

我想执行一个双样本,单尾 t 检验来比较两个均值。对于我正在寻找的特定问题,我希望比较只在一个方向上。我希望零假设是mu_2 > mu_1,替代假设是mu_1 <= mu_2。或者零假设仍然应该是mu_1 - mu_2 = 0,即使对于单尾情况?

我正在使用一个大型数据集,但是如果我要提取和舍入参数,对于 data_1 它是mu_1 = 4.3, s_1 = 4.8, and n_1 = 40000和 data_2 它是mu_2 = 4.9, s_2 = 4.4, n_2 = 30000

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

鉴于 scipy 仅考虑了双尾测试,因此我不确定如何解释这些值。Ttest_indResult(statistic=-19.51646312898464, pvalue=1.3452106729078845e-84)。alpha 值为 0.05,p 值比拒绝零假设的值小得多。但是,我的直觉告诉我,不应拒绝零假设,因为 mu_2 显然大于 mu_1(因此,我希望 p 值至少大于 mu_1)。

我将不胜感激任何额外的帮助和指导。谢谢!

3

我为 t 检验 p 值计算提供了另一种解决方案。

from scipy.stats import ttest_ind
def t_test(x,y,alternative='both-sided'):
    _, double_p = ttest_ind(x,y,equal_var = False)
    if alternative == 'both-sided':
        pval = double_p
    elif alternative == 'greater':
        if np.mean(x) > np.mean(y):
            pval = double_p/2.
        else:
            pval = 1.0 - double_p/2.
    elif alternative == 'less':
        if np.mean(x) < np.mean(y):
            pval = double_p/2.
        else:
            pval = 1.0 - double_p/2.
    return pval
2

SciPy & gt;= 1.6

现在,您可以使用每个文档的“alternative”参数进行两个样本的单尾测试。在的示例中,我使用“less”,但这些是选项 alternative {'two-sided','less','greater'}

https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html
from scipy.stats import ttest_ind
ttest, pval = ttest_ind(data1, data2, alternative="less")
print("t-test", '{0:.10f}'.format(ttest[0]))
print("p-value", '{0:.10f}'.format(pval[0]))
if pval <0.05:
      print("we reject null hypothesis")
    else:
      print("we accept null hypothesis")
1

你是对的,如果你正在做一个单侧测试,它应该有一个大的 p 值。ttest_ind执行一个双侧测试,它给出了你观察到比你的 t 统计量的绝对值更极端的东西的概率。

要进行单侧 t 检验,可以使用 cdf,它是 t 统计量的概率总和。

稍微修改this code

def welch_ttest(x1, x2,alternative):
    n1 = x1.size
    n2 = x2.size
    m1 = np.mean(x1)
    m2 = np.mean(x2)
    v1 = np.var(x1, ddof=1)
    v2 = np.var(x2, ddof=1)
    tstat = (m1 - m2) / np.sqrt(v1 / n1 + v2 / n2)
    df = (v1 / n1 + v2 / n2)**2 / (v1**2 / (n1**2 * (n1 - 1)) + v2**2 / (n2**2 * (n2 - 1)))
    if alternative == "equal":
        p = 2 * t.cdf(-abs(tstat), df)
    if alternative == "lesser":
        p = t.cdf(tstat, df)
    if alternative == "greater":
        p = 1-t.cdf(tstat, df)
    return tstat, df, p

我模拟了一些数据:

import numpy as np
from scipy.stats import ttest_ind
from scipy.stats import t
np.random.seed(seed=123)
data1 = np.random.normal(4.3,4.8,size=40000)
np.random.seed(seed=123)
data2 = np.random.normal(4.9,4.4,size=30000)
ndf = len(data1) +len(data2) - 2
ttest_ind(data1,data2,equal_var = False)
Ttest_indResult(statistic=-16.945279258324227, pvalue=2.8364816571790452e-64)

你得到类似你的结果,我们可以测试上面的代码为 alternative = =“equal”这是一个双面测试:

welch_ttest(data1,data2,"equal")
    (<scipy.stats._continuous_distns.t_gen at 0x12472b128>,
     67287.08544468222,
     2.8364816571790452e-64)

您可以将 p 值与 scipy 2 侧 t 检验相同,现在我们进行所需的单侧检验:

welch_ttest(data1,data2,"greater")
(<scipy.stats._continuous_distns.t_gen at 0x12472b128>, 67287.08544468222, 1.0)

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(536)
函数表格:用数学函数表示函数(3 ways to represent a function)
上一篇
红细胞体积分布宽度cv偏低:hyperbox的体积分数
下一篇

相关推荐

  • python浅拷贝和深拷贝区别、原理与实现

    示例示例Python中的浅拷贝和深拷贝是指在复制对象时,复制的结果和原来的对象之间的关系。浅拷贝:浅拷贝只复制一层,也就是说,它只复制最外围的对象,而不复制它包含的对象。如果最外围的对象中包含其他对象,那么这些对象将不会被复制,而是使用原来的对象。…

    2023-05-30 14:25:17
    0 24 81
  • python程序员待遇:Python程序员薪酬最高,收入惊人!

    Python程序员的待遇取决于他们的技能水平和工作经验。一般来说,Python程序员的薪资水平较高,尤其是对于那些有丰富工作经验的Python程序员而言,他们的薪资水平更高。此外,Python程序员还可以获得许多其他福利,包括住房补贴、交通补贴、带薪休假等。…

    2023-06-22 01:21:15
    0 34 84
  • python文本情感分析(含代码示例)

    Python文本情感分析是一种使用自然语言处理技术来分析文本中的情感倾向的过程。它可以帮助我们了解用户对特定主题的看法,从而改善产品和服务。…

    2023-04-23 00:28:07
    0 77 34
  • python字符串拼接数字从零开始

    实例实例Python字符串拼接数字,可以使用format()函数或者%运算符来实现。代码实例:…

    2023-08-20 08:25:28
    0 83 52
  • python中import re:如何使用Python中的re模块进行正则表达式匹配

    import re 是Python中正则表达式模块,可以用来处理字符串。它提供了一系列的函数,可以用来查找、替换和分割字符串,以及检查字符串是否符合特定的格式。…

    2023-05-02 10:25:33
    0 99 55
  • python是面向Python的优势

    Python是一种面向对象的编程语言,它提供了一种简单而强大的方法来创建可重用的代码。它使用类和对象来实现面向对象编程,允许程序员将代码封装在类中,以便在不同的程序中重复使用。…

    2023-05-02 04:34:35
    0 19 81
  • python程序包:如何使用Python程序包构建高效的应用程序

    Python程序包是一种用于组织Python模块的形式,它允许程序员将相关的模块组合在一起,以便更轻松地管理和使用它们。Python程序包可以包含函数、类、变量和其他Python代码,以帮助简化程序的开发。…

    2024-03-20 06:08:18
    0 21 14
  • python中的%d:%d个原因你应该学习Python

    示例示例%d 是Python中格式化字符串的占位符,表示用整数来填充。示例:…

    2023-04-25 12:42:58
    0 49 66

发表评论

登录 后才能评论

评论列表(85条)