我有兩個向量:兩個向量之間的相關性?
A_1 =
10
200
7
150
A_2 =
0.001
0.450
0.0007
0.200
我想知道是否有這兩個向量之間的相關性。
我可以減去每個值的均值向量的和比做:
A_1' * A_2
有什麼更好的辦法?
我有兩個向量:兩個向量之間的相關性?
A_1 =
10
200
7
150
A_2 =
0.001
0.450
0.0007
0.200
我想知道是否有這兩個向量之間的相關性。
我可以減去每個值的均值向量的和比做:
A_1' * A_2
有什麼更好的辦法?
考慮:
A_1 = [10 200 7 150]';
A_2 = [0.001 0.450 0.007 0.200]';
(正如其他人已經指出的那樣),有工具來簡單計算的相關性,最明顯的是corr
:
corr(A_1, A_2); %Returns 0.956766573975184 (Requires stats toolbox)
您還可以使用基地Matlab的corrcoef
功能,如這個:
M = corrcoef([A_1 A_2]): %Returns [1 0.956766573975185; 0.956766573975185 1];
M(2,1); %Returns 0.956766573975184
哪個接近LY相關cov
功能:
cov([condition(A_1) condition(A_2)]);
當你幾乎得在你原來的問題,你可以擴展,如果你想,這給了一個稍微好一點的理解是怎麼回事的自行調整向量。首先創建一個條件函數中減去平均值,和通過標準偏差除以:
condition = @(x) (x-mean(x))./std(x); %Function to subtract mean AND normalize standard deviation
則相關似乎是(A_1 * A_2)/(A_1^2),如下所示:
(condition(A_1)' * condition(A_2))/sum(condition(A_1).^2); %Returns 0.956766573975185
根據對稱性,這也應該工作
(condition(A_1)' * condition(A_2))/sum(condition(A_2).^2); %Returns 0.956766573975185
而且它。
我相信,但現在還沒有能力來確認,在處理多維度輸入時,只要處理時要小心,同樣的數學可用於計算相關性和互相關項,輸入陣列的尺寸和方向。
嘗試xcorr
,它在MATLAB內置的功能互相關:
c = xcorr(A_1, A_2);
但是,請注意,它需要安裝Signal Processing Toolbox。否則,您可以查看corrcoef
命令。
爲什麼不使用常規corr? –
@DennisJaheruddin不同的工具箱...土豆,土豆。 –
對於相關性,你可以只使用CORR函數(統計工具箱)
corr(A_1(:), A_2(:))
請注意,您也可以只用
corr(A_1, A_2)
但線性索引保證您的載體不需要轉置。
+1:你應該提到,這需要統計工具箱:) –
要兩個向量x
和y
按照下列步驟之間執行線性迴歸:
[p,err] = polyfit(x,y,1); % First order polynomial
y_fit = polyval(p,x,err); % Values on a line
y_dif = y - y_fit; % y value difference (residuals)
SSdif = sum(y_dif.^2); % Sum square of difference
SStot = (length(y)-1)*var(y); % Sum square of y taken from variance
rsq = 1-SSdif/SStot; % Correlation 'r' value. If 1.0 the correlelation is perfect
對於x=[10;200;7;150]
和y=[0.001;0.45;0.0007;0.2]
我得到rsq = 0.9181
。
參考網址:http://www.mathworks.com/help/matlab/data_analysis/linear-regression.html
你是什麼意思「更好?」 –
你可以在兩者之間做一個線性迴歸並檢查'r'的平方值。 – ja72
@ ja72:請將其作爲答案,並附上示例代碼。給這個問題一些保存的機會。 –