相关分析
相关分析是考察两个变量之间线性关系的统计方法,用于测定两个变量因子的相关度。 但是请记住,相关性不等于因果性。 结合下图中的txt格式文件,了解相关分析。
两个重要因素
从非常直观的分析思路来说,比如分析身高和体重的话.身高越高体重越重吗? 问题被细分为两个方向。 1、身高越高,体重越重或越轻。 2、身高每增加1,体重会增加或减少多少呢? 这是关联性的两个重要因素。 相关方向和相关强度。 对于相关方向,可以很好地理解的是,是正相关、负相关还是无关。 对于问题2,每个人定义相关强度的思想都不同。
皮尔森相关系数
皮尔逊相关系数均被称为皮尔逊乘积矩相关系数,该系数被广泛用于测量两个变量之间的相关度。 这是xjwd由lhzdxlb在十九世纪八十年代提出的相似但略有不同的思想发展而来的.定义公式如下:
试着根据Matlab代码计算身高和体重的pearson系数吧。
Functioncoeff=Pearsoncoeff(x,y ) %目的:计算数值序列x和y的皮尔森相关系数
%
%输入:计算数值序列x和y
%输出: coeff数值序列x和y的皮尔森相关系数
iflength(x ) (=length (y ) ) ) ) ) ) ) ) )。
错误'输入的序列长度不同')
结束
a=sum((x-mean ) x ) ).* ) y-mean ) y ) ); %分子
b=sqrt(sum(x-mean ) x ) ).^2) sum ) y-mean ) ); %分母
coeff=a/b;
结束
功能处理
filename=' c :usersAndrewdesktopchild.txt ';
delimiter='t ';
formatSpec='%s%f%f%f%[^nr] ';
fileid=fopen(filename,' r ' );
dataarray=textscan(fileid,formatSpec,' Delimiter ',Delimiter,' ReturnOnError ',false );
close (文件);
% a=data array { :1 }; %name
high=data array { :2 };
weight=data array { :3 };
% score=data array { :4 };
%计算身高和体重的相关系数
corofhw=Pearsoncoeff(high,weight ) ) ) ) ) ) )。
结束
得到:
corOfHW=0.6124
Spearman等级相关系数:
具体函数的定义可以参考文献1。 以下,对思想进行简单说明。 A的身高是149,在身高的队列中排名是1 (最低)。 同样,后面的参数称为变量的秩。 Spearman等级相关系数(rho )如下。
其中累计di平方为A身高等级减去体重等级的平方和B身高等级减去体重等级的平方。 请参阅。 请参阅。 请参阅。 请参阅。 请参阅。 请参阅。 研究表明,spearman等级相关系数与具体数值无关,与其中的等级有关,无法准确测定指标值,只能通过重要性、名词前后等等级参数来确定之间的相关度。
经计算,得到0.7395
SparkMLlib计算相关系数:
基本包
importorg.Apache.spark.ml lib.Lina LG.vectors
importorg.Apache.spark.ml lib.stat.statistics
importorg.Apache.spark.{ spark conf,SparkContext}
/* * createdbylegotimeon 2016/4/8.*/object correlations {
efmain(Args:Array[string] )
valspar kconf=newsparkconf (.set appname (' correlations ).set master (' local ) ) )。
valsc=newsparkcontext (spark conf ) )。
valrdd1=sc.parallelize (
Array (
阵列(1.0、2.0、3.0、4.0 )、阵列(2.0、3.0、4.0、5.0 )、6.0 ) )
) )
).map(f=vectors.dense ) f ) )
//package org.Apache.spark.ml lib.stat下的一些基本操作val summary=statistics.colstats (rd D1 ) ) ) ) )。
println(summary.mean )/adensevectorcontainingthemeanvalueforeachcolumn的每列平均值println (summary.variance )/column-) 列方差println(summary.numnonzeros )//number of nonzeros in each column每个列有非零数量的println (summary.norml2) /双范数println ) sumn 二范数========================计算相关系数==============计算相关系数=============二范数=
valr dd3=sc.parallelize (array (81.0,88.0,87.0,99.0,91.0,89.0,95.0,90.0 ) )
println(rdd2: ) rdd2 ) )。
rdd2.collect ().foreach (println ) )。
//val correlation 13360 double=statistics.corr (rd D2,rdd3,“pearson”)//省时,默认值为pearson相关系数val correlation 13360 DD
println(Pearson相关系数校正1 ) )。
//pearson相关系数: 0.612403056141675 val correlation 2: double=statistics.corr (rd D2,rdd3,' spearman ' ) ) ) ) )
println(Spearman相关系数(correlation2) )。
//spearman相关系数: 0.7395161835775294sc.stop () )。
() ) ) ) )。
() ) ) ) )。
结束了
参考文献
1:http://blog.csdn.net/wsy wl/article/details/5859751
非常感谢