Comece com a idéia básica de variação. Seu modelo inicial é a soma dos desvios ao quadrado da média. O valor R ^ 2 é a proporção dessa variação contabilizada usando um modelo alternativo. Por exemplo, o quadrado-R indica quanto da variação em Y você pode se livrar somando as distâncias ao quadrado de uma linha de regressão, em vez da média.
Acho que isso fica perfeitamente claro se pensarmos no simples problema de regressão traçado. Considere um gráfico de dispersão típico em que você tenha um preditor X ao longo do eixo horizontal e uma resposta Y ao longo do eixo vertical.
A média é uma linha horizontal no gráfico em que Y é constante. A variação total em Y é a soma das diferenças quadráticas entre a média de Y e cada ponto de dados individual. É a distância entre a linha média e cada ponto individual ao quadrado e somado.
Você também pode calcular outra medida de variabilidade depois de ter a linha de regressão do modelo. Essa é a diferença entre cada ponto Y e a linha de regressão. Em vez de cada quadrado (Y - a média), obtemos o quadrado (Y - o ponto na linha de regressão) ao quadrado.
Se a linha de regressão não for horizontal, obteremos menos distância total quando usarmos essa linha de regressão ajustada em vez da média - ou seja, haverá menos variação inexplicada. A razão entre a variação extra explicada e a variação original é o seu R ^ 2. É a proporção da variação original na sua resposta que é explicada ajustando essa linha de regressão.
Aqui está um código R para um gráfico com a média, a linha de regressão e os segmentos da linha de regressão para cada ponto para ajudar a visualizar:
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)