Inizia con l'idea di base della variazione. Il tuo modello iniziale è la somma delle deviazioni quadrate dalla media. Il valore R ^ 2 è la proporzione di quella variazione che viene spiegata usando un modello alternativo. Ad esempio, R-quadrato ti dice quanta della variazione in Y puoi eliminare riassumendo le distanze al quadrato da una linea di regressione, piuttosto che la media.
Penso che ciò sia reso perfettamente chiaro se pensiamo al semplice problema di regressione tracciato. Considera un tipico diagramma a dispersione in cui hai un predittore X lungo l'asse orizzontale e una risposta Y lungo l'asse verticale.
La media è una linea orizzontale sul diagramma in cui Y è costante. La variazione totale in Y è la somma delle differenze al quadrato tra la media di Y e ogni singolo punto dati. È la distanza tra la linea media e ogni singolo punto quadrato e sommato.
È inoltre possibile calcolare un'altra misura di variabilità dopo aver ottenuto la linea di regressione dal modello. Questa è la differenza tra ciascun punto Y e la linea di regressione. Piuttosto che ogni (Y - la media) al quadrato otteniamo (Y - il punto sulla linea di regressione) al quadrato.
Se la linea di regressione è tutt'altro che orizzontale, otterremo una distanza totale inferiore quando utilizziamo questa linea di regressione adattata piuttosto che la media, ovvero c'è una variazione meno inspiegabile. Il rapporto tra la variazione aggiuntiva spiegata e la variazione originale è il tuo R ^ 2. È la proporzione della variazione originale nella tua risposta che viene spiegata adattando quella linea di regressione.

Ecco un codice R per un grafico con la media, la linea di regressione e i segmenti dalla linea di regressione a ciascun punto per aiutare a visualizzare:
library(ggplot2)
data(faithful)
plotdata <- aggregate( eruptions ~ waiting , data = faithful, FUN = mean)
linefit1 <- lm(eruptions ~ waiting, data = plotdata)
plotdata$expected <- predict(linefit1)
plotdata$sign <- residuals(linefit1) > 0
p <- ggplot(plotdata, aes(y=eruptions, x=waiting, xend=waiting, yend=expected) )
p + geom_point(shape = 1, size = 3) +
geom_smooth(method=lm, se=FALSE) +
geom_segment(aes(y=eruptions, x=waiting, xend=waiting, yend=expected, colour = sign),
data = plotdata) +
theme(legend.position="none") +
geom_hline(yintercept = mean(plotdata$eruptions), size = 1)