类 Variance

所有已实现的接口:
Serializable, DoubleConsumer, AggregatableStatistic<Variance>, StorelessUnivariateStatistic, UnivariateStatistic, WeightedEvaluation, MathArrays.Function

计算可用值的方差。默认情况下,使用无偏的“样本方差”定义公式:

方差 = sum((x_i - mean)^2) / (n - 1)

其中mean是Meann是样本观测值的数量。

定义公式在数值上没有很好的性质,因此此实现不使用定义公式计算统计量。

  • getResult方法使用基于West算法的更新公式计算方差,如Chan, T. F.和J. G. Lewis 1979年所述,ACM通讯,第22卷第9期,第526-531页。
  • evaluate方法利用它们在内存中具有完整值数组的事实执行两遍算法。具体来说,这些方法使用来自Chan, Golub, Levesque的“修正的两遍算法”,用于计算样本方差的算法,美国统计学家,第37卷,第3期(1983年)第242-247页。

请注意,使用incrementincrementAll添加值,然后执行getResult有时会给出不同且不太准确的结果,而使用完整值数组执行evaluate。前一种方法仅在无法使用完整值数组时使用。

也可以使用此统计量计算“总体方差”(sum((x_i - mean)^2) / n)。isBiasCorrected属性确定evaluategetResult方法返回“总体”还是“样本”值。要计算总体方差,请将此属性设置为false。

请注意,此实现未同步。如果多个线程同时访问此类的实例,并且至少有一个线程调用increment()clear()方法,则必须在外部进行同步。

另请参阅:
  • 字段概要

    字段
    修饰符和类型
    字段
    说明
    protected final boolean
    是否应该增加内部第二矩。
    protected final SecondMoment
    SecondMoment用于增量计算方差
  • 构造器概要

    构造器
    构造器
    说明
    使用默认(true)isBiasCorrected属性构造一个方差。
    Variance(boolean isBiasCorrected)
    使用指定的isBiasCorrected属性构造一个方差。
    Variance(boolean isBiasCorrected, SecondMoment m2)
    使用指定的isBiasCorrected属性和提供的外部第二矩构造一个方差。
    基于外部第二矩构造一个方差。
    Variance(Variance original)
    复制构造函数,创建与original相同的新Variance
  • 方法概要

    修饰符和类型
    方法
    说明
    void
    将提供的实例聚合到此实例中。
    void
    clear()
    清除统计量的内部状态
    copy()
    返回具有相同内部状态的统计量的副本。
    double
    evaluate(double[] values, double mean)
    返回输入数组中条目的方差,使用预先计算的均值。
    double
    evaluate(double[] values, double[] weights, double mean)
    返回输入数组中值的加权方差,使用预先计算的加权均值。
    double
    evaluate(double[] values, double[] weights, double mean, int begin, int length)
    返回输入数组指定部分的值的加权方差,使用预先计算的加权均值。
    double
    evaluate(double[] values, double[] weights, int begin, int length)
    返回指定输入数组部分的值的加权方差,如果指定的子数组为空,则返回Double.NaN
    double
    evaluate(double[] values, double mean, int begin, int length)
    返回输入数组指定部分的值的方差,使用预先计算的均值。
    double
    evaluate(double[] values, int begin, int length)
    返回输入数组指定部分的值的方差,如果指定的子数组为空,则返回Double.NaN
    long
    getN()
    返回已添加的值的数量。
    double
    返回统计量的当前值。
    void
    increment(double d)
    更新统计量的内部状态,以反映新值的添加。
    boolean
    检查是否已校正偏差。
    withBiasCorrection(boolean biasCorrection)
    返回具有给定偏差校正设置的此方差的新副本。

    从类继承的方法 org.hipparchus.stat.descriptive.AbstractStorelessUnivariateStatistic

    equals, hashCode, toString

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

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait

    从接口继承的方法 org.hipparchus.stat.descriptive.AggregatableStatistic

    aggregate, aggregate

    从接口继承的方法 java.util.function.DoubleConsumer

    andThen

    从接口继承的方法 org.hipparchus.stat.descriptive.StorelessUnivariateStatistic

    accept, incrementAll, incrementAll

    从接口继承的方法 org.hipparchus.stat.descriptive.UnivariateStatistic

    evaluate

    从接口继承的方法 org.hipparchus.stat.descriptive.WeightedEvaluation

    evaluate
  • 字段详细资料

    • moment

      protected final SecondMoment moment
      SecondMoment用于增量计算方差
    • incMoment

      protected final boolean incMoment
      是否应该增加内部第二矩。当使用外部SecondMoment作为构造函数参数构造方差时,此属性设置为false,增量必须直接应用于第二矩。
  • 构造器详细资料

    • Variance

      public Variance()
      使用默认(true)isBiasCorrected属性构造一个方差。
    • Variance

      public Variance(SecondMoment m2)
      基于外部第二矩构造一个方差。

      使用此构造函数时,统计量只能通过矩增量化,即,increment(double)不起作用;而m2.increment(value)会增加m2和从中构造的方差实例。

      参数:
      m2 - 第二矩(第三或第四矩也适用)
    • Variance

      public Variance(boolean isBiasCorrected)
      使用指定的isBiasCorrected属性构造一个方差。
      参数:
      isBiasCorrected - 偏差校正设置 - true表示将校正偏差,等效于使用无参数构造函数
    • Variance

      public Variance(boolean isBiasCorrected, SecondMoment m2)
      使用指定的isBiasCorrected属性和提供的外部第二矩构造一个方差。
      参数:
      isBiasCorrected - 偏差校正设置 - true表示将校正偏差
      m2 - 第二矩(第三或第四矩也适用)
    • Variance

      public Variance(Variance original) throws NullArgumentException
      复制构造函数,创建与original相同的新Variance
      参数:
      original - 要复制的Variance实例
      抛出:
      NullArgumentException - 如果original为null
  • 方法详细资料

    • increment

      public void increment(double d)
      更新统计量的内部状态,以反映新值的添加。

      如果所有值都可用,则使用UnivariateStatistic.evaluate(double[])比使用此方法逐个添加值然后执行getResult()更准确,因为evaluate利用具有完整值列表的事实一起执行两遍算法。请参阅Variance

      还要注意,当使用Variance(SecondMoment)创建方差时,此方法不起作用。在这种情况下,应直接增加SecondMoment。

      指定者:
      increment 在接口中 StorelessUnivariateStatistic
      指定者:
      increment 在类中 AbstractStorelessUnivariateStatistic
      参数:
      d - 新值。
    • getResult

      public double getResult()
      返回统计量的当前值。
      指定者:
      getResult 在接口中 StorelessUnivariateStatistic
      指定者:
      getResult 在类中 AbstractStorelessUnivariateStatistic
      返回:
      统计量的值,如果已清除或刚刚实例化,则为Double.NaN
    • getN

      public long getN()
      返回已添加值的数量。
      指定者:
      getN 在接口中 StorelessUnivariateStatistic
      返回:
      值的数量。
    • clear

      public void clear()
      清除统计量的内部状态
      指定者:
      clear 在接口中 StorelessUnivariateStatistic
      指定者:
      clear 在类中 AbstractStorelessUnivariateStatistic
    • aggregate

      public void aggregate(Variance other)
      将提供的实例聚合到此实例中。

      此方法可用于组合在分区或子样本上计算的统计量 - 即,此操作后此实例的值应与在组合数据集上应用单个统计量时的值相同。

      指定者:
      aggregate 在接口中 AggregatableStatistic<Variance>
      参数:
      other - 要聚合到此实例中的实例
    • evaluate

      public double evaluate(double[] values, int begin, int length) throws MathIllegalArgumentException
      返回输入数组指定部分的条目的方差,如果指定的子数组为空,则返回Double.NaN。请注意,如果输入包含NaN和/或无限值,则也可能返回Double.NaN。

      有关计算算法的详细信息,请参见Variance

      对于单个值(即长度=1)的样本,返回0。

      不更改统计量的内部状态。

      如果数组为null,则抛出MathIllegalArgumentException

      指定者:
      evaluate 在接口中 MathArrays.Function
      指定者:
      evaluate 在接口中 StorelessUnivariateStatistic
      指定者:
      evaluate 在接口中 UnivariateStatistic
      参数:
      values - 输入数组
      begin - 要包括的第一个数组元素的索引
      length - 要包括的元素数
      返回:
      值的方差,如果长度=0,则为Double.NaN
      抛出:
      MathIllegalArgumentException - 如果数组为null或数组索引参数无效
      另请参阅:
    • evaluate

      public double evaluate(double[] values, double[] weights, int begin, int length) throws MathIllegalArgumentException
      返回输入数组指定部分的加权方差,如果指定的子数组为空,则返回Double.NaN

      使用公式

         Σ(weights[i]*(values[i] - weightedMean)²)/(Σ(weights[i]) - 1)
       
      其中weightedMean是加权平均值。

      当所有权重相等时,此公式将不返回与未加权方差相同的结果,除非所有权重都等于1。该公式假定权重应被视为“扩展值”,例如,如果权重代表频率计数,则将是这种情况。要使权重归一化,以便方差计算中的分母等于输入向量的长度减1,请使用

         evaluate(values, MathArrays.normalizeArray(weights, values.length));
       

      对于单个值(即长度=1)的样本,返回0。

      如果以下任一情况为真,则抛出IllegalArgumentException

      • 值数组为null
      • 权重数组为null
      • 权重数组的长度与值数组的长度不同
      • 权重数组包含一个或多个无限值
      • 权重数组包含一个或多个NaN值
      • 权重数组包含负值
      • 开始和长度参数未确定有效数组

      不更改统计量的内部状态。

      指定者:
      evaluate 在接口中 WeightedEvaluation
      参数:
      values - 输入数组
      weights - 权重数组
      begin - 要包括的第一个数组元素的索引
      length - 要包括的元素数
      返回:
      值的加权方差,如果长度=0,则为Double.NaN
      抛出:
      MathIllegalArgumentException - 如果参数无效
    • evaluate

      public double evaluate(double[] values, double mean, int begin, int length) throws MathIllegalArgumentException
      返回输入数组指定部分的条目的方差,使用预先计算的平均值。如果指定的子数组为空,则返回Double.NaN

      有关计算算法的详细信息,请参见Variance

      使用的公式假定提供的平均值是样本数据的算术平均值,而不是已知的总体参数。仅当已经计算了平均值时,才提供此方法以节省计算。

      对于单个值(即长度=1)的样本,返回0。

      不更改统计量的内部状态。

      参数:
      values - 输入数组
      mean - 预先计算的平均值
      begin - 要包括的第一个数组元素的索引
      length - 要包括的元素数
      返回:
      值的方差,如果长度=0,则为Double.NaN
      抛出:
      MathIllegalArgumentException - 如果数组为null或数组索引参数无效
    • evaluate

      public double evaluate(double[] values, double mean) throws MathIllegalArgumentException
      返回输入数组的条目的方差,使用预先计算的平均值。如果数组为空,则返回Double.NaN

      有关计算算法的详细信息,请参见Variance

      如果isBiasCorrectedtrue,则使用的公式假定提供的平均值是样本数据的算术平均值,而不是已知的总体参数。如果平均值是已知的总体参数,或者如果需要总体版本的方差,请在调用此方法之前将isBiasCorrected设置为false

      对于单个值(即长度=1)的样本,返回0。

      不更改统计量的内部状态。

      参数:
      values - 输入数组
      mean - 预先计算的平均值
      返回:
      值的方差,如果数组为空,则为Double.NaN
      抛出:
      MathIllegalArgumentException - 如果数组为null
    • evaluate

      public double evaluate(double[] values, double[] weights, double mean, int begin, int length) throws MathIllegalArgumentException
      返回指定部分输入数组中条目的加权方差,使用预先计算的加权均值。如果指定的子数组为空,则返回Double.NaN

      使用以下公式

         Σ(weights[i]*(values[i] - mean)²)/(Σ(weights[i]) - 1)
       

      使用的公式假定提供的均值是样本数据的加权算术平均值,而不是已知的总体参数。此方法仅用于在已计算均值时节省计算。

      当所有权重不相等时,此公式将不会返回与未加权方差相同的结果,除非所有权重均等于1。该公式假定权重应被视为“扩展值”,例如,如果权重代表频率计数,则情况将是如此。要规范化权重,使方差计算中的分母等于输入向量的长度减一,请使用

         evaluate(values, MathArrays.normalizeArray(weights, values.length), mean);
       

      对于单个值(即长度=1)样本,返回0。

      如果以下任一情况为真,则抛出MathIllegalArgumentException

      • 值数组为null
      • 权重数组为null
      • 权重数组的长度与值数组的长度不同
      • 权重数组包含一个或多个无穷大值
      • 权重数组包含一个或多个NaN值
      • 权重数组包含负值
      • 开始和长度参数未确定有效数组

      不更改统计数据的内部状态。

      参数:
      values - 输入数组
      weights - 权重数组
      mean - 预先计算的加权均值
      begin - 要包括的第一个数组元素的索引
      length - 要包括的元素数量
      返回:
      值的方差,如果长度=0,则返回Double.NaN
      抛出:
      MathIllegalArgumentException - 如果参数无效
    • evaluate

      public double evaluate(double[] values, double[] weights, double mean) throws MathIllegalArgumentException
      返回输入数组中值的加权方差,使用预先计算的加权均值。

      使用以下公式

         Σ(weights[i]*(values[i] - mean)²)/(Σ(weights[i]) - 1)
       

      使用的公式假定提供的均值是样本数据的加权算术平均值,而不是已知的总体参数。此方法仅用于在已计算均值时节省计算。

      当所有权重不相等时,此公式将不会返回与未加权方差相同的结果,除非所有权重均等于1。该公式假定权重应被视为“扩展值”,例如,如果权重代表频率计数,则情况将是如此。要规范化权重,使方差计算中的分母等于输入向量的长度减一,请使用

         evaluate(values, MathArrays.normalizeArray(weights, values.length), mean);
       

      对于单个值(即长度=1)样本,返回0。

      如果以下任一情况为真,则抛出MathIllegalArgumentException

      • 值数组为null
      • 权重数组为null
      • 权重数组的长度与值数组的长度不同
      • 权重数组包含一个或多个无穷大值
      • 权重数组包含一个或多个NaN值
      • 权重数组包含负值

      不更改统计数据的内部状态。

      参数:
      values - 输入数组
      weights - 权重数组
      mean - 预先计算的加权均值
      返回:
      值的方差,如果长度=0,则返回Double.NaN
      抛出:
      MathIllegalArgumentException - 如果参数无效
    • isBiasCorrected

      public boolean isBiasCorrected()
      检查是否已校正偏差。
      返回:
      返回isBiasCorrected。
    • withBiasCorrection

      public Variance withBiasCorrection(boolean biasCorrection)
      返回具有给定偏差校正设置的此方差的新副本。
      参数:
      biasCorrection - 要设置的偏差校正标志。
      返回:
      具有给定偏差校正设置的此实例的副本
    • copy

      public Variance copy()
      返回具有相同内部状态的统计数据的副本。
      指定者:
      copy 在接口中 StorelessUnivariateStatistic
      指定者:
      copy 在接口中 UnivariateStatistic
      指定者:
      copy 在类中 AbstractStorelessUnivariateStatistic
      返回:
      统计数据的副本