计算 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 平方统计量。它可以直接完成,也可以通过自定义函数完成。