2013-11-28 12 views
5

Ich habe Probleme zu verstehen, wie Regress in Matlab funktioniert.Die Regress-Funktion in Matlab verstehen

Angenommen, ich habe zwei Arrays (X und Y), die jeweils die gleiche Größe haben (sagen wir, sie sind jeweils 1x10). Von dem, was ich verstehe, sollte die Regress-Funktion mir helfen, die Beziehung zwischen X und Y zu finden (Ich möchte eine Linie mit der besten Anpassung durch die geplotteten Daten zeichnen), und dann gebe ich die Steigung. Als ich das in Matlab ausprobiert habe, habe ich einen Fehler bekommen, der besagt, dass die 2 Variablen eine andere Anzahl von Zeilen haben ... aber das tun sie nicht, oder?

Ich würde es wirklich sehr schätzen, wenn mir jemand helfen könnte, zu verstehen, wie die Funktion und ihre Parameter funktionieren, nur um mich auf eine grundlegende Ebene zu bringen.

Hier einige Code als Beispiel:

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 

ich diesen Fehler:

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

Antwort

2

Ich denke, dass Sie Zeilen mit Spalten sind verwirrend irgendwie (Matlab verwendet column-major ordering). Wenn Sie Ihre beiden Eingaben y und X ausdrucken, sehen Sie sofort, dass es sich um Zeilenvektoren unterschiedlicher Länge handelt. Lesen Sie die Hilfe/Dokumentation für regress sorgfältig durch - die erste Eingabe muss ein N-mal-1-Spaltenvektor sein. Und die zweite eine N-mal-p-Matrix. Deshalb wie etwas, das funktionieren könnte:

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

regress für multiple lineare Regression ist. Sie wollen nur eine Beziehung zwischen X und Y finden. Dafür sollte polyfit Befehl genug sein. Ich denke, die Spalte von Einsen ist nur notwendig, wenn Sie Statistiken berechnen wollen.

Aus MATLAB Dokumentation:

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.

Sie werden regress verwenden, wenn Sie, wie mit Bezug auf X und YZ benimmt sich herausfinden möchten. Kurz gesagt, Z=f(X,Y). In diesem Fall verbinden Sie Z als Vektor nx1 (erstes Argument in regress Befehl). Dann bilden Sie eine andere Matrix, sagen Sie D=[X Y]. Dies ist ein Vektor nx2. Dies ist das zweite Argument für den Befehl regress.

nun wieder diese von MATLAB-Dokumentation lesen, sehen, ob es Sinn macht:

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

Können Sie mir bitte den Unterschied zwischen multiplen linearen Regression und normalen Regression erklären? Ich konnte den Unterschied zwischen den Befehlen fitlm und regress in Matlab nicht verstehen. – roni

+0

Bei 'fitlm' gegenüber' regress' sind beide lineare Regressoren. Ich denke, 'fitlm' ist besser organisiert und Sie können Plot, berechnen Metriken etc. mit den Methoden in' fitlm'. Du kannst nicht so viele Dinge in "Regress" machen. Ich bin mir jedoch nicht sicher. Ich denke, du meintest "multivariate normale Regression", für das lese "mvregress" von MATALB und vergleiche das mit "regress". Du solltest den Unterschied machen. –