Bắt đầu với ý tưởng cơ bản của biến thể. Mô hình bắt đầu của bạn là tổng của độ lệch bình phương so với giá trị trung bình. Giá trị R ^ 2 là tỷ lệ của biến thể đó được tính bằng cách sử dụng một mô hình thay thế. Ví dụ, R-squared cho bạn biết mức độ biến đổi trong Y mà bạn có thể loại bỏ bằng cách tính tổng khoảng cách bình phương từ đường hồi quy, thay vì trung bình.
Tôi nghĩ rằng điều này được thực hiện hoàn toàn rõ ràng nếu chúng ta nghĩ về vấn đề hồi quy đơn giản được vạch ra. Hãy xem xét một biểu đồ phân tán điển hình trong đó bạn có bộ dự đoán X dọc theo trục ngang và phản hồi Y dọc theo trục dọc.
Giá trị trung bình là một đường nằm ngang trên ô trong đó Y không đổi. Tổng biến thiên trong Y là tổng các khác biệt bình phương giữa giá trị trung bình của Y và từng điểm dữ liệu riêng lẻ. Đó là khoảng cách giữa đường trung bình và mọi điểm riêng lẻ bình phương và cộng lại.
Bạn cũng có thể tính toán một số đo khác nhau sau khi bạn có đường hồi quy từ mô hình. Đây là sự khác biệt giữa mỗi điểm Y và đường hồi quy. Thay vì bình phương (Y - trung bình) chúng ta nhận được (Y - điểm trên đường hồi quy) bình phương.
Nếu đường hồi quy là bất cứ thứ gì ngoài chiều ngang, chúng ta sẽ nhận được tổng khoảng cách ít hơn khi chúng ta sử dụng đường hồi quy được trang bị này thay vì trung bình - đó là có ít biến thể không giải thích được. Tỷ lệ giữa biến thể bổ sung được giải thích và biến thể ban đầu là R ^ 2 của bạn. Đó là tỷ lệ của biến thể ban đầu trong phản hồi của bạn được giải thích bằng cách khớp đường hồi quy đó.
Dưới đây là một số mã R cho biểu đồ với giá trị trung bình, đường hồi quy và các phân đoạn từ đường hồi quy đến từng điểm để giúp trực quan hóa:
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)