回归分析是一种非常广泛使用的统计工具,用于建立两个变量之间的关系模型。
这些变量之一称为预测变量(自变量x),其值通过实验收集。
另一个变量称为响应变量(因变量y),其值从预测变量派生。
一元线性回归
在线性回归中,预测变量与相应变量通过方程相关,其中这两个变量的指数(幂)为1.
数学上,线性关系表示:当绘制为图时的直线。 任何变量的指数不等于1的非线性关系将创建一条曲线。
线性回归的一般数学方程为 :
y = ax + b
以下是所使用的参数的描述:
- y是响应变量。
- x是预测变量。
- a和b被称为系数常数。
创建关系的步骤是 :
- 进行收集观测值的样本的实验。
- 使用R语言中的lm()函数创建关系模型。
- 从创建的模型中找到系数,并使用这些创建数学方程
- 获得关系模型的摘要以了解预测中的平均误差。 也称为残差。
- 为了预测新的结果,使用R中的predict()函数。
举个栗子:
已知人的身高预测人的体重
样本数据集如下所示:
# Values of height
151, 174, 138, 186, 128, 136, 179, 163, 152, 131
# Values of weight.
63, 81, 56, 91, 47, 57, 76, 72, 62, 48
lm( ) 函数
lm(formula,data)
- formula是表示x和y之间的关系的符号。
- data是应用公式的向量。
获取公式:
输入:
x <- c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131)
y <- c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)
# Apply the lm() function.
relation <- lm(y~x)
print(relation)
输出:
Call:
lm(formula = y ~ x)
Coefficients:
(Intercept) x
-38.4551 0.6746
即 y = 0.6746x + (-38.4551)
获取总结:
输入:
x <- c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131)
y <- c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)
# Apply the lm() function.
relation <- lm(y~x)
print(summary(relation))
输出:
Call:
lm(formula = y ~ x)
Residuals:
Min 1Q Median 3Q Max
-6.3002 -1.6629 0.0412 1.8944 3.9775
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -38.45509 8.04901 -4.778 0.00139 **
x 0.67461 0.05191 12.997 1.16e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.253 on 8 degrees of freedom
Multiple R-squared: 0.9548, Adjusted R-squared: 0.9491
F-statistic: 168.9 on 1 and 8 DF, p-value: 1.164e-06
详解summary
Residuals:残差统计量。
在理想情况下服从正态分布,普通最小二乘法在数学上保证产生均值为0的残差。
- 在此例中,中位数的符号为正(0.0412),表明向右偏移,中位数的大小表明偏斜的程度。
- 第一个四分位数(1Q)和第三个四分位数(3Q)为钟形分布的幅度。在这种情况下,3Q有较大的幅度(1.8944)表明向右倾斜。
- 最大和最小残差用来检验数据中产生较大残差的离群值。
Coefficients:系数。
如果一个变量的系数为0,那么这个变量是没有意义的,它对模型毫无贡献。
这里的系数只是估计,不会真正为0,那么从统计的角度而言,真正的系数为0的可能性是多大?这就依赖于t统计量(t value)和p值(Pr(>|t|))。
- (Intercept)的Estimate —- 公式中的b
- x的Estimate —-公式中的a,也就是系数
- p-value:P值。概率p值估计了系数不显著的可能性,越小越好。如果p值很大,说明不显著的可能性很高。一般情况下如果p值远小于于显著水平α=0.05(可更换显著性水平的值)
- Std.Error是回归系数的标准误差
- Residual standard error:残差标准误差,即ε的样本标准误差
- Multiple R-squared:R²(判定系数)是衡量模型拟合质量的指标,判断模型是否有用,值越大越好。在本例中,模型解释y的方差为95.48%,剩余的是不能解释的
- Adjusted R-squared:调整R²。考虑了模型变量的数目,能实际地评估模型的有效性,在多元回归情况下,使用调整R²
- F-statistic:F统计量告诉模型是否显著,如果有任何回归系数为非零,该模型是显著的;如果所有系数均为0,该模型是不显著的。
predict()函数:
predict(object, newdata)
- object是已使用lm()函数创建的公式。
- newdata是包含预测变量的新值的向量。
预测一个170身高人的体重:
输入:
# The predictor vector.
x <- c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131)
# The resposne vector.
y <- c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)
# Apply the lm() function.
relation <- lm(y~x)
# Find weight of a person with height 170.
a <- data.frame(x = 170)
result <- predict(relation,a)
print(result)
输出:
1
76.22869
以图形的方式展示:
输入:
# Create the predictor and response variable.
x <- c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131)
y <- c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)
relation <- lm(y~x)
# Give the chart file a name.
png(file = "linearregression.png")
# Plot the chart.
plot(y,x,col = "blue",main = "Height & Weight Regression",
abline(lm(x~y)),cex = 1.3,pch = 16,xlab = "Weight in Kg",ylab = "Height in cm")
# Save the file.
dev.off()
输出:
多元线性回归
多元回归是线性回归到两个以上变量之间的关系的延伸。 在简单线性关系中,我们有一个预测变量和一个响应变量,但在多元回归中,我们有多个预测变量和一个响应变量。
多元回归的一般数学方程为 :
y = a + b1x1 + b2x2 +…bnxn
以下是所使用的参数的描述 :
- y是响应变量。
- a,b1,b2 … bn是系数。
- x1,x2,… xn是预测变量。
lm()函数
在多元回归中的基本语法是:
lm(y ~ x1+x2+x3…,data)
以下是所使用的参数的描述:
- 公式是表示响应变量和预测变量之间的关系的符号。
- 数据是应用公式的向量。
举个栗子:
考虑在R语言环境中可用的数据集“mtcars”。 它给出了每加仑里程(mpg),气缸排量(“disp”),马力(“hp”),汽车重量(“wt”)和一些其他参数的不同汽车模型之间的比较。
模型的目标是建立“mpg”作为响应变量与“disp”,“hp”和“wt”作为预测变量之间的关系。
输入:
input <- mtcars[,c("mpg","disp","hp","wt")]
print(head(input))
输出:
mpg disp hp wt
Mazda RX4 21.0 160 110 2.620
Mazda RX4 Wag 21.0 160 110 2.875
Datsun 710 22.8 108 93 2.320
Hornet 4 Drive 21.4 258 110 3.215
Hornet Sportabout 18.7 360 175 3.440
Valiant 18.1 225 105 3.460
创建关系模型并获取系数:
输入:
input <- mtcars[,c("mpg","disp","hp","wt")]
# Create the relationship model.
model <- lm(mpg~disp+hp+wt, data = input)
# Show the model.
print(model)
# Get the Intercept and coefficients as vector elements.
cat("# # # # The Coefficient Values # # # ","
")
#使用coef()读取构建模型model的系数
a <- coef(model)[1]
Xdisp <- coef(model)[2]
Xhp <- coef(model)[3]
Xwt <- coef(model)[4]
print(a)
print(Xdisp)
print(Xhp)
print(Xwt)
输出:
(Intercept)
37.10551
disp
-0.0009370091
hp
-0.03115655
wt
-3.800891
使用summary():
输入:
print (summary(model))
输出:
Call:
lm(formula = mpg ~ disp + hp + wt, data = input)
Residuals:
Min 1Q Median 3Q Max
-3.891 -1.640 -0.172 1.061 5.861
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 37.105505 2.110815 17.579 < 2e-16 ***
disp -0.000937 0.010350 -0.091 0.92851
hp -0.031157 0.011436 -2.724 0.01097 *
wt -3.800891 1.066191 -3.565 0.00133 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.639 on 28 degrees of freedom
Multiple R-squared: 0.8268, Adjusted R-squared: 0.8083
F-statistic: 44.57 on 3 and 28 DF, p-value: 8.65e-11
根据一元线性回归中对于summary的详解,发现P值<0.05,符合我们的期望。
基于上述截距和系数值,我们创建了数学方程。
Y = a+Xdisp.x1+Xhp.x2+Xwt.x3
or
Y = 37.105+(-0.000937)*x1+(-0.0311)*x2+(-3.8008)*x3
当提供一组新的位移,马力和重量值时,我们可以使用上面创建的回归方程来预测里程数。
对于disp = 221,hp = 102和wt = 2.91的汽车,预测里程为 :
Y = 37.15+(-0.000937)*221+(-0.0311)*102+(-3.8008)*2.91 = 22.7104