一、什么是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);
}
}

四、输出结果:例如以下图




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

  1. Java实现三大简单排序算法

    一.选择排序 public static void main(String[] args) { int[] nums = {1,2,8,4,6,7,3,6,4,9}; for (int i=0; i& ...

  2. [Statistics] Comparison of Three Correlation Coefficient: Pearson, Kendall, Spearman

    There are three popular metrics to measure the correlation between two random variables: Pearson's c ...

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

    之前<皮尔逊相关系数(Pearson Correlation Coefficient, Pearson's r)>一文介绍了皮尔逊相关系数.那么,皮尔逊相关系数(Pearson Corre ...

  4. 皮尔逊相关系数(Pearson Correlation Coefficient, Pearson's r)

    Pearson's r,称为皮尔逊相关系数(Pearson correlation coefficient),用来反映两个随机变量之间的线性相关程度. 用于总体(population)时记作ρ (rh ...

  5. 【ML基础】皮尔森相关系数(Pearson correlation coefficient)

    前言 参考 1. 皮尔森相关系数(Pearson correlation coefficient): 完

  6. Java设计模式学习——简单工厂

    一. 定义与类型 定义:有工程对象决定创建出哪一种产品类的实例 类型:创建型,但不属于GOF23中设计模式 二. 适用场景 工厂类负责创建的对象比较少 客户端(应用层)只知道传入工厂类的参数,对于如何 ...

  7. Java判断回文数算法简单实现

    好久没写java的代码了, 今天闲来无事写段java的代码,算是为新的一年磨磨刀,开个头,算法是Java判断回文数算法简单实现,基本思想是利用字符串对应位置比较,如果所有可能位置都满足要求,则输入的是 ...

  8. Java中常用的查找算法——顺序查找和二分查找

    Java中常用的查找算法——顺序查找和二分查找 神话丿小王子的博客 一.顺序查找: a) 原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数据最后一位 ...

  9. Java 异步处理简单实践

    Java 异步处理简单实践 http://www.cnblogs.com/fangfan/p/4047932.html 同步与异步 通常同步意味着一个任务的某个处理过程会对多个线程在用串行化处理,而异 ...

随机推荐

  1. MyBatis配置文件中报错:URI is not registered(Settings | Languages & Frameworks | Schemas and DTDs)

    如下错误: 解决办法: 在file->Settings中添加如下图所示: URI为出现红色部分的地址 点击OK后会发现: 这样就解决了!

  2. Python封装与隐藏

      今日内容: 1.封装与隐藏2.property3.绑定方法与非绑定方法 知识点一:封装与隐藏 1.什么封装:   封:属性对外是隐藏的,但对内是开放的   装:申请一个名称空间,往里装入一系列名字 ...

  3. 衡量线性回归法的指标MSE, RMSE,MAE和R Square

    衡量线性回归法的指标:MSE, RMSE和MAE 举个栗子: 对于简单线性回归,目标是找到a,b 使得尽可能小 其实相当于是对训练数据集而言的,即 当我们找到a,b后,对于测试数据集而言 ,理所当然, ...

  4. 利用Solr的post工具对核心my_core执行删除操作

    <delete> <query>*:*</query> </delete> 将上面代码保存到delete_all.xml文件中,并使用Solr的post ...

  5. java EE技术体系——CLF平台API开发注意事项(3)——API安全访问控制

    前言:提离职了,嗯,这么多年了,真到了提离职的时候,心情真的很复杂.好吧,离职阶段需要把一些项目中的情况说明白讲清楚,这篇博客就简单说一下在平台中对API所做的安全处理(后面讲网关还要说,这里主要讲代 ...

  6. WIN下C开发环境搭建

    安装编译器 MinGW提供了一套简单方便的Winodows下的基于GCC程序开发环境 官网下载安装 http://www.mingw.org/ 打开后选择basic setup的package Ins ...

  7. Swagger Edit自动生成代码工具

    一.swagger简介 swagger是一套开源的API设计工具,包括Swagger UI和Swagger Editor等.其中swagger edit是用来编辑接口文档的小程序,非常简单易用.在官网 ...

  8. HDU——1213How Many Tables(并查集按秩合并)

    J - How Many Tables Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u ...

  9. 模拟tap事件和longTap事件

    移动端模拟tap和longTap事件,基本原理就是在touchstart和touchend事件中,计算触摸的位移和时间差,位移在一定范围内(轻微滑动),时间小于150ms为tap事件,时间大于300m ...

  10. 算法复习——区间dp

    感觉对区间dp也不好说些什么直接照搬讲义了2333 例题: 1.引水入城(洛谷1514) 这道题先开始看不出来到底和区间dp有什么卵关系···· 首先肯定是bfs暴力判一判可以覆盖到哪些城市····无 ...