2013-11-28 65 views
5

我無法理解在Matlab中迴歸是如何工作的。假設我有2個數組(X和Y),每個數組的大小相同(假設它們是1x10)。根據我的理解,迴歸函數應該幫助我找到X和Y之間的關係(我想通過繪製的數據繪製出最佳擬合線),然後給我斜率。當我在Matlab中嘗試這個時,我得到一個錯誤,說2個變量的行數不同......但他們不這樣做,是嗎?瞭解Matlab中的迴歸函數

如果有人能夠幫助我理解函數及其參數如何工作,我只是非常感謝它,只是爲了讓我在基礎級別上進行操作。

下面是一些代碼爲例:

x = [1,2,3,4,5,6,7,8,9,10]; 
y = [1,2,3,4,5,6,7,8,9,10]; %defining the arrays, they are linearly related 
X=[x ones(size(x,1),1)]; %adding the (necessary?) column of ones 
regress(y,X) % using the regress function for a relationship 

我得到這個錯誤:

??? Error using ==> regress at 64 
The number of rows in Y must equal the number of rows in X. 

回答

2

我認爲你有點難以理解行與列(MATLAB的使用column-major ordering)。如果您打印出兩個輸入,即yX,您會立即看到它們是不同長度的行向量。請仔細閱讀regress的幫助/文檔 - 第一個輸入必須是N×1列向量。第二個是N-P矩陣。因此,類似這樣的東西可以工作:

x = 1:10; 
y = 1:10; 
X = [x; ones(1,length(x))]; 
b = regress(y.',X.') 
1

regress是用於多元線性迴歸。你只是想找到XY之間的關係。對於那個polyfit命令應該夠了。我認爲只有當你想計算統計數據時才需要這一列。

從MATLAB文檔:

regress is for multiple linear regression. You just want to find relation between X and Y. For that polyfit command should be enough. I think the column of ones is necessary only when you want to calculate statistics.

,當你想了解如何Z的行爲相對於XY您將使用regress。總之,Z=f(X,Y)。在這種情況下,您將插入Z作爲nx1向量(regress命令中的第一個參數)。然後你形成另一個矩陣,比如D=[X Y]。這是一個nx2載體。這將是regress命令的第二個參數。

現在從MATLAB文檔再次閱讀,看它是否有道理:

b = regress(y,X) returns a p-by-1 vector b of coefficient estimates for a multilinear regression of the responses in y on the predictors in X. X is an n-by-p matrix of p predictors at each of n observations. y is an n-by-1 vector of observed responses.

+0

能否請你解釋一下多元線性迴歸和迴歸之間的區別?我無法理解matlab中fitlm和regress之間的區別。 – roni

+0

關於'fitlm'與'regress'',都是線性迴歸。我認爲'fitlm'的組織性更好,你可以使用'fitlm'中的方法繪圖,計算度量等。 'regress'中不能做這麼多事情。但是,我不確定。我認爲你的意思是「多元正態迴歸」,因爲它讀取了MATALB的「mvregress」,並將其與「regress」進行比較。你應該得到不同。 –