如何计算两个加权样本之间的 Kolmogorov-Smirnov 统计量

2024-01-01

假设我们有两个样本data1 and data2以及各自的权重weight1 and weight2我们想要计算两个加权样本之间的 Kolmogorov-Smirnov 统计量。

我们在 python 中执行此操作的方式如下:

import numpy as np

def ks_w(data1,data2,wei1,wei2):
    ix1=np.argsort(data1)
    ix2=np.argsort(data2)
    wei1=wei1[ix1]
    wei2=wei2[ix2]
    data1=data1[ix1]
    data2=data2[ix2]
    d=0.
    fn1=0.
    fn2=0.
    j1=0
    j2=0
    j1w=0.
    j2w=0.
    while(j1<len(data1))&(j2<len(data2)):
        d1=data1[j1]
        d2=data2[j2]
        w1=wei1[j1]
        w2=wei2[j2]
        if d1<=d2:
            j1+=1
            j1w+=w1
            fn1=(j1w)/sum(wei1)
        if d2<=d1:
            j2+=1
            j2w+=w2
            fn2=(j2w)/sum(wei2)
        if abs(fn2-fn1)>d:
            d=abs(fn2-fn1)
    return d

我们只是根据我们的目的修改了经典的两样本 KS 统计量,如Press, Flannery, Teukolsky, Vetterling - C 语言的数值食谱 - 剑桥大学出版社 - 1992 年 - 第 626 页.

我们的问题是:

  • 有人知道还有其他方法吗?
  • python/R/* 中有执行它的库吗?
  • 测试怎么样?它是否存在或者我们应该使用重新排列程序来评估统计数据?

该解决方案基于以下代码scipy.stats.ks_2samp运行时间约为 1/10000 (notebook https://colab.research.google.com/drive/1KPTakjZpCx0VGcPEI53UzdyFlNkxY7x-?usp=sharing):

import numpy as np

def ks_w2(data1, data2, wei1, wei2):
    ix1 = np.argsort(data1)
    ix2 = np.argsort(data2)
    data1 = data1[ix1]
    data2 = data2[ix2]
    wei1 = wei1[ix1]
    wei2 = wei2[ix2]
    data = np.concatenate([data1, data2])
    cwei1 = np.hstack([0, np.cumsum(wei1)/sum(wei1)])
    cwei2 = np.hstack([0, np.cumsum(wei2)/sum(wei2)])
    cdf1we = cwei1[[np.searchsorted(data1, data, side='right')]]
    cdf2we = cwei2[[np.searchsorted(data2, data, side='right')]]
    return np.max(np.abs(cdf1we - cdf2we))

这是对其准确性和性能的测试:

ds1 = np.random.rand(10000)
ds2 = np.random.randn(40000) + .2
we1 = np.random.rand(10000) + 1.
we2 = np.random.rand(40000) + 1.

ks_w2(ds1, ds2, we1, we2)
# 0.4210415232236593
ks_w(ds1, ds2, we1, we2)
# 0.4210415232236593

%timeit ks_w2(ds1, ds2, we1, we2)
# 100 loops, best of 3: 17.1 ms per loop
%timeit ks_w(ds1, ds2, we1, we2)
# 1 loop, best of 3: 3min 44s per loop
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何计算两个加权样本之间的 Kolmogorov-Smirnov 统计量 的相关文章

  • 如何查看Databricks中的所有数据库和表

    我想列出 Azure Databricks 中每个数据库中的所有表 所以我希望输出看起来像这样 Database Table name Database1 Table 1 Database1 Table 2 Database1 Table
  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • 使用 psycopg2 在 python 中执行查询时出现“编程错误:语法错误位于或附近”

    我正在运行 Python v 2 7 和 psycopg2 v 2 5 我有一个 postgresql 数据库函数 它将 SQL 查询作为文本字段返回 我使用以下代码来调用该函数并从文本字段中提取查询 cur2 execute SELECT
  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • Bootstrap v4 中的“p-N”及其变体代表什么?

    我发现 Bootstrap v4 中的命名不太直观 我知道他们希望最大限度地减少所有类使标记混乱的影响 但我无法得出合理的结论 我可以猜测 但我找不到具体的答案 p 1 p 2 p N Flexbox 相关 但是什么是p代表 d flex
  • 通过代理的 XMLDocument.Load(url)

    我有一些代码基本上使用 XMLDocument Load uri 方法读取 XML 文档 该方法运行良好 但如果通过代理进行调用 则效果不佳 我想知道是否有人知道通过代理进行此调用 或达到相同效果 的方法 这是我最终使用的代码 WebPro
  • 使用 php 绘制图表

    我需要制作图表 饼图和条形图 并使用 php 数据 数据是 JSON 编码的 生成图表的最佳方法是什么 我现在正在查看 Google Chart api 还有什么比这更好 读作 更容易 的吗 pChart http pchart sourc
  • +[NSObject初始化]内部的dispatch_once是否过度杀伤?

    如果我在其中创建一个单例 NSObject initialize 我需要将我的代码放入dispatch once像这样阻止 static NSObject Bar implementation Foo void initialize if
  • 命名管道:C# 服务器、C++ 客户端

    我编写了两对命名管道客户端 服务器程序 C NET 4 中的第一对 C 中的第二对 非托管 所有 4 个测试程序都使用相同的管道名称 pipe mypipe C 对彼此工作得很好 我从客户端发送一条消息 服务器接收该消息 C 对也可以很好地
  • 在 For 循环内使用 IF 条件检查时如何丢弃数据表中的空值

    在我的项目中 我根据数据库中的某些条件选择用户 ID 并将其保存在数据表中 并使用基于条件的用户输入的 ID 进行检查 只会获取 5 行 但在循环中和 IF 条件下 它正在检查第 6 行为空 因此它抛出异常 位置 6 处没有行 我的代码是
  • ie8 和 ie7 的 2 列 div

    我想要一行有 2 个单元格 该行和 2 个单元格必须以百分比表示 我曾尝试这样做 container width 100 display inline table sidebar1 float left width 30 mainConte
  • 如何在 Swift 中正确设置像 imageContacts 这样的圆形 imageView?

    我想在 imageView 中显示图片 就像图像联系人 在圆圈中 但是当我尝试显示它时 imageView 会重新调整其大小 并且在圆圈中无法正确显示 image layer borderWidth 1 0 image layer mask
  • 有哪些重构方法可以减少编译代码的大小?

    我有一个需要新功能的旧固件应用程序 应用程序的大小已经接近设备的有限闪存容量 而少数新功能和变量将其推向极限 打开编译器优化确实可以解决问题 但客户对此持谨慎态度 因为它们过去曾导致过失败 那么 在重构 C 代码以产生更小的输出时 需要注意
  • JOIN 或 WHERE 中的条件

    在 JOIN 子句中添加条件与在 WHERE 子句中添加条件之间是否有任何区别 性能 最佳实践等 例如 Condition in JOIN SELECT FROM dbo Customers AS CUS INNER JOIN dbo Or
  • 反应流与反应堆模式?

    我想知道反应流 由反应宣言定义 和反应器模式 https en wikipedia org wiki Reactor pattern https en wikipedia org wiki Reactor pattern 我读到 Proje
  • 从 Chrome 中打开的
    元素中删除蓝色边框?

    我正在升级我的网站以使用新的 HTML5details元素以获得更好的可访问性 一切正常 但不幸的是 当我单击打开元素时 Chrome 应用了丑陋的蓝色边框 有什么办法可以阻止 Chrome 这样做吗 我看不到任何显式的 CSS 样式被应用
  • 如何使用 apache POI 在 ms word doc 中使用 rowspan 和 colspan 创建表?

    我正在使用 APACHE POI 创建包含表的 Word 文档 表格如下所示 我想创建具有行跨度和列跨度的单元格 如图所示 可以使用 APACHE POI 吗 有没有其他java库可以实现同样的功能 任何帮助表示赞赏 你可以试试这个 pub
  • 在 Android 4.0.3 中插入​​错误 SqLite [重复]

    这个问题在这里已经有答案了 我的 Android 4 0 3v 平板电脑出现 Sqlite 问题 Error 07 28 14 28 18 495 6995 7125 com titan tablet E AndroidRuntime FA
  • 检测Python函数中的所有全局变量?

    我正在尝试分析一些混乱的代码 这些代码恰好在函数中大量使用全局变量 我正在尝试重构代码 以便函数仅使用局部变量 有没有办法检测函数内的全局变量 例如 def f x x x 1 z x y return z 这里的全局变量是y因为它不是作为
  • android活动截图如何?

    你好朋友我正在制作一个带有 webview 的应用程序 我想截取我的活动截图 目前我正在使用此代码来捕获图像 public Bitmap takeScreenshot View rootView findViewById android R
  • MySQLi 无法准备语句

    我在脚本中运行两个查询room php 两者都使用MySQLi准备好的语句 其代码如下 Get room name stmt mysqli gt prepare SELECT name FROM rooms WHERE r id stmt
  • 如何在Android中使用SmsManager发送具有自定义线程ID的短信?

    我想创建一条带有自定义线程 ID 例如 10001 的 SMS 我怎样才能做到这一点 原因是因为我需要实现删除短信功能 而删除特定短信线程的唯一方法是通过线程 ID 或电话号码 而此时获取电话号码并不完全可能 因此需要定义自定义线程 ID在
  • 如何处理应采用 https 保护的网站中的混合内容?

    我正在服务器 A 上构建一个网站 已注册域名 用于人们创建和运行他们的 应用程序 这些 应用程序 实际上是运行在服务器B上的docker容器 在容器中 有一个可以直接访问的小型Web应用程序 如下所示 http IP ADDR OF SER
  • 如何计算两个加权样本之间的 Kolmogorov-Smirnov 统计量

    假设我们有两个样本data1 and data2以及各自的权重weight1 and weight2我们想要计算两个加权样本之间的 Kolmogorov Smirnov 统计量 我们在 python 中执行此操作的方式如下 import n