统计学Java_【gloomyfish】基于Java的统计学计算结果

最近经常跟数值计算的东西打交道,特别是大量样本的统计计算,在常见的描述统计结果中,最常用到的是一下几种:

-一组样本的平均价值

-一组样本的中值

-一组样本中的最小值

-一组样本中的最大值

-一组样本的和

-一组样本的标准方差

其中,样本N(X[1].....X[n])的中值的计算与样本的总数有一定的关系:

当样本数量为奇数(odd)时,中值median=X[n/2]

当样本数量为偶数(even)时,中值median=(X[n/2] + X[n/2])/2

本的标准方差是指以N为分母(denominator)计算结果,标准方差样本是指以N-1作为分母,N-1

又叫自由度数。

在标准的apache common math的组件中,已经包含了一组统计学计算的package,可以很好的计算

上面的结果。而它的标准方差的计算公式正是用N-1作为分母计算出来的结果。这个组件的下载URL:

下面是本人基于Java实现的代码,计算结果与apache

common math中的DescriptiveStatistics的

结果完全一致

/**

* @author gloomyfish

* @date 2011-03-20

*/

package com.java.mathutil;

import java.util.Arrays;

import org.apache.commons.math.stat.descriptive.DescriptiveStatistics;

public class StatisticsDemo {

private double[] inputData; // input data

private double medianValue; // median value

private double meanValue; // mean of input data array

private double maxValue; // max value of array

private double minValue; // min value of array

private double sdValue; // standard deviation of array

private double sumValue; // sum of array

public StatisticsDemo(double[] input) {

this.inputData = input;

Arrays.sort(inputData);

double N = inputData.length;

for(int i=0; i

{

if(i == 0) {

maxValue = inputData[i];

minValue = inputData[i];

}

if(maxValue < inputData[i]) {

maxValue = inputData[i];

}

if(minValue > inputData[i]) {

minValue = inputData[i];

}

sumValue += inputData[i];

}

meanValue = sumValue/N;

// if total number is odd

// calculate standard deviation and median value

// http://en.wikipedia.org/wiki/Standard_deviation

if(isOdd(inputData.length))

{

medianValue = inputData[inputData.length/2];

}

else

{

double temp = inputData[inputData.length/2] + inputData[(inputData.length/2 -1)];

medianValue = temp/2.0d;

}

double powSum = 0.0d;

for(int k=0; k

powSum += Math.pow((inputData[k] - meanValue), 2);

}

// This correction (the use of N − 1 instead of N) is known as Bessel's correction

sdValue = Math.sqrt(powSum/(N-(double)1.0d));

}

private boolean isOdd(int n) {

if((n & 0x1) == 1)

return true;

else

return false;

}

public double getMedianValue() {

return medianValue;

}

public double getMeanValue() {

return meanValue;

}

public double getMaxValue() {

return maxValue;

}

public double getMinValue() {

return minValue;

}

public double getSdValue() {

return sdValue;

}

public double getSumValue() {

return sumValue;

}

public static void main(String[] args) {

double[] data = new double[]{15.23,12.11,7,88,17,89,6.578,13.456,9.1235,20.5678};

// Arrays.sort(data);

StatisticsDemo dsd = new StatisticsDemo(data);

DescriptiveStatistics ds = new DescriptiveStatistics();

for(int i=0; i

{

ds.addValue(data[i]);

}

System.out.println("Demo sum = " + dsd.getSumValue());

System.out.println("Demo mean = " + dsd.getMeanValue());

System.out.println("Demo median = " + dsd.getMedianValue());

System.out.println("Demo standard deviation = " + dsd.getSdValue());

System.out.println("DS sum = " + ds.getSum());

System.out.println("DS mean = " + ds.getMean());

System.out.println("DS median = " + ds.getPercentile(50));

System.out.println("DS standard deviation = " + ds.getStandardDeviation());

}

}

如有误导,后果自负!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值