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年代提出的一个相似却又稍有不同的想法演变而来的。
Wikipedia:http://zh.wikipedia.org/zh/皮尔逊积矩相关系数
二、简单相关系数的公式
两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差和标准差的商:
以上方程定义了整体相关系数, 一般表示成希腊字母ρ(rho)。基于样本对协方差和标准差进行预计,能够得到样本相关系数,
一般表示成r:
一种等价表达式的是表示成标准分的均值。
基于(Xi, Yi)的样本点。样本皮尔逊系数是
当中
-
、
及 
Wikipedia:http://zh.wikipedia.org/zh/皮尔逊积矩相关系数
相关系数公式
简单相关系数:又叫相关系数或线性相关系数。一般用字母P 表示。用来度量两个变量间的线性关系。
百度百科:http://baike.baidu.com/view/172091.htm
三、代码实现:
/**
*
*/
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的简单相关系数算法)的更多相关文章
- Java实现三大简单排序算法
一.选择排序 public static void main(String[] args) { int[] nums = {1,2,8,4,6,7,3,6,4,9}; for (int i=0; i& ...
- [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 ...
- 皮尔逊相关系数与余弦相似度(Pearson Correlation Coefficient & Cosine Similarity)
之前<皮尔逊相关系数(Pearson Correlation Coefficient, Pearson's r)>一文介绍了皮尔逊相关系数.那么,皮尔逊相关系数(Pearson Corre ...
- 皮尔逊相关系数(Pearson Correlation Coefficient, Pearson's r)
Pearson's r,称为皮尔逊相关系数(Pearson correlation coefficient),用来反映两个随机变量之间的线性相关程度. 用于总体(population)时记作ρ (rh ...
- 【ML基础】皮尔森相关系数(Pearson correlation coefficient)
前言 参考 1. 皮尔森相关系数(Pearson correlation coefficient): 完
- Java设计模式学习——简单工厂
一. 定义与类型 定义:有工程对象决定创建出哪一种产品类的实例 类型:创建型,但不属于GOF23中设计模式 二. 适用场景 工厂类负责创建的对象比较少 客户端(应用层)只知道传入工厂类的参数,对于如何 ...
- Java判断回文数算法简单实现
好久没写java的代码了, 今天闲来无事写段java的代码,算是为新的一年磨磨刀,开个头,算法是Java判断回文数算法简单实现,基本思想是利用字符串对应位置比较,如果所有可能位置都满足要求,则输入的是 ...
- Java中常用的查找算法——顺序查找和二分查找
Java中常用的查找算法——顺序查找和二分查找 神话丿小王子的博客 一.顺序查找: a) 原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数据最后一位 ...
- Java 异步处理简单实践
Java 异步处理简单实践 http://www.cnblogs.com/fangfan/p/4047932.html 同步与异步 通常同步意味着一个任务的某个处理过程会对多个线程在用串行化处理,而异 ...
随机推荐
- 了解JavaScript核心精髓(一)
ES5 1.声明脚本 <script type="text/javascript"></script> 2.DOM与BOM DOM(Document Obj ...
- windows :Tomcat免安装版环境变量配置 + jdk配置
1. 下载后解压,我解压的目录为:D:\Tomcat\apache-tomcat-9.0.1-windows-x64 2. 安装jdk和jre, 并配置环境变量: 2.1 用户变量新建JAVA_H ...
- Python 爬取图书图片和地址
#-*- coding:utf-8 -*- import xlwt import urllib import re def getHtml(url): page = urllib.urlopen(ur ...
- 2018"百度之星"程序设计大赛 - 资格赛
调查问卷 Accepts: 1546 Submissions: 6596 Time Limit: 6500/6000 MS (Java/Others) Memory Limit: 262144 ...
- 在Python中建立N维数组并赋初值
在Python中,由于不像C++/Java这样的语言可以方便的用a[i][j]=0的方式,建立二维数组并赋初值,所以需要一个相对巧妙的方法. 可以用列表解析的方式,eg: >>> m ...
- Linux Shell系列教程之(九)Shell判断 if else 用法
本文是Linux Shell系列教程的第(九)篇,更多shell教程请看:Linux Shell系列教程 判断语句是每个语言都必不可少的关键语法,Shell命令当然也不例外.今天就给大家介绍下Shel ...
- hdu6097[二分+解析几何] 2017多校6
/*hdu6097[二分+解析几何] 2017多校6*/ #include <bits/stdc++.h> using namespace std; ; struct node{ doub ...
- <定时主库导出/备库导入>
1.设置定时任务时间及所需要的dmp文件路径 [mm1@localhost ~]$ crontab -e 0 0 * * * sh /home/mm1/exp_table.sh 2>& ...
- django获取前端有multiple属性的select的多选项
author_list = request.POST.getlist('author_list') ###
- K3Cloud调用存储过程
SQLScriptServiceHelper.GetDataFromStoredProc( this.Context, DatabaseType.Oracle, "/*dialect*/TJ ...


