一、什么是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/皮爾遜積矩相關系數
百度百科: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);
}
}
四、輸出結果:例如以下圖

