100 lines
3.6 KiB
Java
100 lines
3.6 KiB
Java
package com.google.common.math;
|
|
|
|
import com.google.common.base.Preconditions;
|
|
import com.google.common.primitives.Doubles;
|
|
|
|
/* loaded from: classes2.dex */
|
|
public final class PairedStatsAccumulator {
|
|
private final StatsAccumulator xStats = new StatsAccumulator();
|
|
private final StatsAccumulator yStats = new StatsAccumulator();
|
|
private double sumOfProductsOfDeltas = 0.0d;
|
|
|
|
private double ensurePositive(double d) {
|
|
if (d > 0.0d) {
|
|
return d;
|
|
}
|
|
return Double.MIN_VALUE;
|
|
}
|
|
|
|
public final void add(double d, double d2) {
|
|
this.xStats.add(d);
|
|
if (!Doubles.isFinite(d) || !Doubles.isFinite(d2)) {
|
|
this.sumOfProductsOfDeltas = Double.NaN;
|
|
} else if (this.xStats.count() > 1) {
|
|
this.sumOfProductsOfDeltas += (d - this.xStats.mean()) * (d2 - this.yStats.mean());
|
|
}
|
|
this.yStats.add(d2);
|
|
}
|
|
|
|
public final void addAll(PairedStats pairedStats) {
|
|
if (pairedStats.count() == 0) {
|
|
return;
|
|
}
|
|
this.xStats.addAll(pairedStats.xStats());
|
|
if (this.yStats.count() == 0) {
|
|
this.sumOfProductsOfDeltas = pairedStats.sumOfProductsOfDeltas();
|
|
} else {
|
|
this.sumOfProductsOfDeltas += pairedStats.sumOfProductsOfDeltas() + ((pairedStats.xStats().mean() - this.xStats.mean()) * (pairedStats.yStats().mean() - this.yStats.mean()) * pairedStats.count());
|
|
}
|
|
this.yStats.addAll(pairedStats.yStats());
|
|
}
|
|
|
|
public final PairedStats snapshot() {
|
|
return new PairedStats(this.xStats.snapshot(), this.yStats.snapshot(), this.sumOfProductsOfDeltas);
|
|
}
|
|
|
|
public final long count() {
|
|
return this.xStats.count();
|
|
}
|
|
|
|
public final Stats xStats() {
|
|
return this.xStats.snapshot();
|
|
}
|
|
|
|
public final Stats yStats() {
|
|
return this.yStats.snapshot();
|
|
}
|
|
|
|
public final double populationCovariance() {
|
|
Preconditions.checkState(count() != 0);
|
|
return this.sumOfProductsOfDeltas / count();
|
|
}
|
|
|
|
public final double sampleCovariance() {
|
|
Preconditions.checkState(count() > 1);
|
|
return this.sumOfProductsOfDeltas / (count() - 1);
|
|
}
|
|
|
|
public final double pearsonsCorrelationCoefficient() {
|
|
Preconditions.checkState(count() > 1);
|
|
if (Double.isNaN(this.sumOfProductsOfDeltas)) {
|
|
return Double.NaN;
|
|
}
|
|
double sumOfSquaresOfDeltas = this.xStats.sumOfSquaresOfDeltas();
|
|
double sumOfSquaresOfDeltas2 = this.yStats.sumOfSquaresOfDeltas();
|
|
Preconditions.checkState(sumOfSquaresOfDeltas > 0.0d);
|
|
Preconditions.checkState(sumOfSquaresOfDeltas2 > 0.0d);
|
|
return ensureInUnitRange(this.sumOfProductsOfDeltas / Math.sqrt(ensurePositive(sumOfSquaresOfDeltas * sumOfSquaresOfDeltas2)));
|
|
}
|
|
|
|
public final LinearTransformation leastSquaresFit() {
|
|
Preconditions.checkState(count() > 1);
|
|
if (Double.isNaN(this.sumOfProductsOfDeltas)) {
|
|
return LinearTransformation.forNaN();
|
|
}
|
|
double sumOfSquaresOfDeltas = this.xStats.sumOfSquaresOfDeltas();
|
|
if (sumOfSquaresOfDeltas <= 0.0d) {
|
|
Preconditions.checkState(this.yStats.sumOfSquaresOfDeltas() > 0.0d);
|
|
return LinearTransformation.vertical(this.xStats.mean());
|
|
}
|
|
if (this.yStats.sumOfSquaresOfDeltas() > 0.0d) {
|
|
return LinearTransformation.mapping(this.xStats.mean(), this.yStats.mean()).withSlope(this.sumOfProductsOfDeltas / sumOfSquaresOfDeltas);
|
|
}
|
|
return LinearTransformation.horizontal(this.yStats.mean());
|
|
}
|
|
|
|
private static double ensureInUnitRange(double d) {
|
|
return Doubles.constrainToRange(d, -1.0d, 1.0d);
|
|
}
|
|
}
|