类 GTest

java.lang.Object
org.hipparchus.stat.inference.GTest

public class GTest extends Object
实现G检验统计量。

在统计遗传学中被称为麦克唐纳-克莱特曼检验。该实现处理已知和未知分布。

当分布未知但由一个样本提供,或者当被检验的假设是两个样本来自相同的基础分布时,可以使用两个样本检验。

  • 构造器概要

    构造器
    构造器
    说明
    GTest()
    空构造函数。
  • 方法概要

    修饰符和类型
    方法
    说明
    double
    g(double[] expected, long[] observed)
    计算observedexpected频率计数的拟合度的G统计量
    double
    gDataSetsComparison(long[] observed1, long[] observed2)
    计算独立性的G(对数似然比)两样本检验统计量,比较observed1observed2中的频率计数。
    double
    gTest(double[] expected, long[] observed)
    返回与G检验的拟合度比较observed频率计数与expected数组中的计数相关的观察到的显著水平,或p值
    boolean
    gTest(double[] expected, long[] observed, double alpha)
    执行G检验(对数似然比检验)以评估观察计数是否符合由期望计数描述的频率分布的零假设,显著水平为alpha
    double
    gTestDataSetsComparison(long[] observed1, long[] observed2)
    返回与两样本检验中的G值(对数似然比)相关的观察到的显著水平,或p值,比较observed1observed2中的频率计数。
    boolean
    gTestDataSetsComparison(long[] observed1, long[] observed2, double alpha)
    执行比较两个分组数据集的G检验(对数似然比检验)。
    double
    gTestIntrinsic(double[] expected, long[] observed)
    返回内在(Hardy-Weinberg比例)p值,如McDonald, J.H. 2009年的第64-69页所述。
    double
    rootLogLikelihoodRatio(long k11, long k12, long k21, long k22)
    计算2状态数据集的根对数似然比。

    从类继承的方法 java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 构造器详细资料

    • GTest

      public GTest()
      空构造函数。

      这个构造函数并非绝对必要,但它可以防止在JDK 18及更高版本中出现虚假的javadoc警告。

      从以下版本开始:
      3.0
  • 方法详细资料

    • g

      public double g(double[] expected, long[] observed) throws MathIllegalArgumentException
      计算observedexpected频率计数的拟合度的G统计量

      此统计量可用于执行G检验(对数似然比检验),评估观察计数是否遵循期望分布的零假设。

      前提条件

      • 期望计数必须全部为正数。
      • 观察计数必须全部≥ 0。
      • 观察和期望数组的长度必须相同,它们的共同长度必须至少为2。

      如果不满足任何前提条件,则会抛出MathIllegalArgumentException

      注意:此实现会根据需要重新调整expected数组,以确保期望计数和观察计数的总和相等。

      参数:
      expected - 期望频率计数数组
      observed - 观察频率计数数组
      返回:
      G检验统计量
      抛出:
      MathIllegalArgumentException - 如果observed有负条目
      MathIllegalArgumentException - 如果expected有不严格为正的条目
      MathIllegalArgumentException - 如果数组长度不匹配或小于2。
    • gTest

      public double gTest(double[] expected, long[] observed) throws MathIllegalArgumentException, MathIllegalStateException
      返回与G检验的拟合度比较observed频率计数与expected数组中的计数相关的观察到的显著水平,或p值

      返回的数字是可以拒绝观察计数符合由期望计数描述的频率分布的零假设的最小显著水平。

      返回的概率是在自由度比expectedobserved的公共长度少一个的卡方分布中超过g(expected, observed)的尾部概率。

      前提条件

      • 期望计数必须全部为正数。
      • 观察计数必须全部≥ 0。
      • 观察和期望数组的长度必须相同,它们的共同长度必须至少为2。

      如果不满足任何前提条件,则会抛出MathIllegalArgumentException

      注意:此实现会根据需要重新调整expected数组,以确保期望计数和观察计数的总和相等。

      参数:
      expected - 期望频率计数数组
      observed - 观察频率计数数组
      返回:
      p值
      抛出:
      MathIllegalArgumentException - 如果observed有负条目
      MathIllegalArgumentException - 如果expected有不严格为正的条目
      MathIllegalArgumentException - 如果数组长度不匹配或小于2。
      MathIllegalStateException - 如果计算p值时发生错误。
    • gTestIntrinsic

      public double gTestIntrinsic(double[] expected, long[] observed) throws MathIllegalArgumentException, MathIllegalStateException
      返回内在(Hardy-Weinberg比例)p值,如McDonald, J.H. 2009年的第64-69页所述。

      返回的概率是在自由度比expectedobserved的公共长度少两个的卡方分布中超过g(expected, observed)的尾部概率。

      参数:
      expected - 期望频率计数数组
      observed - 观察频率计数数组
      返回:
      p值
      抛出:
      MathIllegalArgumentException - 如果observed有负条目
      MathIllegalArgumentException - expected有不严格为正的条目
      MathIllegalArgumentException - 如果数组长度不匹配或小于2。
      MathIllegalStateException - 如果计算p值时发生错误。
    • gTest

      public boolean gTest(double[] expected, long[] observed, double alpha) throws MathIllegalArgumentException, MathIllegalStateException
      执行G检验(对数似然比检验),评估观察计数是否符合由期望计数描述的频率分布的零假设,显著水平为alpha。如果可以以100 * (1 - alpha)百分比的置信度拒绝零假设,则返回true。

      示例:
      要测试observed是否在99%水平上遵循expected的假设,请使用

      gTest(expected, observed, 0.01)

      如果gTestGoodnessOfFitPValue(expected, observed) > alpha,则返回true

      前提条件

      • 期望计数必须全部为正数。
      • 观察计数必须全部≥ 0。
      • 观察和期望数组的长度必须相同,它们的共同长度必须至少为2。
      • 0 < alpha < 0.5

      如果不满足任何前提条件,则会抛出MathIllegalArgumentException

      注意:此实现会根据需要重新调整expected数组,以确保期望计数和观察计数的总和相等。

      参数:
      expected - 期望频率计数的数组
      observed - 观察频率计数的数组
      alpha - 测试的显著性水平
      返回:
      如果可以以置信度1-alpha拒绝零假设,则为true
      抛出:
      MathIllegalArgumentException - 如果observed中有负条目
      MathIllegalArgumentException - 如果expected中的条目不是严格正数
      MathIllegalArgumentException - 如果数组长度不匹配或小于2
      MathIllegalStateException - 如果计算p值时发生错误
      MathIllegalArgumentException - 如果alpha不严格大于零且小于或等于0.5
    • gDataSetsComparison

      public double gDataSetsComparison(long[] observed1, long[] observed2) throws MathIllegalArgumentException

      计算独立性的G(对数似然比)双样本检验统计量,比较observed1observed2中的频率计数。两个样本的频率计数之和不需要相同。用于计算检验统计量的公式为

      2 * totalSum * [H(rowSums) + H(colSums) - H(k)]

      其中H是将参数数组的元素视为发生计数的随机变量的香农熵;
      k是一个具有行[observed1, observed2]的矩阵;
      rowSums, colSumsk的行/列和;
      totalSumk中所有条目的总和。

      此统计量可用于执行G检验,评估零假设,即两个观察计数是独立的

      前提条件:

      • 观察计数必须是非负的。
      • 特定箱的观察计数不能都为零。
      • 特定样本的观察计数不能全部为0。
      • 数组observed1observed2必须具有相同的长度,它们的公共长度必须至少为2。

      如果不满足任何前提条件,则会抛出MathIllegalArgumentException

      参数:
      observed1 - 第一个数据集的观察频率计数数组
      observed2 - 第二个数据集的观察频率计数数组
      返回:
      G-Test统计量
      抛出:
      MathIllegalArgumentException - 如果数组长度不匹配或它们的公共长度小于2
      MathIllegalArgumentException - 如果observed1observed2中的任何条目为负
      MathIllegalArgumentException - 如果observed1observed2的所有计数为零,或者如果相同索引处两个数组的计数都为零
    • rootLogLikelihoodRatio

      public double rootLogLikelihoodRatio(long k11, long k12, long k21, long k22)
      计算2状态数据集的根对数似然比。参见gDataSetsComparison(long[], long[])

      给定两个事件A和B,设k11为两个事件同时发生的次数,k12为B发生但A不发生的次数,k21为A发生但B不发生的次数,k22为既不是A也不是B发生的次数。此方法返回的是

      (sgn) sqrt(gValueDataSetsComparison({k11, k12}, {k21, k22})

      其中sgn为-1,如果k11 / (k11 + k12) < k21 / (k21 + k22))
      否则为1。

      有符号的根LLR相对于基本LLR有两个优点:a) 在k11大于预期时为正,在k11较低时为负 b) 如果没有差异,它在渐近上是正态分布的。这使得可以谈论“标准偏差的数量”,这是比卡方分布更常见的参考框架。

      参数:
      k11 - 两个事件同时发生(AB)的次数
      k12 - 第一个事件发生但第二个事件不发生(非A,B)的次数
      k21 - 第二个事件发生但第一个事件不发生(A,非B)的次数
      k22 - 其他事件发生的次数(即既不是这两个事件也不是那两个事件(非A,非B))
      返回:
      根对数似然比
    • gTestDataSetsComparison

      public double gTestDataSetsComparison(long[] observed1, long[] observed2) throws MathIllegalArgumentException, MathIllegalStateException

      返回与G值(对数似然比)相关的观察显著性水平,或p值,用于比较observed1observed2中的箱频率计数的双样本检验。

      返回的数字是可以拒绝观察计数符合相同分布的零假设的最小显著性水平。

      有关如何计算p值的详细信息,请参见gTest(double[], long[])。用于执行测试的自由度比输入观察计数数组的公共长度少一个。

      前提条件:

      • 观察计数必须是非负的。
      • 特定箱的观察计数不能都为零。
      • 特定样本的观察计数不能全部为0。
      • 数组observed1observed2必须具有相同的长度,它们的公共长度必须至少为2。

      如果不满足任何前提条件,则会抛出MathIllegalArgumentException

      参数:
      observed1 - 第一个数据集的观察频率计数数组
      observed2 - 第二个数据集的观察频率计数数组
      返回:
      p值
      抛出:
      MathIllegalArgumentException - 如果数组长度不匹配或它们的公共长度小于2
      MathIllegalArgumentException - 如果observed1observed2中的任何条目为负
      MathIllegalArgumentException - 如果observed1observed2的所有计数为零,或者如果某些索引处两个数组的计数都为零
      MathIllegalStateException - 如果计算p值时发生错误
    • gTestDataSetsComparison

      public boolean gTestDataSetsComparison(long[] observed1, long[] observed2, double alpha) throws MathIllegalArgumentException, MathIllegalStateException

      执行G-Test(对数似然比检验)比较两个分组数据集。该测试评估了两个观察计数列表符合相同频率分布的零假设,显著性水平为alpha。如果可以以100 * (1 - alpha)百分比的置信度拒绝零假设,则返回true。

      有关用于计算测试中使用的G(LLR)统计量的公式的详细信息,请参见gDataSetsComparison(long[], long[]),以及有关如何计算观察显著性水平的信息,请参见gTest(double[], long[])。用于执行测试的自由度比输入观察计数数组的公共长度少一个。

      前提条件:

      • 观察计数必须是非负的。
      • 特定箱的观察计数不能都为零。
      • 特定样本的观察计数不能全部为0。
      • 数组observed1observed2必须具有相同的长度,它们的公共长度必须至少为2。
      • 0 < alpha < 0.5

      如果不满足任何前提条件,则会抛出MathIllegalArgumentException

      参数:
      observed1 - 第一个数据集的观察频率计数数组
      observed2 - 第二个数据集的观察频率计数数组
      alpha - 测试的显著性水平
      返回:
      如果可以以置信度1-alpha拒绝零假设,则为true
      抛出:
      MathIllegalArgumentException - 如果数组长度不匹配
      MathIllegalArgumentException - 如果observed1observed2中的任何条目为负
      MathIllegalArgumentException - 如果observed1observed2的所有计数为零,或者如果某些索引处两个数组的计数都为零
      MathIllegalArgumentException - 如果alpha不在范围(0, 0.5]内
      MathIllegalStateException - 如果执行测试时发生错误