追踪 SciPy 的 `ttest_ind()` 函数所做的假设

2023-11-24

我正在尝试编写自己的 Python 代码来计算一尾独立 t 检验和二尾独立 t 检验的 t 统计量和 p 值。我可以使用正态近似,但目前我尝试仅使用 t 分布。我未能成功地将 SciPy 统计库的结果与我的测试数据进行匹配。我可以用一双新的眼睛来看看我是否只是在某个地方犯了一个愚蠢的错误。

注意,这是从交叉验证交叉发布因为它已经存在了一段时间而没有任何回应,所以我认为获得一些软件开发人员的意见也没什么坏处。我试图了解我正在使用的算法是否存在错误,这应该会重现 SciPy 的结果。这是一个简单的算法,所以令人困惑的是为什么我无法定位错误。

My code:

import numpy as np
import scipy.stats as st

def compute_t_stat(pop1,pop2):

    num1 = pop1.shape[0]; num2 = pop2.shape[0];

    # The formula for t-stat when population variances differ.
    t_stat = (np.mean(pop1) - np.mean(pop2))/np.sqrt( np.var(pop1)/num1 + np.var(pop2)/num2 )

    # ADDED: The Welch-Satterthwaite degrees of freedom.
    df = ((np.var(pop1)/num1 + np.var(pop2)/num2)**(2.0))/(   (np.var(pop1)/num1)**(2.0)/(num1-1) +  (np.var(pop2)/num2)**(2.0)/(num2-1) ) 

    # Am I computing this wrong?
    # It should just come from the CDF like this, right?
    # The extra parameter is the degrees of freedom.

    one_tailed_p_value = 1.0 - st.t.cdf(t_stat,df)
    two_tailed_p_value = 1.0 - ( st.t.cdf(np.abs(t_stat),df) - st.t.cdf(-np.abs(t_stat),df) )    


    # Computing with SciPy's built-ins
    # My results don't match theirs.
    t_ind, p_ind = st.ttest_ind(pop1, pop2)

    return t_stat, one_tailed_p_value, two_tailed_p_value, t_ind, p_ind

Update:

在阅读了更多关于韦尔奇 t 检验的内容后,我发现我应该使用韦尔奇-萨特思韦特公式来计算自由度。我更新了上面的代码以反映这一点。

有了新的自由度,我得到了更接近的结果。我的两侧 p 值与 SciPy 版本相差约 0.008...但这仍然是一个太大的错误,所以我一定仍然做了一些不正确的事情(或者 SciPy 分布函数非常糟糕,但很难相信它们仅精确到小数点后两位)。

第二次更新:

在继续尝试的同时,我认为当自由度足够高(大约> 30)时,SciPy 的版本可能会自动计算 t 分布的正态近似。因此,我使用正态分布重新运行代码,计算结果实际上比使用 t 分布时更远离 SciPy。

奖金问题:)(更多统计理论相关;随意忽略)

此外,t 统计量为负。我只是想知道这对于单方面 t 检验意味着什么。这通常是否意味着我应该在负轴方向上进行测试?在我的测试数据中,人口1是没有接受过某种就业培训计划的对照组。人群2确实接受了治疗,测量的数据是治疗前后的工资差异。

所以我有理由认为人口 2 的平均值会更大。但从统计理论的角度来看,以这种方式炮制测试似乎并不正确。我怎么知道在不依赖于数据的主观知识的情况下要在负方向上进行检查(对于单方面的测试)?或者这只是那些虽然在哲学上不严谨但需要在实践中完成的常客主义事情之一?


通过使用 SciPy 内置函数source(),我可以看到该函数的源代码的打印输出ttest_ind()。根据源代码,SciPy 内置函数正在执行 t 检验,假设两个样本的方差相等。它没有使用韦尔奇-萨特思韦特自由度。SciPy 假设方差相等,但没有说明这一假设。

我只想指出,最重要的是,这就是为什么您不应该仅仅信任库函数。就我而言,我实际上确实需要对方差不等的总体进行 t 检验,并且自由度调整可能对于我将运行的一些较小的数据集很重要。

正如我在一些评论中提到的,对于 30 到 400 之间的样本量,我的代码和 SciPy 之间的差异约为 0.008,然后对于更大的样本量慢慢趋于零。这是等方差 t 统计量分母中额外 (1/n1 + 1/n2) 项的影响。就准确性而言,这非常重要,尤其是对于小样本量。它确实向我证实了我需要编写自己的函数。 (可能还有其他更好的 Python 库,但至少应该知道这一点。坦率地说,令人惊讶的是,这并没有出现在 SciPy 文档的前面和中心位置)ttest_ind()).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

追踪 SciPy 的 `ttest_ind()` 函数所做的假设 的相关文章

  • 如何更改充当按钮的范围的文本

    我正在为自定义 Web 应用程序编写自动化测试 我遇到了无法更改跨度文本的问题 我尝试过使用 driver execute script 但没有运气 如果我更好地了解 javascript 这确实会有帮助 据我所知 您无法单击跨度 并且列表
  • 将所有奇数位置的元素移动到左半部分,将偶数位置的元素移动到右半部分

    给定一个包含正整数和负整数的数组 将所有奇数索引元素移动到左侧 将偶数索引元素移动到右侧 问题的难点是在维持秩序的同时就地做 e g 7 5 6 3 8 4 2 1 输出应该是 5 3 4 1 7 6 8 2 如果顺序不重要 我们可以使用快
  • python中函数变量的作用域

    假设我们有两个函数 def ftpConnect ftp FTP server ftp login ftp cwd path def getFileList ftpConnect files ftp nlst print files 如果我
  • 将 subprocess.Popen 的输出通过管道传输到文件

    我需要启动一些长时间运行的进程subprocess Popen 并希望拥有stdout and stderr从每个自动管道到单独的日志文件 每个进程将同时运行几分钟 我想要两个日志文件 stdout and stderr 每个进程当进程运行
  • 如何在 Windows 上使用 Python 3.6 来安装 Python 2.7

    我想问一下如何使用pip install对于 Python 2 7 当我之前安装并使用 Python 3 6 时 我现在必须使用 Windows 上的 Python 版本 pip install 继续安装 Python 3 6 我需要使用以
  • 行为:如何从另一个文件导入步骤?

    我刚刚开始使用behave http pythonhosted org behave 一个Pythonic BDD框架 使用小黄瓜语法 http docs behat org guides 1 gherkin html 行为需要一个特征 例
  • 反加入熊猫

    我有两个表 我想附加它们 以便仅保留表 A 中的所有数据 并且仅在其键唯一时添加表 B 中的数据 键值在表 A 和 B 中是唯一的 但在某些情况下键将出现在表 A 和 B 中 我认为执行此操作的方法将涉及某种过滤联接 反联接 以获取表 B
  • 查找数组中的组合

    我在java中有一个像这样的二维数组 transmission communication tv television approach memorycode methodact 我需要获得所有组合 例如 transmission appr
  • 根据位置计算组合

    我在解决这个问题时遇到了麻烦 创建一个函数 给定字符集 C 可以生成第 N 个组合 或者返回给定起始位置 Ns 和结束位置 Ne 以及组合的最大长度 Mx 的一系列组合 一个具体的例子 令 C A B C 我们知道不同的组合将如下所示 假设
  • Python Flask 是否定义了路由顺序?

    在我看来 我的设置类似于以下内容 app route test def test app route
  • Python 矩阵每一行的总和

    lista 1 2 3 4 5 6 7 8 9 print lista def filas lista res for elemento in lista x sum lista elemento res append x print re
  • Plotly:如何避免巨大的 html 文件大小

    我有一个 3D 装箱模型 它使用绘图来绘制输出图 我注意到 绘制了 600 个项目 生成 html 文件需要很长时间 文件大小为 89M 这太疯狂了 我怀疑可能存在一些巨大的重复 或者是由单个项目的 add trace 方法引起的 阴谋 为
  • 是否可以强制浮点数的指数或有效数匹配另一个浮点数(Python)?

    这是我前几天试图解决的一个有趣的问题 是否可以强制一个的有效数或指数float与另一个人一样float在Python中 出现这个问题是因为我试图重新调整一些数据 以便最小值和最大值与另一个数据集匹配 然而 我重新调整后的数据略有偏差 大约小
  • 查找重叠间隔序列中最大和的算法

    我试图解决的问题在数轴上有一个间隔列表 每个间隔都有一个预定义的分数 我需要返回最大可能的总分 问题是间隔重叠 并且重叠间隔中我只能使用一个 这是一个例子 Intervals Score 0 5 15 4 9 18 10 15 12 8 2
  • 对产品列表进行分类的算法? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个代表或多或少相同的产品的列表 例如 在下面的列表中 它们都是希捷硬盘 希捷硬盘 500Go 适用于笔记本电脑的希捷硬盘 120
  • 使用 Keras 和 fit_generator 绘制 TensorBoard 分布和直方图

    我正在使用 Keras 使用 fit generator 函数训练 CNN 这似乎是一个已知问题 https github com fchollet keras issues 3358TensorBoard 在此设置中不显示直方图和分布 有
  • 如何使用 Django (Python) 登录表单?

    我在 Django 中构建了一个登录表单 现在我遇到了路由问题 当我选择登录按钮时 表单不会发送正确的遮阳篷 我认为前端的表单无法从 查看 py 文件 所以它不会发送任何 awnser 并且登录过程无法工作 该表单是一个简单的静态 html
  • 颜色渐变算法

    给定两种 RGB 颜色和一个矩形 我可以创建一个基本的线性渐变 这博客文章 https bsou io posts color gradients with python关于如何创建它给出了很好的解释 但我想在这个算法中添加一个变量 角度
  • 缓存感知树的实现

    I have a tree where every node may have 0 to N children 用例是以下查询 给定指向两个节点的指针 这些节点是否位于树的同一分支内 Examples q 2 7 gt true q 5 4
  • 使用 numpy 加速 for 循环

    下一个 for 循环如何使用 numpy 获得加速 我想这里可以使用一些奇特的索引技巧 但我不知道是哪一个 这里可以使用 einsum 吗 a 0 for i in range len b a numpy mean C d e f b i

随机推荐

  • Android - 具有自定义属性的自定义 UI

    我知道可以创建自定义 UI 元素 通过视图或特定 UI 元素扩展 但是是否可以为新创建的 UI 元素定义新的属性或属性 我的意思不是继承 而是全新定义一些我无法使用默认属性或属性处理的特定行为 例如元素我的自定义元素
  • Objective-c,如何从另一个类访问实例变量

    我习惯于用Java编程并使用类变量来访问其他类的数据 然后我发现类变量在 Obj C 中的工作方式不同 并且存在问题 我的问题是 我想在用户登录后在另一个类中访问用户输入的密码 已在不同的论坛中阅读过 因此我应该使用类方法 来访问这些数据
  • 如何检测选择器是否返回 null?

    检测 jQuery 选择器是否返回空对象的最佳方法是什么 如果你这样做 alert notAnElement 你得到 object Object 所以我现在的做法是 alert notAnElement get 0 这将写 未定义 因此您可
  • 无法在 Flask-sqlalchemy 中创建自引用外键

    我有一个模型Region和每个Region可以有子区域 每个子区域都有一个字段parent id这是其父区 域的 id 这是我的模型的样子 class Region db Model tablename regions table args
  • 当 URL 参数更改时,React 路由器 6 永远不会卸载组件

    我们的 React Router v6 遇到了问题 当URL参数改变时 它已经在使用挂载组件了 切勿拆卸和安装该组件 生成的代码示例 如果在链接 1 和链接 2 之间切换 url 参数 id 更改 则链接组件永远不会卸载和安装 https
  • 在 Go 中计算文件的硬链接

    根据FileInfo 的手册页 以下信息可用时stat 在 Go 中创建一个文件 type FileInfo interface Name string base name of the file Size int64 length in
  • Azure AD:访问令牌中缺少角色声明

    对于我的应用程序 我希望用户能够使用其 Azure 帐户登录 单点登录 我还需要一个访问令牌来访问安全后端 所以我可以同时得到id token和access token 向此 url 发出请求 https login microsofton
  • 通过移动通过散点绘制的点来对 python pyplot 进行动画处理

    我在用 Python 制作动画时遇到了麻烦 我的问题是制作沿着特定轨迹移动的 3D 点的动画 我可以通过使用动画模块并在绘图的每一帧重新制作来做到这一点 请参阅我的脚本中的第一个选项 我想只移动每帧的点位置 而不重新制作所有轴 请参阅我的脚
  • JPA 2.0(日志记录和跟踪)与 Glassfish 3.0.1 和 NetBeans 6.9.1:

    我在用JPA 2 0 EclipseLink提供者 与Glassfish v3 0 1 and NetBeans 6 9 1我无法看到 JPA 2 0 中的查询和其他日志记录信息 本质上我希望能够看到 JPA 生成的所有 SQL 语句以及其
  • 如何从打字稿中的静态函数访问非静态属性

    我在嘲笑User并且需要实现静态方法findOne这是静态的 所以我不需要扩展User在我的调用类中 export class User implements IUser constructor public name string pub
  • nginx 和 php 拒绝访问

    使用 nginx Web 服务器和 php nginx 正在工作 我看到 欢迎使用 nginx 但当我尝试访问 php 页面时 我收到 访问被拒绝 的消息 我还安装了 php fastcgi 这是我的 nginx 默认配置 redirect
  • Chrome 使用 jQuery ajax 时删除表单元素

    我在操作的 JSON 响应中返回一些简单的 HTML 标记 这是完整的响应 为了可读性添加了换行符 Success true Content r n div class r n div
  • 在 python 中的迭代器/生成器中引发异常后继续

    Python 有没有办法在迭代器 生成器抛出异常后继续迭代 就像下面的代码一样 有没有办法跳过 ZeroDivisionError 并继续循环gener 不修改run 功能 def gener a 1 2 3 4 0 5 6 7 8 0 9
  • 如何从 intelliJ IDEA 中的资源文件夹访问图像,而无需提供完整路径名

    我该如何在intelliJ IDEA中做这样的事情 File file new File C Users Account Documents ProjectFolder ResourceFolder image 但不必输入整个文件路径 我很
  • C#:数字的通用接口

    我正在尝试执行一些独立于数字类型的通用数字操作 但是 我知道没有办法使用泛型来做到这一点 第一个想法是使用 where 语句过滤传入类型 但所有数字类型都是封闭的 因此对于通用过滤器无效 此外 泛型不允许标准数字运算 加法 移位等 因此我能
  • 如何将 Python 3 与 Google App Engine 本地开发服务器结合使用

    我有一个本地 Python 应用程序配置为 runtime python in it s app yaml文件 当启动本地开发服务器时 dev appserver py app yaml 一切皆好 由于GAE的本地开发服务器默认使用Pyth
  • 在 pandas.DataFrame 的对角线上设置值

    我有一个 pandas 数据框 我想看到对角线为 0 import numpy import pandas df pandas DataFrame numpy random rand 5 5 df Out 6 0 1 2 3 4 0 0 5
  • 从 [Code] 退出 Inno Setup 安装

    是否可以从其中的功能退出安装 Code 使用 Inno Setup 创建的安装程序的一部分 我对设置退出代码不感兴趣 我想做的是对要求执行自定义检查 如果以前未安装该要求 则退出安装 为了防止安装程序运行 当先决条件测试失败时 只需返回Fa
  • Android Studio 的设备选择器在 Gradle Build 完成之前显示

    在 Android Studio 1 5 之前 设备选择器会在 Gradle Build 完成时显示 这允许使用构建时间来物理配置设备 进行任何最后一刻的更改或确保设备在安装时实际连接 如果我想取消 gradle 运行而不中断我的工作流程
  • 追踪 SciPy 的 `ttest_ind()` 函数所做的假设

    我正在尝试编写自己的 Python 代码来计算一尾独立 t 检验和二尾独立 t 检验的 t 统计量和 p 值 我可以使用正态近似 但目前我尝试仅使用 t 分布 我未能成功地将 SciPy 统计库的结果与我的测试数据进行匹配 我可以用一双新的