繁体   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