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 同步与异步 通常同步意味着一个任务的某个处理过程会对多个线程在用串行化处理,而异 ...
随机推荐
- jenkins 之 Android 打包及上传至蒲公英
准备条件 iMAC,非必须(如果是 安卓 和 苹果 可以在同一台电脑上打包则要 Mac OS 系统的电脑,如果是只是给安卓打包 windows 电脑也是可以的, window 下 需要把 ls 换成 ...
- luogu3370 【模板】字符串哈希
#include <algorithm> #include <iostream> #include <cstring> #include <cstdio> ...
- 十分钟了解socket
socket通讯方式------socket是TCP/IP协议的网络数据通讯接口(一种底层的通讯的方式).socket是IP地址和端口号的组合.例如:192.168.1.100:8080 原理就是TC ...
- [办公软件篇][3]windows软件安装
http://www.jeffjade.com/2015/10/19/2015-10-18-Efficacious-win-software/
- Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2) A. The King's Race
http://codeforces.com/contest/1075/problem/A On a chessboard with a width of nn and a height of nn, ...
- 【bzoj3751】[NOIP2014]解方程 数论
题目描述 已知多项式方程: a0+a1*x+a2*x^2+...+an*x^n=0 求这个方程在[1,m]内的整数解(n和m均为正整数). 输入 第一行包含2个整数n.m,每两个整数之间用一个空格隔开 ...
- 关于 lambda expression 返回值的类型转换
lambda expression(lambda 表达式,$\lambda$ 表达式) 是 C++ 11 引入的特性. 一般而言,lambda 表达式的返回值类型可不指定,而由返回值推断. 需要注意的 ...
- Codeforces Round #345 (Div. 2)——B. Beautiful Paintings(贪心求上升序列个数)
B. Beautiful Paintings time limit per test 1 second memory limit per test 256 megabytes input standa ...
- [luoguP3302] [SDOI2013]森林(主席树 + 启发式合并 + lca)
传送门 显然树上第k大直接主席树 如果连边的话,我们重构小的那一棵,连到另一棵上. 说起来简单,调了我一晚上. 总的来说3个错误: 1.离散化写错位置写到了后面 2."="写成了& ...
- 病毒(bzoj 2938)
Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...


