Mercurial > hg > ltpda
view m-toolbox/classes/+utils/@math/spcorr.m @ 43:bc767aaa99a8
CVS Update
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Tue, 06 Dec 2011 11:09:25 +0100 |
parents | f0afece42f48 |
children |
line wrap: on
line source
% SPCORR calculate Spearman Rank-Order Correlation Coefficient %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Description: % % SPCORR calculates Spearman Rank-Order Correlation Coefficient % % CALL: % [rs,pValue,TestRes] = spcorr(y1,y2,alpha) % % INPUT: % - y1 and y2 are data series % - alpha is the significance level. Default 0.05 % % OUTPUT: % - rs: Spearman rank-order correlation coefficient % - pValue: Probability associated with the calculated rs in the % hypothesis that the correlation between y1 and y2 is zero % - TestRes: True or false on the basis of the test results. The null % hypothesis for the test is that the two series y1 and y2 are % uncorrelated. % TestRes = 0 => Do not reject the null hypothesis at significance % level alpha. (pValue >= alpha) % TestRes = 1 => Reject the null hypothesis at significance level % alpha. (pValue < alpha) % % NOTE: % The statistic of Spearman rank-order correlation coefficient is % well approximated by a Student t distribution. Hypothesis test is % then based on such statistic. % % References: % [1] W. H. Press, S. A. Teukolsky, W. T. Vetterling, B. P. Flannery, % Numerical Recipes 3rd Edition: The Art of Scientific Computing, % Cambridge University Press; 3 edition (September 10, 2007) % % % L Ferraioli 06-12-2010 % % $Id: spcorr.m,v 1.2 2011/07/06 14:42:26 luigi Exp $ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [rs,pValue,TestRes] = spcorr(y1,y2,alpha) % check size if size(y1)~=size(y2) error('y1 and y2 must have the same size') end % check input if isempty(alpha) alpha = 0.05; elseif alpha > 1 alpha = alpha/100; end % calculate rank for y1 and y2 [r1,s1] = utils.math.crank(y1); [r2,s2] = utils.math.crank(y2); n = numel(y1); dv = (r1-r2).^2; dd = sum(dv); en = n*n*n-n; sq1 = sqrt(1-s1/en); sq2 = sqrt(1-s2/en); % calculate Spearman rank-order correlation coefficient rs = (1 - 6*(dd + s1/12 + s2/12)/en)/(sq1*sq2); % transform rs in t which is according Student's distribution with n-2 % degrees of freedom t = rs*sqrt((n-2)/(1-rs^2)); % Indicated with f(x) the prob. distribution function (Student's t in the % present caase). The probability Pr(k <= t) is proportional to the % integral Int_(-t,t)[f(x)dx]. For a Student's distribution such integral % is represeted by the Beta incomplete function % Pr(k <= t) = betainc(df/(df+t^2),df/2,1/2,'upper') % As a consequence Pr(k > t) = 1 - Pr(k <= t) which in Matlab can be % effectively calculated as % Pr(k > t) = betainc(df/(df+t^2),df/2,1/2,'lower') % Which provides the probability of finding a value grater than t if our % variable k is distributed according to a Student's distribution with df % degrees of freedom. Such a value represent the required pValue for the % test in the hypothesis that the two input data series are uncorrelated fac = (rs+1)*(1-rs); if fac>0 df = n-2; pValue = betainc(df/(df+t*t),0.5*df,0.5,'lower'); else pValue = 0; end TestRes = (pValue < alpha); end