一、背景
简单线性回归(Simple linear regression)也称为一元线性回归,是分析一个自变量(x)与因变量(y)之间线性关系的方法,它的目的是拟合出一个线性函数或公式来描述x与y之间的关系。
我们以最简单的一元线性回归回归方程来解释:
y
i
=
β
0
+
β
1
×
x
i
+
e
i
y_i = \beta_0 + \beta_1 \times x_i + e_i
yi=β0+β1×xi+ei
其中,
y
i
y_i
yi 为因变量,
x
i
x_i
xi 为 自变量,
β
0
\beta_0
β0 为截距,
β
1
\beta_1
β1 为斜率,
e
i
e_i
ei 为残差。
线性回归拟合的实质:残差平方和(Residual Sum of Squares, RSS)收敛到最小值的过程。一般,通过最小二乘法,获取回归方承担的系数。
二、线性回归原理之最小二乘法
最小二乘法的主要思想是通过确定未知参数(通常是一个参数矩阵),来使得真实值和预测值的误差(也称残差)平方和最小,其计算公式为 R S S = ∑ ( y i − y i ^ ) RSS = \sum(y_i - \hat{y_i}) RSS=∑(yi−yi^),其中 y i y_i yi 是真实值, y i ^ \hat{y_i} yi^是对应的预测值。
我们仍以最简单的回归方程: y i = β 0 + β 1 × x i y_i=\beta_0+\beta_1 \times x_i yi=β0+β1×xi 为例。
根据最小二乘法: m i n ∑ ( y i − y i ^ ) 2 = m i n ∑ e i 2 = m i n ∑ ( y i − β 0 − β i x i ) = m i n F min \sum (y_i - \hat{y_i})^2 = min \sum e_i^2 = min\sum(y_i - \beta_0 - \beta_i x_i) = min \ F min∑(yi−yi^)2=min∑ei2=min∑(yi−β0−βixi)=min F
为了获得
β
0
\beta_0
β0 和
β
1
\beta_1
β1的最佳值,我们对其进行求偏导:
∂
F
∂
β
0
^
=
∑
i
=
1
n
(
y
i
−
β
0
^
−
β
1
^
x
i
)
=
0
∂
F
∂
β
1
^
=
∑
i
=
1
n
x
i
(
y
i
−
β
0
^
−
β
1
^
x
i
)
=
0
\frac{\partial F}{\partial \hat{\beta_0}} = \sum_{i=1}^{n}(y_i - \hat{\beta_0} - \hat{\beta_1}x_i) = 0 \\ \frac{\partial F}{\partial \hat{\beta_1}} = \sum_{i=1}^{n}x_i(y_i - \hat{\beta_0} - \hat{\beta_1}x_i) = 0
∂β0^∂F=i=1∑n(yi−β0^−β1^xi)=0∂β1^∂F=i=1∑nxi(yi−β0^−β1^xi)=0
分别求
β
0
^
\hat{ \beta_0}
β0^:
求
β
1
^
\hat{\beta_1}
β1^:
三、残差分析
基于最小二乘法获取的回归方程,最重要的是基于残差的平方和的最小值获取的,或者说是其损失函数。
在这里,我没有对其做进一步的讨论(其实残差最重要的是判定线性你和的优良性)。
本次仅仅介绍和残差有关的几个概念:残差平方和(Residuals sum of squares, RSS),均方误差(Mean squared error, MSE),均方根误差(Root mean squared error, RMSE),残差的标准误差(Residual standard error, RSE)。
# 建立模型
# load data
mydata <- mtcars[, c("mpg", "disp")]
# fit model
mymodel <- lm(mpg ~ disp, data = mydata)
summary(mymodel)
# 计算残差
residuals(mymodel)
# 残差的直方图
hist(residuals(mymodel))
# 计算残差的平方和(Residual sum of squares, RSS)
rss <- sum(residuals(mymodel)^2)
rss
# [1] 317.1587
# 计算均方误差(Mean squared error, MSE)
mse <- mean(residuals(mymodel)^2)
mse
# [1] 9.911209
# 计算出均方根误差(Root mean squared error, RMSE)
rmse <- sqrt(mse)
rmse
# [1] 3.148207
# 计算残差的标准误差(Residual standard error, RSE)
# df.residual为残差的自由度(通过 n - p - 1 计算所得,n为样本量,p为模型的自变量个数)。
# 反应了因变量 y 距离拟合回归线的平均距离
rse <- sqrt(rss / mymodel$df.residual)
rse
# [1] 3.251454
四、R语言示例
计算残差并绘制
# load data
mydata <- mtcars[, c("mpg", "disp")]
# fit model
mymodel <- lm(mpg ~ disp, data = mydata)
# predict
mydata$pred <- predict(mymodel)
# residual
mydata$res <- residuals(mymodel)
# ggplot
library(ggplot2)
ggplot(data = mydata, aes(x = disp, y = mpg)) + theme_classic() +
geom_point(aes(size = res)) +
geom_point(aes(y = pred), shape = 2) +
geom_smooth(method = "lm", se = FALSE, color = "grey") +
geom_segment(aes(xend = disp, yend = pred), alpha = 0.2)
模型评估
函数结果解读
- call: 指的是输入的回归方程信息。
- Residuals: 指的是残差的信息。
- Coefficients: 回归系数的信息(a与b,即截距与斜率)。
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 29.599855 1.229720 24.070 < 2e-16 ***
disp -0.041215 0.004712 -8.747 9.38e-10 ***
这一栏包含回归系数的信息,比如estimate(a与b,即截距与斜率),Std.Error(标准误),t value(t值)与pr(>|t|) p值。
我们最关心的问题是关于disp的一些信息以及disp是否有统计学意义。通过上述的结果,可以知道b = -0.04, 它的标准误为0.004, t值为-8.747,p = 9.38e-10。因此,disp每增加一个单位,mpg下降0.04,并且具有统计学意义。
- Residual standard error(RSE), R2与校正后的R2 ,F-statistic: 反映模型对于数据的拟合优化程度,即评价一个模型到底好不好的指标。
Residual standard error(RSE):也称为模型的sigma值,代表残差的变异程度。用数学的话说,就是残差(Residual)的标准差(Standard deviation),有点拗口图片。
RSE的数值反映了回归模型无法解释的那一部分信息。所以RSE越小意味着模型越好,越小意味着我们的模型可以解释越多的信息。
以我们的例子来说,RSE值为3.251,即表示每个散点图上的点偏离回归直线的平均距离为3.046个单位。因此,RSE越低,点偏离回归直线的距离越小,意味着回归方程越准确。
R-squared (R方): 即R方与校正后的R方。R2的数值范围为(0~1),指的是在数据中模型可以解释的那部分信息的比例。R方越接近1,模型能够解释的信息越高,模型就越好。
# Multiple R-squared: 0.7528, Adjusted R-squared: 0.7446
在我们的例子中,R2等于0.7528,说明我们的模型可以解释mpg(每加仑行驶距离)变异程度的75.28%,已经是相当高了!
但是,随着回归方程中变量的增多(比如多元线性回归),R方趋向于变大,所以对于评价一个方程的好坏来说,会有偏移。因此,统计学家们发明了校正后的R2(Adjusted R-squared),将变量的个数也考虑在内。所以,相对与R2要更加准确,尤其是在多元线性回归当中。
F-statistic: 可用于评价回归方程整体的统计学意义。
# F-statistic: 91.38 on 1 and 30 DF, p-value: 1.294e-10
F-statistic的值越大,它的p值将会越小。