通过WeightedObservedPoints 二次拟合获取R方值
时间: 2023-12-23 18:04:52 浏览: 151
是的,您可以使用 `WeightedObservedPoints` 类和 `PolynomialCurveFitter` 类来进行二次拟合并计算 R 方值。
以下是一个示例代码:
```java
import org.apache.commons.math3.fitting.PolynomialCurveFitter;
import org.apache.commons.math3.fitting.WeightedObservedPoints;
public class R2Calculator {
public static void main(String[] args) {
WeightedObservedPoints obs = new WeightedObservedPoints();
obs.add(1, 2);
obs.add(2, 5);
obs.add(3, 10);
obs.add(4, 17);
obs.add(5, 26);
PolynomialCurveFitter fitter = PolynomialCurveFitter.create(2);
double[] coefficients = fitter.fit(obs.toList());
double rSquare = getRSquare(obs, coefficients);
System.out.println("R Square: " + rSquare);
}
private static double getRSquare(WeightedObservedPoints obs, double[] coefficients) {
double yMean = obs.getMean();
double ssTot = 0;
double ssRes = 0;
for (int i = 0; i < obs.toList().size(); i++) {
double x = obs.toList().get(i).getX();
double y = obs.toList().get(i).getY();
double yHat = coefficients[0] + coefficients[1] * x + coefficients[2] * x * x;
ssTot += Math.pow(y - yMean, 2);
ssRes += Math.pow(y - yHat, 2);
}
return 1 - ssRes / ssTot;
}
}
```
在这个示例中,我们使用 `WeightedObservedPoints` 类存储观测值 `(1, 2), (2, 5), (3, 10), (4, 17), (5, 26)`。然后,我们使用 `PolynomialCurveFitter` 类进行二次拟合,并将观测点添加到拟合模型中。我们还定义了一个 `getRSquare()` 方法来计算 R 方值。该方法首先计算总平方和 `ssTot` 和残差平方和 `ssRes`,然后使用以下公式计算 R 方值:`R^2 = 1 - ssRes / ssTot`。
请注意,您需要使用 Apache Commons Math 库来运行此示例。
阅读全文