如果有兩個變量:X、Y,最終計算出的相關系數的含義可以有如下理解:
(1)、當相關系數為0時,X和Y兩變量無關系。
(2)、當X的值增大(減小),Y值增大(減小),兩個變量為正相關,相關系數在0.00與1.00之間。
(3)、當X的值增大(減小),Y值減小(增大),兩個變量為負相關,相關系數在-1.00與0.00之間。
相關系數的絕對值越大,相關性越強,相關系數越接近於1或-1,相關度越強,相關系數越接近於0,相關度越弱。
通常情況下通過以下取值范圍判斷變量的相關強度:相關系數
0.8-1.0 極強相關
0.6-0.8 強相關
0.4-0.6 中等程度相關
0.2-0.4 弱相關
0.0-0.2 極弱相關或無相關
皮爾遜相關
在統計學中,皮爾遜積矩相關系數(英語:Pearson product-moment correlation coefficient,又稱作 PPMCC或PCCs[1], 文章中常用r或Pearson's r表示)
也稱為積差相關(或積矩相關)是英國統計學家皮爾遜於20世紀提出的一種計算直線相關的方法。
假設有兩個變量X、Y,那么兩變量間的皮爾遜相關系數可通過以下公式計算:
function coeff = myPearson(X , Y) % 本函數實現了皮爾遜相關系數的計算操作 % % 輸入: % X:輸入的數值序列 % Y:輸入的數值序列 % % 輸出: % coeff:兩個輸入數值序列X,Y的相關系數 % if length(X) ~= length(Y) error('兩個數值數列的維數不相等'); return; end fenzi = sum(X .* Y) - (sum(X) * sum(Y)) / length(X); fenmu = sqrt((sum(X .^2) - sum(X)^2 / length(X)) * (sum(Y .^2) - sum(Y)^2 / length(X))); coeff = fenzi / fenmu; end %函數myPearson結束
也可以使用Matlab中已有的函數計算皮爾遜相關系數:
而且不需要提前zscore(),因為自動會標准化(加了zscore和沒加zscore結果是一樣的)
coeff = corrcoef(X , Y);
或者直接使用:rst1=rst1+corr(rawdata(:,1),rawdata(:,i),'type','Pearson');
Spearman's rank correlation coefficient,也稱為。在統計學中,斯皮爾曼等級相關系數以Charles Spearman命名,並經常用希臘字母ρ(rho)表示其值。斯皮爾曼等級相關系數用來估計兩個變量X、Y之間的相關性,其中變量間的相關性可以使用單調函數來描述。如果兩個變量取值的兩個集合中均不存在相同的兩個元素,那么,當其中一個變量可以表示為另一個變量的很好的單調函數時(即兩個變量的變化趨勢相同),兩個變量之間的ρ可以達到+1或-1。
設兩個隨機變量分別為X、Y(也可以看做兩個集合),它們的元素個數均為N,兩個隨即變量取的第i(1<=i<=N)個值分別用Xi、Yi表示。對X、Y進行排序(同時為升序或降序),得到兩個元素排行集合x、y,其中元素xi、yi分別為Xi在X中的排行以及Yi在Y中的排行。將集合x、y中的元素對應相減得到一個排行差分集合d,其中di=xi-yi,1<=i<=N。隨機變量X、Y之間的斯皮爾曼等級相關系數可以由x、y或者d計算得到,其計算方式如下所示:
由排行差分集合d計算而得(公式一):
由排行集合x、y計算而得(斯皮爾曼等級相關系數同時也被認為是經過排行的兩個隨即變量的皮爾遜相關系數,以下實際是計算x、y的皮爾遜相關系數)(公式二):

以下是一個計算集合中元素排行的例子(僅適用於斯皮爾曼等級相關系數的計算)
適用范圍
斯皮爾曼等級相關系數對數據條件的要求沒有皮爾遜相關系數嚴格,只要兩個變量的觀測值是成對的等級評定資料,或者是由連續變量觀測資料轉化得到的等級資料,不論兩個變量的總體分布形態、樣本容量的大小如何,都可以用斯皮爾曼等級相關系數來進行研究。
Matlab實現
依據排行差分集合d計算,使用上面的公式一
function coeff = mySpearman(X , Y) % 本函數用於實現斯皮爾曼等級相關系數的計算操作 % % 輸入: % X:輸入的數值序列 % Y:輸入的數值序列 % % 輸出: % coeff:兩個輸入數值序列X,Y的相關系數 if length(X) ~= length(Y) error('兩個數值數列的維數不相等'); return; end N = length(X); %得到序列的長度 Xrank = zeros(1 , N); %存儲X中各元素的排行 Yrank = zeros(1 , N); %存儲Y中各元素的排行 %計算Xrank中的各個值 for i = 1 : N cont1 = 1; %記錄大於特定元素的元素個數 cont2 = -1; %記錄與特定元素相同的元素個數 for j = 1 : N if X(i) < X(j) cont1 = cont1 + 1; elseif X(i) == X(j) cont2 = cont2 + 1; end end Xrank(i) = cont1 + mean([0 : cont2]); end %計算Yrank中的各個值 for i = 1 : N cont1 = 1; %記錄大於特定元素的元素個數 cont2 = -1; %記錄與特定元素相同的元素個數 for j = 1 : N if Y(i) < Y(j) cont1 = cont1 + 1; elseif Y(i) == Y(j) cont2 = cont2 + 1; end end Yrank(i) = cont1 + mean([0 : cont2]); end %利用差分等級(或排行)序列計算斯皮爾曼等級相關系數 fenzi = 6 * sum((Xrank - Yrank).^2); fenmu = N * (N^2 - 1); coeff = 1 - fenzi / fenmu; end %函數mySpearman結束
源程序二:
使用Matlab中已有的函數計算斯皮爾曼等級相關系數(使用上面的公式二)
coeff = corr(X , Y , 'type' , 'Spearman');

參考鏈接(http://www.ilovematlab.cn/thread-47107-1-1.html)
price = [135,142,156,165,170,220,225,275,300,450];%原始數據 w=[95.3329,126.2888,152.0854,177.8820,203.6786,229.4753,255.2719,281.0685,332.6617,384.2549];%1階擬合數據 std(abs(w-price)) RMSe=sqrt(sum((w-price).^2)/10)
MAE(平均絕對誤差)

參考鏈接
