Contenuto principale

Regressione lineare con una variabile predittiva

La regressione lineare semplice descrive la relazione tra una singola variabile predittiva e una variabile di risposta. Un modello di regressione lineare è utile per comprendere come le variazioni del predittore influenzano la risposta.

Questo esempio mostra come adattare, visualizzare e validare modelli di regressione lineare semplici di vari gradi utilizzando le funzioni polyfit e polyval. Per informazioni sull'adattamento e la visualizzazione di un modello utilizzando invece lo strumento Adattamento di base, vedere Interactively Fit Data and Visualize Model.

Utilizzare la regressione lineare semplice quando:

  • Si dispone di una variabile predittiva.

  • La relazione tra il predittore e la risposta è lineare nei coefficienti.

  • Si desidera quantificare l'effetto del predittore sulla risposta.

Plottaggio dei dati

Iniziare tracciando i dati per identificare i possibili gradi per l'adattamento polinomiale.

Ad esempio, creare e visualizzare una variabile predittiva campione x e una variabile di risposta campione y. Questa visualizzazione suggerisce che un adattamento lineare o quadratico potrebbe descrivere la relazione tra le variabili predittive e quelle di risposta.

x = [0:0.5:5]';
y = [2.73 2.50 3.79 3.98 4.21 7.18 6.95 9.63 12.39 14.10 19.93]';
scatter(x,y)

Figure contains an axes object. The axes object contains an object of type scatter.

Adattamento del modello di primo grado

Adattare un modello (lineare) di primo grado ai dati utilizzando la funzione polyfit. Specificare due argomenti di output per restituire i coefficienti polinomiali e la struttura di stima dell'errore.

[pLinear,SLinear] = polyfit(x,y,1)
pLinear = 1×2

    3.1316    0.1155

SLinear = struct with fields:
           R: [2×2 double]
          df: 9
       normr: 6.3071
    rsquared: 0.8715

Visualizzare il modello adattato.

eqLinear = "Linear: " + pLinear(1) + "x + " + pLinear(2)
eqLinear = 
"Linear: 3.1316x + 0.11545"

Adattamento del modello di grado superiore

Se un modello di primo grado non descrive adeguatamente la relazione tra le variabili predittive e quelle di risposta, è possibile adattare un modello di grado superiore. Ad esempio, adattare un modello (quadratico) di secondo grado ai dati utilizzando la funzione polyfit. Specificare due argomenti di output per restituire i coefficienti polinomiali e la struttura di stima dell'errore.

[pQuad,SQuad] = polyfit(x,y,2)
pQuad = 1×3

    0.7898   -0.8175    3.0773

SQuad = struct with fields:
           R: [3×3 double]
          df: 8
       normr: 2.5152
    rsquared: 0.9796

Visualizzare il modello adattato.

eqQuad = "Quadratic: " + pQuad(1) + "x^2 + " + pQuad(2) + "x + " + pQuad(3)
eqQuad = 
"Quadratic: 0.78984x^2 + -0.81755x + 3.0773"

Confronto di modelli

Per confrontare i modelli utilizzando un grafico, valutare innanzitutto ciascun modello nei punti di query e restituire i valori di risposta previsti utilizzando la funzione polyval. Quindi visualizzare i dati ed entrambi i modelli.

Ad esempio, ottenere i valori di risposta per il modello lineare e il modello quadratico su un intervallo più dettagliato di valori x.

xQuery = [0:0.05:7]';
yLinear = polyval(pLinear,xQuery);
yQuad = polyval(pQuad,xQuery);

Se il modello di grado superiore non predice bene i valori della risposta, questo potrebbe indicare un sovradattamento. Per informazioni sulla validazione del modello e sulla selezione della complessità appropriata del modello, vedere la sezione Validate Model (Validazione del modello).

Quindi tracciare i dati campione e i dati del modello.

scatter(x,y)
hold on
plot(xQuery,yLinear,"-")
plot(xQuery,yQuad,"--")
hold off

xlabel("Predictor")
ylabel("Response")
legend(["Sample data" "Linear model" "Quadratic model"])
text(0.3,30,[eqLinear eqQuad])

Figure contains an axes object. The axes object with xlabel Predictor, ylabel Response contains 4 objects of type scatter, line, text. These objects represent Sample data, Linear model, Quadratic model.

Validazione dei modelli

Per validare un modello, calcolare il coefficiente di determinazione (R quadro) o il coefficiente di determinazione corretto (R quadro corretto). Un valore vicino a 1 indica un buon adattamento.

Validazione del modello lineare con R quadro

Per un modello di primo grado, è possibile accedere al valore di R quadro utilizzando la struttura di stima dell'errore restituita dalla funzione polyfit. Ad esempio, eseguire una query nel campo rsquared in SLinear.

linearR2 = SLinear.rsquared
linearR2 = 
0.8715

Validazione del modello di grado superiore con R quadro corretto

Per i modelli di grado superiore con più termini, il valore R quadro in genere aumenta, indicando un maggiore adattamento ai dati osservati. Tuttavia, questi modelli presentano un rischio maggiore di sovradattamento.

Il sovradattamento si verifica quando un modello descrive i dati originali troppo da vicino (compreso il rumore) e non è un buon predittore dei nuovi dati.

Per bilanciare la qualità della previsione e la complessità del modello, si consideri di validare il modello utilizzando il valore di R quadro corretto, che include una penalizzazione per il numero di predittori. È possibile calcolare il valore di R quadro corretto utilizzando questa equazione, dove R2 è il valore del campo rsquared nella struttura di stima dell'errore, N è il numero di osservazioni nei dati e d è il grado del modello.

Radjusted2=1-(1-R2)(N-1)N-d-1

Ad esempio, calcolare il valore di R quadro corretto per il modello quadratico.

quadAdjRsq = 1 - (1 - SQuad.rsquared) * (numel(y) - 1) / (numel(y) - 2 - 1)
quadAdjRsq = 
0.9744

Calcolo dell'errore di previsione massimo per ciascun modello

È inoltre possibile validare un modello calcolando l'errore massimo tra le previsioni del modello e i dati campione. Un errore massimo ridotto rispetto ai valori dei dati indica un buon adattamento.

Ad esempio, calcolare l'errore massimo sia per il modello lineare che per quello quadratico.

Lia = ismember(xQuery,x);
linearMaxError = max(abs(yLinear(Lia) - y))
linearMaxError = 
4.1564
quadMaxError = max(abs(yQuad(Lia) - y))
quadMaxError = 
1.2926

Vedi anche

Funzioni

Argomenti