Excel を使った線形回帰、4つの方法

# 散布図

二つの特性を横軸と縦軸とし，データを打点して作る可視化手法を散布図 (Scatter Plot) といいます。

### 例：分子量と沸点のプロット
下記は、様々な物質の分子量（molecular weight）と沸点（boiling point）をプロットした散布図です。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3231313136322f63376531383330322d333566352d343635302d366139312d6231623763656633636236382e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/211162/7200df1a-a12b-92b6-8503-5d5d021bb9eb.png)


# 線形回帰とは

### 回帰

説明変数 X (x<sub>1</sub>, x<sub>2</sub>, x<sub>3</sub>, ...) と目的変数 Y の関係を学習し、X から Y を予測する方法のうち、Y の取りうる値が連続値のものを「回帰」(Regression) といいます。Y の取りうる値が離散値（0か1か、ネコかイヌか、など）の場合は「分類」(Classification) といいます。

### 線形回帰

n 次元の散布図で各データをもっともうまく代表する (n − 1) 次元のアフィン超平面（回帰超平面）を求める手法を「線形回帰」(Linear Regression)といいます。n = 2 の場合、すなわち説明変数 X が 1変数の場合は「線形単回帰」といい、求める超平面はすなわち回帰直線になります。n > 2 の場合は「線形重回帰」といいます。

### 例：分子量から沸点を予測する回帰直線

線形回帰についてググると、線形回帰してよかったねという「よい例」がたくさん見つかりますので、ここではあえて「よくなかった例」として分子量から沸点を予測する回帰直線を載せておきます。この例では、誤差が大きすぎて予測にはとても使えなさそうだということが見てよくわかります。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3231313136322f65326538376166302d336661642d366563392d323534612d6334386633643166633763302e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/211162/918606ba-a2b6-4460-2ed3-1c7f71522a29.png)

# 実践

下記のデータを例に、線形回帰を行います。

![4例1.png](https://qiita-image-store.s3.amazonaws.com/0/211162/96c96847-ee8d-f399-bcaa-49830cff76b1.png)

# 1.「データ分析」を使う方法
まず「データ」タブに「データ分析」というボタンがあるかどうか確認します。ない場合は、データ分析のアドインを追加します。（アドイン追加方法についてわからなかったらググってね！）

データ分析のボタンを押して「回帰分析」を選択しOKします。
![4例2.png](https://qiita-image-store.s3.amazonaws.com/0/211162/ba4640ad-fa4b-72b9-cfba-a7b10dcb2eb9.png)

XとYを正しく選択してOKします。
![4例3.png](https://qiita-image-store.s3.amazonaws.com/0/211162/1a20a880-f6bf-d5f1-49a8-5be91f8461ca.png)

アラ簡単。データの意味についてはググってね！
![4例4.png](https://qiita-image-store.s3.amazonaws.com/0/211162/1115dfc0-4f1b-3f61-30e1-3a3505ccee59.png)

# 2. SLOPE関数とINTERCEPT関数を使う方法
Excelには傾きと切片を求める関数が用意されています。

傾きを求めるのはSLOPE関数
![4例5.png](https://qiita-image-store.s3.amazonaws.com/0/211162/9e17a012-b921-52ce-8617-5c90e392e52b.png)

切片を求めるのはINTERCEPT関数
![4例6.png](https://qiita-image-store.s3.amazonaws.com/0/211162/7f71e425-6982-ce0c-b9d6-c8b36931a257.png)

アラ簡単。

# 3. ガチで計算する方法

計算手法をガチで理解したい場合は以下のように計算しましょう。分からない単語があったらググってね！

### 平均値
まずはXとYの平均値をそれぞれ求めます。
![4例7.png](https://qiita-image-store.s3.amazonaws.com/0/211162/db97de35-f0b4-c5d4-5db5-3ab53c740d39.png)

### 偏差の２乗
偏差というのは平均からの差です。偏差の2乗を求めましょう。
![4例8.png](https://qiita-image-store.s3.amazonaws.com/0/211162/1e18da6d-1f4d-e6ab-ff7e-1736ae9f786b.png)

### 標準偏差
Xの標準偏差とYの標準偏差を求めましょう。
![4例22.png](https://qiita-image-store.s3.amazonaws.com/0/211162/b5c4c589-5b25-86ca-2335-5b337246ef3d.png)

### 偏差積
Xの偏差とYの偏差の積を求めます。
![4例21.png](https://qiita-image-store.s3.amazonaws.com/0/211162/f3ebb367-6b50-3b52-ada5-3a25ba87ac85.png)

### 共分散
XとYの共分散を求めます。
![4例11.png](https://qiita-image-store.s3.amazonaws.com/0/211162/923c5c57-ce45-efad-a510-47e22411d67f.png)

### 相関係数
XとYの相関係数を求めましょう。
![4例12.png](https://qiita-image-store.s3.amazonaws.com/0/211162/2d43b878-6ef1-8172-1784-90c744ac5802.png)

### 傾きと切片

これで準備は整いました。傾きは次のように計算できます。
![4例13.png](https://qiita-image-store.s3.amazonaws.com/0/211162/28f65d13-76f7-3ced-ace4-c6886f275fd6.png)

同様に切片は次のように計算できます。
![4例14.png](https://qiita-image-store.s3.amazonaws.com/0/211162/2cd1ad99-dce6-2850-2d7c-55176279af29.png)

# 4. ソルバーを用いる方法

まず「データ」タブに「ソルバー」というボタンがあるかどうか確認します。ない場合は、ソルバーのアドインを追加します。（アドイン追加方法についてわからなかったらググってね！）

### 下準備

傾きと切片に、テキトーな値を入れときます。

![4例15.png](https://qiita-image-store.s3.amazonaws.com/0/211162/f4bb6cf9-e05c-d3d9-9aac-a856637abd0a.png)

テキトーな傾きと切片によるテキトーな予測値を算出します。
![4例16.png](https://qiita-image-store.s3.amazonaws.com/0/211162/49972681-155d-8035-8081-2a51a8b53967.png)

テキトーな予測値と正しいYの値との平方誤差を算出します。
![4例17.png](https://qiita-image-store.s3.amazonaws.com/0/211162/37ba95a8-9bd5-c35c-d2b1-aed1e2ff12b6.png)

平方誤差の和を算出します。この平方誤差の和を最小にする傾きと切片をソルバーが探してくれるのです。
![4例18.png](https://qiita-image-store.s3.amazonaws.com/0/211162/dc6406f4-19f8-c673-aca6-0af68efa1ad0.png)

### ソルバーで解決

「ソルバー」ボタンを押して出てきたウインドウに、「目的セル」「変数セル」に正しく入力し、目標値を「最小値」にし、「制約のない変数を非負数にする」のチェックを外し、「解決」ボタンをクリック。
![4例19.png](https://qiita-image-store.s3.amazonaws.com/0/211162/3515d4fb-3e9a-0490-babc-2cd55c8b034a.png)

ソルバーによって探索された最適解が表示されるよ！
![4例20.png](https://qiita-image-store.s3.amazonaws.com/0/211162/bbf9ec56-bd28-e972-fb35-c6473be7d62f.png)

# 課題

今回の例では、テキトーなデータを使いました。相関係数は0.1付近ですから、驚くほど相関がありませんし、線形回帰を行う意味もありません。

そこでみなさんは、

* 相関係数が0.7以上0.9未満のデータを自作してください（データ数の目安は１０個前後）。
* 自作したデータの散布図を作成してください。
* そこに回帰直線を描き入れてください。
* 上記4つの方法で線形回帰を行ない、数字の変化を観察してください。
* 回帰直線の実データへのあてはまりの良さはどう評価すれば良いか考察してください。

* <a href="https://raw.githubusercontent.com/maskot1977/Statistics2017/master/home.txt">家賃のデータ</a> を使って、「徒歩（分）」「専有面積（㎡）」「築年数（年）」「階数（階）」の4変数から「家賃（円）」を予測する線形重回帰モデルを作成してください。

# Pythonはいいぞ

Pythonを使うと、もっと簡単かつ柔軟に解けるよ。ってことで、興味のある方は引き続き <a href="https://qiita.com/maskot1977/items/97b3c3f0f3d35d5f162a">線形回帰を本当はPythonで解きたいけど表計算で解けと言われたので</a> をご覧ください。