# 简单线性回归R和Python预测身高体重国内生产总值二氧化碳排放量

{% tabs %}
{% tab title="关键词" %}
简单线性回归(SLA) | R | Python | 预测 | 国内生产总值(GDP) | 二氧化碳排放量 | 身高体重 | Pandas | Matplotlib | scikit-learn | NumPy
{% endtab %}

{% tab title="梗概" %}
### R简单线性回归

#### 简单线性回归

简单线性回归是一种统计技术，用于显示一个因变量和一个自变量之间的关系。 因变量表示为 Y，而自变量表示为 X。变量 X 和 Y 线性相关。

简单线性回归可用于： (a) 描述一个变量对另一个变量的线性相关性； (b) 根据另一个变量的值预测一个变量； (c) 修正一个变量对另一个变量的线性相关性。

简单线性回归模型的形式为：

$$Y_{i}=\beta_{0}+\beta_{1} X_{i}+\varepsilon_{i}$$

其中 $$\beta_{0}$$ 和 $$\beta_{1}$$ 是 $$X$$ 的截距和回归系数，$$\epsilon$$ 是误差项。

上述中回归系数的解可以使用最小二乘法得出：

$$e_{i}=Y_{i}-\beta_{0}-\beta_{1} X_{i}$$

要找到残差平方和的最小和（最小二乘线上留下的位），请将下面的总和设置为零：

$$\sum_{i=1}^{n}\left(e_{i}\right)^{2}=\sum_{i=1}^{n}\left(Y_{i}-\beta_{0}-\beta_{1} X_{i}\right)^{2}=0$$

上述，对 $$\beta_{1}$$ 的偏导数：

$$\frac{\delta}{\delta \beta_{0}} \sum_{i=1}^{n}\left(Y_{i}-\beta_{0}-\beta_{1} X_{i}\right)^{2}=-2\left(n \beta_{0}+\beta_{1} \sum_{i=1}^{n} X_{i}-\sum_{i=1}^{n} Y_{i}\right)=0$$

将上述除以 2，求解 $$\beta_{0}$$，得到

$$\beta_{0}=\bar{Y}-\beta_{1} \bar{X}$$

现在，

$$\frac{\delta}{\delta \beta_{1}} \sum_{i=1}^{n}\left(Y_{i}-\beta_{0}-\beta_{1} X_{i}\right)^{2}=-2 \sum_{i=1}^{n}\left(X_{i} Y_{i}-\beta_{0} X_{i}-\beta_{1} X_{i}^{2}\right)=0$$

因此，

$$\beta_{1}=\frac{\sum_{i=1}^{n}\left(X_{i} Y_{i}-X_{i} \bar{Y}\right)}{\sum_{i=1}^{n}\left(X_{i}^{2}-X_{i} \bar{X}\right)}=\frac{\sum_{i=1}^{n}\left(X_{i} Y_{i}\right)-n \bar{X} \bar{Y}}{\sum_{i=1}^{n}\left(X_{i}^{2}\right)-n \bar{X}^{2}}=\frac{\operatorname{cov}(X, Y)}{\operatorname{var}(X)}$$

其中 $$\operatorname{cov}(X, Y)$$ 是 $$X$$ 和 $$Y$$ 的协方差——衡量 $$X$$ 如何随 $$Y$$ 变化的量度。

#### 示例1：预测体重

问题：在一堂统计课上，测量了 30 名学生的体重和身高，如下表所示。

$$\begin{array}{lrrrrrrrrrr}\hline \text { Student } & \mathbf{1} & \mathbf{2} & \mathbf{3} & \mathbf{4} & \mathbf{5} & \mathbf{6} & \mathbf{7} & \mathbf{8} & \mathbf{9} \\\text { Height (m) } & 1.43 & 1.10 & 1.24 & 1.36 & 2.26 & 1.25 & 1.74 & 1.55 & 1.51 \\\text { Weight (kg) } & 92.18 & 77.76 & 65.44 & 114.19 & 82.81 & 106.66 & 94.44 & 75.32 & 67.35 \\\hline \text { Student } & \mathbf{1 0} & \mathbf{1 1} & \mathbf{1 2} & \mathbf{1 3} & \mathbf{1 4} & \mathbf{1 5} & \mathbf{1 6} & \mathbf{1 7} & \mathbf{1 8} \\\text { Height }(\mathrm{m}) & 1.82 & 1.57 & 1.59 & 2.19 & 1.54 & 2.06 & 1.86 & 1.76 & 1.51 \\\text { Weight (kg) } & 101.55 & 76.37 & 91.66 & 75.85 & 88.82 & 83.02 & 74.66 & 97.57 & 104.56 \\\hline \text { Student } & \mathbf{1 9} & \mathbf{2 0} & \mathbf{2 1} & \mathbf{2 2} & \mathbf{2 3} & \mathbf{2 4} & \mathbf{2 5} & \mathbf{2 6} & \mathbf{2 7} \\\text { Height (m) } & 2.39 & 1.83 & 2.02 & 1.99 & 1.40 & 1.54 & 1.60 & 1.88 & 1.52 \\\text { Weight (kg) } & 113.36 & 64.71 & 103.79 & 70.02 & 78.35 & 80.70 & 90.54 & 91.55 & 82.57 \\\hline \text { Student } & \mathbf{2 8} & \mathbf{2 9} & \mathbf{3 0} & & & & & & \\\text { Height (m) } & 1.41 & 1.38 & 1.18 & & & & & & \\\text { Weight (kg) } & 82.49 & 87.98 & 67.54 & & & & & & \\\hline\end{array}$$

1. 求学生体重与身高的回归。
2. 使用您在 (1) 中的答案来估算身高为 1.80 时，学生的体重值。

解：

根据以上数据，我们得到以下结果：

$$\begin{aligned}&\sum X Y=4282.115, \sum Y=2583.81, \sum X=49.48, n=30, \bar{X}=1.6493 \\&\bar{Y}=86.127, \sum X^{2}=84.699\end{aligned}$$

这些值代入方程中，

$$\beta_{1}=\frac{\sum_{i=1}^{n}\left(X_{i} Y_{i}\right)-n \bar{X} \bar{Y}}{\sum_{i=1}^{n}\left(X_{i}^{2}\right)-n \bar{X}^{2}}=\frac{4282.115-30(1.6493)(86.13)}{84.699-30(1.6493)^{2}}=6.6503$$

回归的斜率为 6.6503。

然后代入方程中的 $$\bar{Y}, \bar{X}$$ 和 $$\beta_{1}$$，得到常数项：

$$\beta_{0}=\bar{Y}-\beta_{1} \bar{X}=86.13-(6.6503)(1.6493)=75.1587$$

1. 回归模型为体重 = 75.16 6.65\*身高
2. 体重 = 75.16 6.65\*1.80 = 87.13

**R 中的回归计算：**

在 R 中指定身高和体重的值，如下所示：

```python
height<-c(1.43, 1.10, 1.24, 1.36, 2.26, 1.25, 1.74, 1.55, 1.51, 1.82, 1.57, 1.59,
2.19, 1.54, 2.06, 1.86, 1.76, 1.51, 2.39, 1.83, 2.02, 1.99, 1.40, 1.54, 1.60,
1.88, 1.52, 1.41, 1.38, 1.18)
weight<-c(92.18, 77.76, 65.44, 114.19, 82.81, 106.66, 94.44, 75.32, 67.35,
101.55, 76.37, 91.66, 75.85, 88.82, 83.02, 74.66, 97.57, 104.56, 113.36, 64.71,
103.79, 70.02, 78.35, 80.70, 90.54, 91.55, 82.57, 82.49, 87.98, 67.54)
```

通过回归学生的体重与身高来拟合模型，结果将随之而来。

```r

Call:
lm(formula = weight ~ height)
Residuals:
Min 1Q Median 3Q Max
-22.619 -9.917 -2.371 7.660 29.987
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 75.159 13.433 5.595 5.47e-06 ***
height 6.650 7.995 0.832 0.413
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 14.05 on 28 degrees of freedom
Multiple R-squared: 0.02412, Adjusted R-squared: -0.01074
F-statistic:0.6919 on 1 and 28 DF, p-value: 0.4125
```

在上面的结果中，残差统计、系数估计（带有标准误差和相关的 p 值）和所有其他统计（多重 R 平方、调整 R 平方、F 统计等）显示在输出。

#### 示例2：预测国内生产总值

### Python简单线性回归

```python
import matplotlib.pyplot as plt

ages = cleaned_data['Age']
heights = cleaned_data['Height']
plt.scatter(ages,heights, label='Raw Data')
plt.title('Height VS Age')
plt.xlabel('Age[Years]')
plt.ylabel('Height[Inches]')
plt.legend()
```

#### 示例3：预测身高

#### 示例4：二氧化碳排放量
{% endtab %}
{% endtabs %}

{% content-ref url="../zhi-dian-mi-jin-brief" %}
[zhi-dian-mi-jin-brief](../zhi-dian-mi-jin-brief)
{% endcontent-ref %}
