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

简介: 最近经常跟数值计算的东西打交道,特别是大量样本的统计计算,在常见的描述统计结果中,最常用到的是一下几种:  - 一组样本的平均价值  - 一组样本的中值  - 一组样本中的最小值  - 一组样本中的最大值  - 一组样本的和  - 一组样本的标准方差   其中,样本N(X[1].

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

 - 一组样本的平均价值

 - 一组样本的中值

 - 一组样本中的最小值

 - 一组样本中的最大值

 - 一组样本的和

 - 一组样本的标准方差

 

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

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

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

 

标准方差的计算公式可以参考维基百科http://en.wikipedia.org/wiki/Standard_deviation, 其中样

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

又叫自由度数。

 

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

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

http://commons.apache.org/math/

 

下面是本人基于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<inputData.length; 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<inputData.length; 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<data.length; 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()); } }

 

如有误导,后果自负!

 

 

 

目录
相关文章
|
2天前
|
存储 分布式计算 Java
存算分离与计算向数据移动:深度解析与Java实现
【11月更文挑战第10天】随着大数据时代的到来,数据量的激增给传统的数据处理架构带来了巨大的挑战。传统的“存算一体”架构,即计算资源与存储资源紧密耦合,在处理海量数据时逐渐显露出其局限性。为了应对这些挑战,存算分离(Disaggregated Storage and Compute Architecture)和计算向数据移动(Compute Moves to Data)两种架构应运而生,成为大数据处理领域的热门技术。
13 2
|
7天前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
25天前
|
机器学习/深度学习 算法 搜索推荐
让星星⭐月亮告诉你,Java冒泡排序及其时间复杂度计算
冒泡排序是一种简单的排序算法,通过多次遍历数组,每次比较相邻元素并交换位置,将较小的元素逐步移至数组前端。第一轮结束后,最小值会位于首位;第二轮则将次小值置于第二位,依此类推。经过 (n-1) 轮遍历后,数组完成排序。冒泡排序的时间复杂度为 O(n²),在最优情况下(已排序数组)时间复杂度为 O(n)。示例代码展示了如何实现冒泡排序。
46 1
|
7天前
|
Java API Apache
java集合的组内平均值怎么计算
通过本文的介绍,我们了解了在Java中计算集合的组内平均值的几种方法。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。无论是使用传统的循环方法,还是利用Java 8的Stream API,亦或是使用第三方库(如Apache Commons Collections和Guava),都可以有效地计算集合的组内平均值。希望本文对您理解和实现Java中的集合平均值计算有所帮助。
16 0
|
1月前
|
分布式计算 资源调度 Hadoop
Hadoop-10-HDFS集群 Java实现MapReduce WordCount计算 Hadoop序列化 编写Mapper和Reducer和Driver 附带POM 详细代码 图文等内容
Hadoop-10-HDFS集群 Java实现MapReduce WordCount计算 Hadoop序列化 编写Mapper和Reducer和Driver 附带POM 详细代码 图文等内容
81 3
|
1月前
|
消息中间件 Java Kafka
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
41 1
|
3月前
|
Rust JavaScript Java
简单对比Java、Python、Go、Rust等常见语言计算斐波拉契数的性能
简单对比Java、Python、Go、Rust等常见语言计算斐波拉契数的性能
|
4月前
|
搜索推荐 Java 大数据
Java中的数据流处理与流式计算实现
Java中的数据流处理与流式计算实现
|
4月前
|
并行计算 Java 大数据
Java中的高效并行计算与多线程编程技术
Java中的高效并行计算与多线程编程技术
|
5月前
|
Java API
探讨Java集合的组内平均值计算
探讨Java集合的组内平均值计算
45 1