Почніть з основної ідеї варіації. Ваша початкова модель - це сума відхилень у квадраті від середнього. Значення R ^ 2 - це частка тієї зміни, яка враховується за допомогою альтернативної моделі. Наприклад, R-квадрат розповідає про те, скільки змін у Y ви можете позбутися, підсумовуючи відстані квадрата від лінії регресії, а не середнє значення.
Я думаю, що це стає абсолютно зрозумілим, якщо ми подумаємо про просту проблему регресії. Розглянемо типовий розсіювач, де у вас є предиктор X по горизонтальній осі та відповідь Y по вертикальній осі.
Середнє значення - це горизонтальна лінія на ділянці, де Y є постійним. Загальна варіація Y - це сума різниць у квадраті між середнім значенням Y та кожною окремою точкою даних. Це відстань між середньою лінією та кожною окремою точкою у квадраті та додаванні.
Ви також можете обчислити інший показник змінності після того, як у вас з'явиться лінія регресії в моделі. Це різниця між кожною точкою Y та лінією регресії. Замість кожного (Y - середнього) квадрата ми отримуємо (Y - точка на лінії регресії) у квадраті.
Якщо лінія регресії є будь-якою, крім горизонтальної, ми будемо отримувати меншу загальну відстань, коли використовуємо цю пристосовану лінію регресії, а не середню - тобто є менш необяснені зміни. Співвідношення між поясненою додатковою варіацією та початковою варіацією - ваше R ^ 2. Частка оригінальної зміни у вашій відповіді пояснюється пристосуванням до цієї лінії регресії.
Ось декілька код R для графіку із середнім значенням, лінією регресії та сегментами від лінії регресії до кожної точки, щоб допомогти візуалізувати:
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)