场景
- 用于两个总体方差之间的比较
- 关于最终求出的p值为什么是一侧的面积,而非双侧:如果应用场景是两组数据差异性的比较,那么我们可以从F分数的公式上去理解。F分数的分子代表的是组与组数据之间的差异性,而分母代表的是每组数据内部的差异性,我们的目的就是要知道是否组与组之间有显著的差异,换句话说就是组与组之间的差异是否大于组内的差异,无论是A组数据大于B组数据,还是B组数据大于A组数据,分子一定是大于分母的。
- 根据上一条解释,总结而言:当使用F检验比较不同组数据之间差异时,它总是一个单侧检验
maven
<dependencies>
<!-- https://mvnrepository.com/artifact/net.sf.jsci/jsci -->
<dependency>
<groupId>net.sf.jsci</groupId>
<artifactId>jsci</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-math3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.6.1</version>
</dependency>
</dependencies>
用法
public class FtestDemo {
/**
*
* @param args
*/
public static void main(String[] args) {
double[] x= {300,280,344,385,372,360,288,321,376,290,301,283};
double[] y= {274,220,308,336,198,300,315,258,318,310,332,263};
Ftest f=new Ftest(x, y);
System.out.println(f.getPValue());
}
}
代码
package com.math.statistics;
import org.apache.commons.math3.stat.descriptive.moment.Variance;
import JSci.maths.statistics.FDistribution;
public class Ftest {
private double[] x;
private double[] y;
Variance variance = new Variance();
public Ftest(double[] x, double[] y) {
super();
this.x = x;
this.y = y;
}
public double[] getX() {
return x;
}
public void setX(double[] x) {
this.x = x;
}
public double[] getY() {
return y;
}
public void setY(double[] y) {
this.y = y;
}
public double getXDegreesOfFreedom() {
return x.length - 1;
}
public double getYDegreesOfFreedom() {
return y.length - 1;
}
public double getXVariance() {
return variance.evaluate(x);
}
public double getYVariance() {
return variance.evaluate(y);
}
public double getPValue() {
double q=getXVariance()*getXVariance();
double p=getYVariance()*getYVariance();
double f=q/p;
FDistribution fd=new FDistribution(x.length - 1, y.length - 1);
double cumulative = fd.cumulative(f);
return 1-cumulative;
}
}