引言
在多元线性回归模型中,通常使用\(R^2\)来衡量拟合优度,其公式如下
\[R^2 = \frac{\sum_i(\hat y - \bar y)^2}{\sum_i(y_i-\bar y)^2} = 1-\frac{\sum_i (y_i - \hat y_i)^2 }{\sum_i (y_i - \bar y)^2}\]
线性回归是要找一条直线拟合当前数据,从第二个公式可以看出,如果我们把\(Y = \bar y\)这条水平线看成拟合数据最简单的模型,\(R^2\)的本质是当前模型比\(Y = \bar y\)模型好多少的度量。
从这个角度来看,使用一条带有截距项的直线拟合,一定比用不带截距项的直线拟合效果要好,因为后者是前者的一种特例(截距项为0),但是下面这个R语言中的例子的结果,却与这个认知相悖
1 | # 设置随机种子,保证下面随机结果可以重复 |
结果如下
1 | # 带有截距项的模型 |
可以看到,第二个模型的Multiple R-squared
比第一个模型大很多。
这是为什么呢?
公式相异
没有截距项的模型\(R^2\)反而更大的原因在于,当使用没有截距项的线性回归模型时,R语言内部会使用另外一个公式
\[R_0^2 = \frac{\sum_i \hat y_i^2}{\sum_i y_i^2}=1-\frac{\sum_i(y_i-\hat y_i)^2}{\sum_i y_i^2}\]
\(R_0^2\)相比于\(R^2\),不同之处只是将\(\bar y\)设置为0。这里要注意一点,不是说没有截距项时,\(R^2\)就可以推导出\(R_0^2\);而是二者就是两个不同的公式,两个模型在用不同的方法计算R方。
我们先用R语言来验证这一点
1 | # 定义计算R方和R0方两个公式的函数 |
可以看到,如果两个模型都用\(R^2\)的公式来算,不加截距项的模型结果和summary
给出的不一样,而且用这个公式计算结果符合我们的预期(加截距项的模型\(R^2\)更大)。而使用\(R_0^2\)公式计算结果和summary
结果相同,\(R^2\)提高了很多。
接下来我们考虑,一个没有截距项的模型在计算时,完全也可以用它本身的\(\bar y\),况且它本身的\(\bar y\)也不是0,为什么这里要做这样的变化呢?
因为合理!一个没有截距项的线性模型其实是受到了一定的限制,该模型拟合的好不好,当然要放在同一个平台上,跟同样没有截距项(受到相同限制)的模型中最朴素的比。也就是要跟\(Y=0\)比,而不是和\(Y=\bar y\)比。
用图形表示如下
1 | plot(x, y, pch = 16, cex = 0.5, |
红色实线(带截距项模型)和红色虚线比,蓝色实线(不带截距项模型)和蓝色虚线比。
\(R^2\)为负
如果使用\(R^2\)的公式,没有截距项的模型有可能还没有\(Y=\bar y\)拟合的好,这就是\(R^2\)可能出现负数的一个原因;而和\(Y=0\)比则不会出现负数的情况。
下面首先用R语言给出一个\(R^2\)为负的例子
1 | set.seed(1234) |
结果如下
1 | > summary(fit0) |
下面我们从理论上简单说明一下,在没有截距项时,使用这个公式
\[R^2 = \frac{\sum_i(\hat y - \bar y)^2}{\sum_i(y_i-\bar y)^2} = 1-\frac{\sum_i (y_i - \hat y_i)^2 }{\sum_i (y_i - \bar y)^2}\]
时,\(R^2\)为负的原因。
这个公式还可以写成 \(R^2 = \frac{SSR}{SST}=1-\frac{SSE}{SST}\),其中\(SST=SSE+SSR\),即
\[\sum_i (y_i - \bar y)^2 = \sum_i (y_i - \hat y_i)^2 + \sum_i(\hat y_i-\bar y)^2\]
而这个式子要想成立,需要
\[\sum_i2(\hat y_i-\bar y)(y_i - \hat y_i)=0\]
因为\(SST\)是这样展开的
\[\sum_i (y_i - \bar y)^2 = \sum_i (y_i - \hat y_i)^2 + \sum_i(\hat y_i-\bar y)^2 + \sum_i2(\hat y_i-\bar y)(y_i - \hat y_i)\]
\[= \sum_i (y_i - \hat y_i)^2 + \sum_i(\hat y_i-\bar y)^2\]
在有截距项时,可以保证\(\sum_i2(\hat y_i-\bar y)(y_i - \hat y_i)=0\)(证明时需要用到在计算\(\hat \beta_{OLS}\)时,一阶导为0的条件);而在没有截距项时,就无法保证其为0,也就无法保证\(SST>SSE\),进而无法保证\(R^2>0\).