R语言----线性回归(一元&多元)

回归分析是一种非常广泛使用的统计工具,用于建立两个变量之间的关系模型。

这些变量之一称为预测变量(自变量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()

输出:

R语言----线性回归(一元&多元)_第1张图片

多元线性回归

多元回归是线性回归到两个以上变量之间的关系的延伸。 在简单线性关系中,我们有一个预测变量和一个响应变量,但在多元回归中,我们有多个预测变量和一个响应变量。
多元回归的一般数学方程为 :

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

你可能感兴趣的:(R,r语言,线性回归,统计模型)