[備忘録]単回帰

# はじめに
機械学習を勉強するついでに統計学についても勉強をはじめてみた。
コミットしたい記事など溜まってるので、物凄くザックリに単回帰について記述したいと思う。
そのため読みにくい、間違っていることを書いてしまうと思うのでご指摘いただければありがたいです。

# データについて
例えば下記表のように各日にちの最高気温によってアイスコーヒーの売れた個数のデータがあるする

|日付|最高気温|注文数|
|---|---|---|
|2017/7/1|29|76|
|2017/7/2|28|65|
|2017/7/3|34|93|
|2017/7/4|31|84|
|2017/7/5|25|59|
|2017/7/6|29|64|
|2017/7/7|32|80|
|2017/7/8|31|75|
|2017/7/9|24|53|
|2017/7/10|33|92|
|2017/7/11|25|54|
|2017/7/12|31|75|
|2017/7/13|26|65|
|2017/7/14|30|80|

このデータを縦軸を売れた個数、横軸を気温とすると下の図のようにプロット出来る。
![Figure_2.png](https://qiita-image-store.s3.amazonaws.com/0/154154/c2ffb23c-d723-06e1-7743-da30c6cbce2f.png)
この図から気温が高くなるほどアイスコーヒーが売れてるような傾向があると分かる。
今回は最高気温が何度の時にアイスコーヒーが何杯売れるかを予測できる一次式を求める。

## 回帰式を求める。
単回帰では、回帰直線は$\hat{y} = ax +b$で表され、[最小二乗法](https://imagingsolution.net/math/least-square-method/)になるように$a$と$b$を求める。
下記に求め方に対応する計算結果の表を示す。

各日にちの最高気温：$x_{i}$
最高気温の平均：$x_{ave} = 29.14285714$
各日にちの注文数：$y_{i}$
注文数の平均を：$y_{ave} = 72.5$
として、回帰式を求めるための偏差平方和・偏差積和を求める。
$x$の偏差平方和：$S_{xx} = \sum_{i=1}^{
14} (x_{i}-x_{ave})^2$
$y$の偏差平方和: $S_{yy} = \sum_{i=1}^{
14}(y_{i}-y_{ave})^2$
$x$と$y$の偏差積和: $S_{xy} = \sum_{i=1}^{
14}(x_{i}-x_{ave})(y_{i}-y_{ave}) $

この時、今回のデータに対する回帰直線$a$と$b$を求め方は

```math
a = \frac{S_{xy}}{S_{xx}}

=\frac{499.00000000000006}{129.7142857142857}
=3.8469162995594726
```
<br/>

```math
b=y_{ave} -x_{ave}×a　 \\
= 72.5 - 29.142857142857146 × 3.8469162995594726 \\
= - 39.610132158590346
```
<br/>
よって回帰式$\hat{y}$は

```math
\hat{y} = 3.8469162995594726  x - 39.610132158590346
```
と表される。下記図に回帰直線$\hat{y}$をプロットしたグラフを表示する。
![Figure_1.png](https://qiita-image-store.s3.amazonaws.com/0/154154/c6b57b90-df70-9fbf-5903-dc7fe515b349.png)

上記のようになんとな〜く回帰直線が引けてることがわかる。

## 寄与率を求める
この回帰式の精度を評価する方法の一つ、寄与率を求めて評価を行ってみる。
寄与率は、重相関係数$R$の平方和で表される。
重相関係数は、

```math
R=\frac{yと\hat{y}の偏差積和}{\sqrt{yの偏差平方和×\hat{y}の偏差平方和}}

```
と表される。
$y$の偏差平方和: $S_{yy} = \sum_{i=1}^{
14}(y_{i}-y_{ave})^2 $
$\hat{y}$の偏差平方和:  $S_{\hat{y}\hat{y}} = \sum_{i=1}^{
14}(\hat{y_{i}} - y_{ave})^2 $
$y$と$\hat{y}$の偏差積和: $S_{y\hat{y}} = \sum_{i=1}^{
14}(y_{i}-y_{ave})(\hat{y_{i}} - y_{ave}) $
であるので、

```math
R=\frac{yと\hat{y}の偏差積和}{\sqrt{yの偏差平方和×\hat{y}の偏差平方}}　\\
=\frac{S_{y\hat{y}}}{\sqrt{S_{yy}×S_{\hat{y}\hat{y}}}}　\\
=\frac{1919.611233480177}{\sqrt{2159.5×1919.6112334801774}}　\\
=\frac{1919.611233480177}{2036.0256527608985}\\
=0.9428227148695986
```

よって
寄与率:$R^2 = (0.9428227148695986)^2 = 0.8889146716740803$
寄与率は0〜1の間で表されており、1に行くほど回帰式が精度高いことを示している。
統計学上、寄与率がどのくらいあれば精度が高いと言えるか明確な基準がないみたいです。
寄与率の目安としては0.5以上みたいです。


下に今回の計算過程の表を示す。

|日付|最高気温:$x$|注文数:$y$|$S_{xx}$|$S_{yy}$| $S_{xy}$|$\hat{y}$|$S_{yy}$|$S_{\hat{y}\hat{y}}$|$S_{y\hat{y}}$|
|---|---|---|---|---|---|---|---|---|---|
|7/1|29.0|76.0|0.020408163265305982|12.25|-0.4999999999999982|71.95044052863436|12.25|0.3020156125676819|-1.9234581497797407|
|7/2|28.0|65.0|1.3061224489795906|56.25|8.571428571428568|68.10352422907488|56.25|19.32899920433164|32.97356828193841|
|7/3|34.0|93.0|23.59183673469388|420.25|99.57142857142858|91.18502202643171|420.25|349.13004812823823|383.04295154185013|
|7/4|31.0|84.0|3.4489795918367365|132.25|21.357142857142858|79.64427312775331|132.25|51.040638523938036|82.15914096916305|
|7/5|25.0|59.0|17.163265306122447|182.25|55.92857142857142|56.56277533039646|182.25|253.99513016941958|215.15253303964772|
|7/6|29.0|64.0|0.020408163265305982|72.25|1.21428571428571|71.95044052863436|72.25|0.3020156125676819|4.671255506607942|
|7/7|32.0|80.0|8.163265306122453|56.25|21.42857142857143|83.49118942731279|56.25|120.80624502707214|82.4339207048458|
|7/8|31.0|75.0|3.4489795918367365|6.25|4.642857142857143|79.64427312775331|6.25|51.040638523938036|17.860682819383268|
|7/9|24.0|53.0|26.44897959183673|380.25|100.28571428571428|52.715859030837|380.25|391.41223388771414|385.7907488986786|
|7/10|33.0|92.0|14.877551020408168|380.25|75.21428571428572|87.33810572687223|380.25|220.16938156183886|289.34306167400865|
|7/11|25.0|54.0|17.163265306122447|342.25|76.64285714285714|56.56277533039646|342.25|253.99513016941958|294.83865638766537|
|7/12|31.0|75.0|3.4489795918367365|6.25|4.642857142857143|79.64427312775331|6.25|51.040638523938036|17.860682819383268|
|7/13|26.0|65.0|9.877551020408161|56.25|23.57142857142857|60.40969162995594|56.25|146.17555648275737|90.67731277533044|
|7/14|30.0|80.0|0.7346938775510212|56.25|6.428571428571433|75.79735682819383|56.25|10.872562052436457|24.730176211453706|
|合計|408.0|1015.0|129.7142857142857|2159.5|499.00000000000006|1015.0|2159.5|1919.6112334801774|1919.611233480177|
|平均|29.142857142857146|72.5|-|-|-|-|-|-|-|

## 参考までにgithubにテストデータとソースコードを置いとく

[github](https://github.com/Baya-Non/linear_regression)
ソースも雑に書いて汚いが参考になれたらありがたい。