計算 R 中的 R 平方統計量
R 平方統計量是用於評估線性迴歸模型與資料的擬合程度的數字。它給出了模型的自變數解釋的因變數的方差比例。
R 平方統計量僅適用於線性迴歸模型。線上性迴歸模型中,因變數是定量的。
該模型假設因變數線性依賴於自變數。R 平方也與線性模型的簡單擴充套件相關,包括多項式和互動項。
關於 R 平方統計量需要注意的其他要點是:
- 它是一個比例,所以它沒有單位。
- 因為它是一個比例,它總是在 0 到 1 的範圍內。
- 值 0 表示模型沒有解釋方差。
- 值 1 表示模型解釋了所有方差。
- 通常,給出更高 R 平方值的模型被認為更好。
- 新增更多的自變數總是會增加 R 平方的值。這可能會使模型過度擬合資料。因此,有時選擇一個 R 平方略低於另一個過擬合資料的模型可能很有用。
- 線性模型將為用於建立模型的資料提供有效的 R 平方統計量。該模型可以使用不同的資料集來預測因變數值的向量。但是我們不應該為這些預測值計算 R 平方統計量。
R 平方統計量的公式
假設我們嘗試使用一些自變數來預測變數 Y
。我們使用完整的觀察建立我們的線性迴歸模型,其中所有變數的值,包括因變數 Y
,都是已知的。
Y
的算術平均值是在沒有線性迴歸模型的情況下 Y
的估計值。它被作為基線。
Y
的觀測值與 Y
的算術平均值之間的差異是總偏差。這些差異的平方和稱為總平方和,TSS。
線性迴歸模型預測的 Y
和 Y
的觀測值之間的差異是殘差。即使在我們嘗試使用線性迴歸模型中的自變數預測 Y
之後,這些偏差仍然存在。
這些差異的平方和稱為殘差平方和,RSS。R 平方統計量計算為 (TSS - RSS)/TSS。因此,模型解釋了 Y
方差的比例。
更好的模型通常具有更高的 R 平方統計量,因為 RSS 會更低。
從線性迴歸模型中獲取 R 平方統計量
R 的基本安裝包括線性建模函式 lm()
,作為 stats
包的一部分,預設載入。
它幫助我們輕鬆構建線性迴歸模型。此函式的第一個引數是模型的規範。
我們將指定我們想要檢視 Y
如何依賴於 X
。第二個引數是資料的來源。我們指定資料框,R 將在其中找到變數 X
和 Y
。
summary()
函式報告模型的 R 平方統計量。在下面的例子中,我們將建立一個簡單的線性迴歸模型,並讓 R 報告 R-squared 的值。
示例程式碼:
# Create sample data.
# Independent variable, X.
X = c(1, 2, 3, 4, 5)
# Dependent Variable, Y, of the form 2x+1, with added error.
Y = c(2, 6, 7, 10, 9)
# Make a data frame, df.
df = data.frame(X,Y)
# Build the linear regression model named lin.mod.
lin.mod = lm(formula = Y~X, data = df)
# Check R^2 in the model summary. It is labeled as Multiple R-squared.
summary(lin.mod)
輸出:
Call:
lm(formula = Y ~ X, data = df)
Residuals:
1 2 3 4 5
-1.2 1.0 0.2 1.4 -1.4
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.4000 1.5319 0.914 0.428
X 1.8000 0.4619 3.897 0.030 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 1.461 on 3 degrees of freedom
Multiple R-squared: 0.8351, Adjusted R-squared: 0.7801
F-statistic: 15.19 on 1 and 3 DF, p-value: 0.02998
對 summary()
函式的呼叫產生了大量的輸出。Multiple R-squared 的值就是我們想要獲得的值。
手動計算 R 平方統計量
可以使用相關係數函式 cor()
獲得 R 平方統計量。但是,我們需要確保僅在適當的情況下在正確的上下文中使用它。
- 在簡單線性迴歸的情況下,R 平方等於
Y
和X
之間的相關係數的平方,其中X
是自變數。 - 在多元線性迴歸的情況下,R 平方等於
Y
與模型預測的Y
值之間的相關係數的平方。
以下示例使用我們建立的簡單線性迴歸模型說明了此計算。
示例程式碼:
# The cor() function gives the correlation coefficient.
# Its square is equal to the R-squared statistic.
cor(X,Y)^2
輸出:
> cor(X,Y)^2
[1] 0.8350515
我們發現相關係數的平方與線性迴歸模型總結報告的 R 平方值相同。
建立自定義函式來計算 R 平方
如果我們經常需要手動計算兩個相等長度的數值向量之間的 R 平方統計量,我們可以編寫一個自定義函式來簡化我們的任務。
自定義函式的形式為 function_name = function(argument list) {body of function}
。它將被如下呼叫:function_name(parameter list)
。我們將在自定義函式中使用 cor()
函式。
示例程式碼:
# Define the custom function.
VectorRSq = function(x, y) {cor(x, y)^2}
# Call the custom function.
VectorRSq(X, Y)
輸出:
> VectorRSq(X, Y)
[1] 0.8350515
獲得幫助
要了解有關 R 平方統計量的更多資訊,請閱讀免費線上提供的優秀教科書統計學習簡介中關於線性迴歸的章節。
要了解有關在 R 中製作自定義函式的更多資訊,請閱讀 Hadley Wickham 的線上書籍 R for Data Science 中有關函式的章節。
有關 lm()
、cor()
或 c()
函式的幫助,請單擊 R Studio 選單中的 Help > Search R Help
,然後在搜尋框中輸入不帶括號的函式名稱.
まとめ
R 平方統計量用於評估線性迴歸模型與資料的擬合程度。它僅對用於建立模型的資料有效。從線性建模函式 lm()
生成的摘要為我們提供了 R 平方統計量的值。
如果需要,我們可以使用 cor()
函式計算兩個相等長度的數值向量之間的 R 平方統計量。它可以直接完成,也可以通過自定義函式完成。