Pearson product-moment correlation coefficient in java(java的简单相关系数算法)

一、什么是Pearson product-moment correlation coefficient(简单相关系数)?

相关表和相关图可反映两个变量之间的相互关系及其相关方向,但无法确切地表明两个变量之间相关的程度。于是,著名统计学家卡尔·皮尔逊设计了统计指标——相关系数(Correlation
coefficient)。相关系数是用以反映变量之间相关关系密切程度的统计指标。相关系数是按积差方法计算,同样以两变量与各自平均值的离差为基础,通过两个离差相乘来反映两变量之间相关程度;着重研究线性的单相关系数。

百度百科:http://baike.baidu.com/view/172091.htm

统计学中,皮尔逊积矩相关系数(英语:Pearson
product-moment correlation coefficient,又称作 PPMCC或PCCs[1],
文章中常用r或Pearson‘s r表示)用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间。在自然科学领域中,该系数广泛用于度量两个变量之间的相关程度。它是由卡尔·皮尔逊弗朗西斯·高尔顿在19世纪80年代提出的一个相似却又稍有不同的想法演变而来的。[2][3]这个相关系数也称作“皮尔森相关系数r”。

Wikipedia:http://zh.wikipedia.org/zh/皮尔逊积矩相关系数

二、简单相关系数的公式

两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差标准差的商:

以上方程定义了总体相关系数, 一般表示成希腊字母ρ(rho)。基于样本对协方差和标准差进行估计,可以得到样本相关系数,
一般表示成r:

一种等价表达式的是表示成标准分的均值。基于(Xi, Yi)的样本点,样本皮尔逊系数是

其中

 及 

分别是标准分、样本平均值和样本标准差

Wikipedia:http://zh.wikipedia.org/zh/皮尔逊积矩相关系数

相关关系是一种非确定性的关系,相关系数是研究变量之间线性相关程度的量。由于研究对象的不同,相关系数有如下几种定义方式。

相关系数公式

简单相关系数:又叫相关系数或线性相关系数,一般用字母P 表示,用来度量两个变量间的线性关系。

复相关系数:又叫多重相关系数。复相关是指因变量与多个自变量之间的相关关系。例如,某种商品的季节性需求量与其价格水平、职工收入水平等现象之间呈现复相关关系。

典型相关系数:是先对原来各组变量进行主成分分析,得到新的线性关系的综合指标,再通过综合指标之间的线性相关系数来研究原各组变量间相关关系。

百度百科:http://baike.baidu.com/view/172091.htm

三、代码实现:

(1)NumeratorCalculate类实现分式的分子计算;

(2)DenominatorCalculate类实现分式的分母计算;

(3)CallClass类调用上面的方法。

代码一:NumeratorCalculate类

/**
 *
 */
package numerator.pearson.conefficient;

import java.util.ArrayList;
import java.util.List;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @author alan-king
 *
 * the class is going to calculate the numerator;
 *
 *
 */
public class NumeratorCalculate {

	//add global varieties
	protected List<String> xList , yList;

	public NumeratorCalculate(List<String> xList ,List<String> yList){
		this.xList = xList;
		this.yList = yList;
	}

	/**
	 * add operate method
	 */
	public double calcuteNumerator(){
		double result =0.0;
		double xAverage = 0.0;
		double temp = 0.0;

		int xSize = xList.size();
		for(int x=0;x<xSize;x++){
			temp += Double.parseDouble(xList.get(x));
		}
		xAverage = temp/xSize;

		double yAverage = 0.0;
		temp = 0.0;
		int ySize = yList.size();
		for(int x=0;x<ySize;x++){
			temp += Double.parseDouble(yList.get(x));
		}
		yAverage = temp/ySize;

		//double sum = 0.0;
		for(int x=0;x<xSize;x++){
			result+=(Double.parseDouble(xList.get(x))-xAverage)*(Double.parseDouble(yList.get(x))-yAverage);
		}
		return result;
	}
}

代码二:DenominatorCalculate类

/**
 *
 */
package numerator.pearson.conefficient;

import java.util.List;

/**
 * @author alan-king
 *
 */
public class DenominatorCalculate {

	//add denominatorCalculate method
	public double calculateDenominator(List<String> xList,List<String> yList){
		double standardDifference = 0.0;
		int size = xList.size();
		double xAverage = 0.0;
		double yAverage = 0.0;
		double xException = 0.0;
		double yException = 0.0;
		double temp = 0.0;
		for(int i=0;i<size;i++){
			temp += Double.parseDouble(xList.get(i));
		}
		xAverage = temp/size;

		for(int i=0;i<size;i++){
			temp += Double.parseDouble(yList.get(i));
		}
		yAverage = temp/size;

		for(int i=0;i<size;i++){
			xException += Math.pow(Double.parseDouble(xList.get(i))-xAverage,2);
			yException += Math.pow(Double.parseDouble(yList.get(i))-yAverage, 2);
		}
		//calculate denominator of
		return standardDifference = Math.sqrt(xException*yException);
	}
}

代码三:CallClass类

/**
 *
 */
package numerator.pearson.conefficient;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
 * @author alan-king
 *
 */
public class CallClass {

	public static void main(String[] args) throws IOException{
		double CORR = 0.0;
		List<String> xList = new ArrayList<String>();;
		List<String> yList = new ArrayList<String>();

		System.out.println("Please input your X's varieties and Y's varieties\r"+
							"differnt line,then you should key into \"s\" to end the inputing operator!");

		//initial varieties for xList,yList;
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str =null;
		boolean flag = false;
		while(!(str=br.readLine()).equals("s")){
			String[] vStr = str.split(",");
			int size = vStr.length;
			if(flag == false){
				for(int i=0;i<size;i++){
					xList.add(i, vStr[i]);
				}
				flag = true;
			}else if(flag == true){
				for(int i=0;i<size;i++){
					yList.add(i, vStr[i]);
				}
				flag = false;
			}

		}

		NumeratorCalculate nc = new NumeratorCalculate(xList,yList);
		double numerator = nc.calcuteNumerator();
		DenominatorCalculate dc = new DenominatorCalculate();
		double denominator = dc.calculateDenominator(xList, yList);
		CORR = numerator/denominator;
		System.out.println("We got the result by Calculating:");
		System.out.printf("CORR = "+CORR);
	}
}

四、输出结果:如下图

时间: 2024-11-05 22:32:09

Pearson product-moment correlation coefficient in java(java的简单相关系数算法)的相关文章

java研究一个简单的算法碰到这种输出,哎,以前还真没注意还能这样......

求大神指定这种运行原理叫什么????? package org.rui.util; import java.util.HashMap; import java.util.Map; public class A { public static void main(String[] args) { Map<String, String> m = new HashMap<String, String>(); Map m2 = m; m2.put("a", "

Spearman&#39;s rank correlation coefficient 和 Pearson correlation coefficient详细

In statistics, Spearman's rank correlation coefficient or Spearman's rho, named after Charles Spearman and often denoted by the Greek letter (rho) or as , is a nonparametric measure of statistical dependence between two variables. It assesses how wel

皮尔逊相关系数(Pearson Correlation Coefficient, Pearson&#39;s r)

Pearson's r,称为皮尔逊相关系数(Pearson correlation coefficient),用来反映两个随机变量之间的线性相关程度. 用于总体(population)时记作ρ (rho)(population correlation coefficient): 给定两个随机变量X,Y,ρ的公式为:  其中:   是协方差 是X的标准差 是Y的标准差 用于样本(sample)时记作r(sample correlation coefficient): 给定两个随机变量x,y,r的公

皮尔逊相关系数与余弦相似度(Pearson Correlation Coefficient &amp; Cosine Similarity)

之前<皮尔逊相关系数(Pearson Correlation Coefficient, Pearson's r)>一文介绍了皮尔逊相关系数.那么,皮尔逊相关系数(Pearson Correlation Coefficient)和余弦相似度(Cosine Similarity)之间有什么关联呢? 首先,我们来看一下什么是余弦相似度.说到余弦相似度,就要用到余弦定理(Law of Cosine). 假设两个向量和之间的夹角为.,向量的长度分别是和,对应的边长为向量减去向量的长度,也就是. 根据余弦

Java中的简单浮点数类型float和double不能够进行精确运算

在java中,简单的浮点类型float和double是不能够进行运算.我们先看下面的两个程序代码: 代码一: import java.util.Scanner; class Circle { double radius; static final double PI=3.14; public Circle(){this.radius=0;} public Circle(double r){this.radius=r;} public double getArea(){return PI*this

Java哈希散列算法简介 - MD5 &amp; SHA-512

Java哈希散列算法简介 - MD5 & SHA-512 在日常的开发工作中,我们常常会碰到这样的一个场景:我们需要有一种可靠的行之有效的方法来检验跟判断数据在传输过程当中的完整性.最常见的一种情况就是当我们传输文件的时候,由于网络故障或者其他的一些因素,可能会出现我们下载下来的文件不完整,这给我们日常的开发和维护带了一些难题:另外的一个较为常用的场景就是:有没有一种行之有效的方法让我们可以很方便的判断服务器上的文件是不是有最新的数据更新,比如我们现在的移动Hybird App开发,我们经常会发

二、Java语言的简单认识及Hello World示例

1. Java语言的简单认识 (1) Java有三个版本: a. JAVA SE (以前称J2SE):Standard Environment 标准版本: b. JAVA EE (以前称J2EE):Enterprise Environment 企业版: c. JAVA ME (以前称J2ME):Eicro Environment 微型版; (2) Java的安装目录 在前一讲中,提到安装目录中有两个文件夹,分别是jdk1.7.0_45和jre7.在"jdk1.7.0_45"文件夹的bi

[Java]#从头学Java# Java大整数相加

重操旧业,再温Java,写了个大整数相乘先回顾回顾基本知识.算法.效率什么的都没怎么考虑,就纯粹实现功能而已. 先上代码: 1 package com.tacyeh.common; 2 3 public class MyMath { 4 5 public static String BigNumSum(String... n) { 6 int length = n.length; 7 StringBuilder result = new StringBuilder(); 8 //这里判断其实不需

php与java通用AES加密解密算法

php与java通用AES加密解密算法 AES指高级加密标准(Advanced Encryption Standard),是当前最流行的一种密码算法,在web应用开发,特别是对外提供接口时经常会用到,下面是我整理的一套php与java通用的AES加密解密算法. php版代码如下: <?php class CryptAES { protected $cipher = MCRYPT_RIJNDAEL_128; protected $mode = MCRYPT_MODE_ECB; protected