簡體   English   中英

盡管使用不同的訓練數據,為什么我的測試數據 R-squared 是相同的?

[英]Why are my test data R-squared's identical despite using different training data?

我在 R 中擬合兩個線性模型,一個使用“大”數據集,另一個使用“小”數據集,它是大數據集的子集。

當我從兩個模型計算樣本外 R 平方時,結果是相同的。

有人可以解釋一下這個結果嗎? 我預計較小的數據集具有較低的 R 平方,因為用於准確估計響應和預測變量之間關系的數據點較少。

下面的可復制示例。

set.seed(1) 
x = rnorm(100)
set.seed(10)
y = x + rnorm(100)
dat = data.frame(x, y)
xtr_small = dat[1:5, ] #for training model, small dataset
xtr_big = dat[1:50, ] #for training model, big dataset
xte = dat[51:100, ]  #for out of sample testing

# Fit models, predict
fit_small = lm(y ~ x, xtr_small)
fit_big = lm(y ~ x, xtr_big)
pred_small = predict(fit_small, xte)
pred_big = predict(fit_big, xte)

# Rsquared's are identical, predictions arent
identical(cor(xte$y, pred_small)^2, cor(xte$y, pred_big)^2)  #TRUE
identical(pred_small, pred_big) #FALSE
```

這是一個簡單的線性回歸,因此預測是x值的線性 function。 yx的線性 function 的相關性與yx的相關性相同; function 的系數無關緊要。

此規則的例外是斜率為零(不存在相關性,因為預測的 sd 為零)和負斜率,其中相關性將改變符號。 但是您正在查看平方相關,因此符號無關緊要,並且極不可能獲得恰好為零的擬合斜率。

這是為了幫助您了解user2554330 的含義。

$x$$y$為測試數據,預測線為$\hat{y} = \hat{a} + \hat{b}x$ 然后

\begin{方程} \begin{split} \textrm{cor}(y, \hat{y}) &= \frac{\textrm{cov}(y, \hat{y})}{\sqrt{\textrm {var}(y)}\sqrt{\textrm{var}(\hat{y})}}\\ &= \frac{\textrm{cov}(y, \hat{a} + \hat{b} x)}{\sqrt{\textrm{var}(y)}\sqrt{\textrm{var}(\hat{a} + \hat{b}x)}}\\ &= \frac{\hat{ b}\textrm{cov}(y, x)}{\sqrt{\textrm{var}(y)}\sqrt{\textrm{var}(x)}|\hat{b}|}\\ &= \frac{\hat{b}}{|\hat{b}|}\textrm{cor}(y, x) \end{split} \end{方程}

結果, $R^2 = [\textrm{cor}(y, \hat{y})]^2 = \frac{\hat{b}^2}{|\hat{b}|^2} [\textrm{cor}(y, x)]^2 = [\textrm{cor}(y, x)]^2$

請注意,測試數據的 R 平方與截距和斜率的估計無關。

這僅適用於簡單的線性回歸。 一旦您的 model 變為$y = a + b_1x_1 + b_2x_2$ ,R 平方將取決於估計的系數。

無論如何,正如我在其他地方警告過的那樣,R-squared 並不總是適合評估樣本外預測。 您真的想比較平均預測平方誤差,即mean((pred_small - xte$y) ^ 2)mean((pred_big - xte$y) ^ 2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM