java实现f检验

场景

  • 用于两个总体方差之间的比较
  • 关于最终求出的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;
	}
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值