2013-11-28 14 views
5

Ho difficoltà a capire come funziona regressione in Matlab.Comprendere la funzione di regressione in Matlab

Dire che ho 2 matrici (X e Y), ognuna delle stesse dimensioni (diciamo che sono ciascuna 1x10). Da quello che ho capito, la funzione regress dovrebbe aiutarmi a trovare la relazione tra X e Y (voglio tracciare una linea migliore attraverso i dati tracciati), e poi darmi la pendenza. Quando ho provato questo in Matlab, ho ricevuto un errore dicendo che le 2 variabili hanno un numero diverso di righe .... ma non lo fanno, vero?

Mi piacerebbe davvero molto se qualcuno potesse aiutarmi a capire come funzionano la funzione ei suoi parametri, solo per farmi andare a un livello base.

Ecco qualche codice come un esempio:

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 

ottengo questo errore:

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

risposta

2

penso che tu stia confondendo le righe con le colonne in qualche modo (Matlab usa column-major ordering). Se stampate i due ingressi, e X, vedrete immediatamente che si tratta di vettori di riga di lunghezze diverse. Leggere attentamente la guida/documentazione per regress - il primo input deve essere un vettore di colonna N-by-1. E il secondo una matrice N-by-p. Quindi qualcosa di simile potrebbe funzionare:

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

regress è per la regressione lineare multipla. Vuoi solo trovare una relazione tra X e Y. Per quel comando polyfit dovrebbe essere sufficiente. Penso che la colonna di quelli sia necessaria solo quando vuoi calcolare le statistiche.

Da documentazione 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.

Si utilizzerà regress quando si vuole scoprire come si comporta Z rispetto al X e Y. In breve, Z=f(X,Y). In questo caso, verrà inserito Z come vettore nx1 (primo argomento nel comando regress). Quindi formi un'altra matrice, ad esempio D=[X Y]. Questo è un vettore nx2. Questo sarà il secondo argomento per il comando regress.

Ora leggere questo da docs MATLAB ancora una volta, vedere se ha un senso:

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

Si può spiegare la differenza tra regressione lineare multipla e la regressione normale? Non riuscivo a capire la differenza tra i comandi fitlm e regressi in MATLAB. – roni

+0

Per quanto riguarda 'fitlm' vs.' regress', entrambi sono regressori lineari. Penso che 'fitlm' sia organizzato meglio e tu puoi tracciare, calcolare metriche ecc. Usando i metodi in' fitlm'. Non puoi fare così tante cose in 'regress'. Tuttavia, non sono sicuro. Penso che intendessi la "regressione normale multivariata", per quella legge "mvregress" di MATALB e la confronti con "regress". Dovresti ottenere la differenza. –

Problemi correlati