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

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

二、简单相关系数的公式

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

\rho_{X,Y}={\mathrm{cov}(X,Y) \over \sigma_X \sigma_Y} ={E[(X-\mu_X)(Y-\mu_Y)] \over \sigma_X\sigma_Y},

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

r = \frac{\sum ^n _{i=1}(X_i - \bar{X})(Y_i - \bar{Y})}{\sqrt{\sum ^n _{i=1}(X_i - \bar{X})^2} \sqrt{\sum ^n _{i=1}(Y_i - \bar{Y})^2}}.

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

r = \frac{1}{n-1} \sum ^n _{i=1} \left( \frac{X_i - \bar{X}}{\sigma_X} \right) \left( \frac{Y_i - \bar{Y}}{\sigma_Y} \right)

其中

\frac{X_i - \bar{X}}{\sigma_X}\bar{X} 及  \sigma_X

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

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


相关关系是一种非确定性的关系,相关系数是研究变量之间 线性相关程度的量。由于研究对象的不同,相关系数有如下几种定义方式。
Pearson product-moment correlation coefficient in java(java的简单相关系数算法)_第1张图片

相关系数公式

简单相关系数:又叫相关系数或线性相关系数,一般用字母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 xList , yList;
	
	public NumeratorCalculate(List xList ,List 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

代码二: DenominatorCalculate类
/**
 * 
 */
package numerator.pearson.conefficient;

import java.util.List;

/**
 * @author alan-king
 *
 */
public class DenominatorCalculate {
	
	//add denominatorCalculate method
	public double calculateDenominator(List xList,List 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

代码三: 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 xList = new ArrayList();;
		List yList = new ArrayList();
		
		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;iPearson product-moment correlation coefficient in java(java的简单相关系数算法)_第2张图片 
    


你可能感兴趣的:(数学——概率与统计)