Rを学びたい　Step13 単回帰分析

## はじめに
Rを学びたいStep13です。今回は単回帰分析について学びます

## 単回帰分析とは
単回帰分析（Simple Linear Regression）は、1つの独立変数（説明変数）を使って、1つの従属変数（目的変数）を予測したり、変数間の関係を理解するための統計手法です。

### 単回帰分析の指揮

単回帰分析では、データ間の関係を**一次関数（直線)** で表します。
この直線は次の式で表されます：

```math
y = \beta_0 + \beta_1 x + \varepsilon
```

```math
\begin{align*}
1. \quad y &: \text{従属変数（目的変数）} \\
&\bullet \text{予測したい対象の値。} \\
&\bullet \text{例: 売上、テストの点数、体重の減少など。} \\
\\
2. \quad x &: \text{独立変数（説明変数）} \\
&\bullet \text{従属変数に影響を与えると考えられる要因。} \\
&\bullet \text{例: 広告費、勉強時間、運動時間など。} \\
\\
3. \quad \beta_0 &: \text{切片（Intercept）} \\
&\bullet x = 0 \text{ のときの } y \text{ の値。} \\
&\bullet \text{例: 広告費を全く使わない場合の売上、勉強を全くしない場合の点数。} \\
\\
4. \quad \beta_1 &: \text{傾き（Slope）} \\
&\bullet x \text{ が1単位増えると } y \text{ がどれだけ増加または減少するかを示す。} \\
&\bullet \text{正の値であれば } x \text{ の増加に伴って } y \text{ が増加し、負の値であれば減少する。} \\
\\
5. \quad \varepsilon &: \text{誤差項（Error Term）} \\
&\bullet \text{実際の値（観測値）と、モデルが予測した値（回帰直線上の値）とのズレ。} \\
&\bullet \text{例: データに含まれる測定誤差やモデル化されていない他の要因の影響。}
\end{align*}
```

## 単回帰分析の例
今回は広告費と売り上げに関する単回帰分析を実施していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/83feab99-1ac3-8f3b-da55-ba627aca1903.png)

### 1. 平均値を求める
広告費、売り上げの平均を算出する

```math
\bar{x} = \frac{10 + 20 + 30 + 40 + 50}{5} = \frac{150}{5} = 30

```

```math
\bar{y} = \frac{58 + 74 + 94 + 120 + 142}{5} = \frac{488}{5} = 97.6
```

### 2. 偏差を計算
```math:

\begin{array}{|c|c|c|c|}
\hline
x_i & x_i - \bar{x} & y_i & y_i - \bar{y} \\
\hline
10 & 10 - 30 = -20 & 58 & 58 - 97.6 = -39.6 \\
20 & 20 - 30 = -10 & 74 & 74 - 97.6 = -23.6 \\
30 & 30 - 30 = 0 & 94 & 94 - 97.6 = -3.6 \\
40 & 40 - 30 = 10 & 120 & 120 - 97.6 = 22.4 \\
50 & 50 - 30 = 20 & 142 & 142 - 97.6 = 44.4 \\
\hline
\end{array}
```

### 3. 偏差の積と偏差の2乗を計算

```math:
\begin{array}{|c|c|c|c|}
\hline
x_i - \bar{x} & y_i - \bar{y} & (x_i - \bar{x})(y_i - \bar{y}) & (x_i - \bar{x})^2 \\
\hline
-20 & -39.6 & (-20) \times (-39.6) = 792.0 & (-20)^2 = 400 \\
-10 & -23.6 & (-10) \times (-23.6) = 236.0 & (-10)^2 = 100 \\
0   & -3.6  & 0 \times (-3.6) = 0.0        & 0^2 = 0       \\
10  & 22.4  & 10 \times 22.4 = 224.0       & 10^2 = 100    \\
20  & 44.4  & 20 \times 44.4 = 888.0       & 20^2 = 400    \\
\hline
\end{array}
```

### 4. 偏差の積と偏差の2乗の総和を計算

```math:

\begin{aligned}
\sum (x_i - \bar{x})(y_i - \bar{y}) &= 792.0 + 236.0 + 0.0 + 224.0 + 888.0 \\
&= 2140.0 \\
\\
\sum (x_i - \bar{x})^2 &= 400 + 100 + 0 + 100 + 400 \\
&= 1000
\end{aligned}


```

### 5. 傾きの計算

```math:
傾きの公式：

\beta_1 = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sum (x_i - \bar{x})^2}

```

```math:
\beta_1 = \frac{2140.0}{1000} = 2.14
```

### 6. 切片 を計算

```math
切片の公式：

\beta_0 = \bar{y} - \beta_1 \bar{x}

```


```math
数値を代入：

\beta_0 = 94 - 2.14 \times 30 = 97.6 - 64.2 = 29.8
```

## ソースコード
前段階の説明が長くなってしまいましたが、Rで実装していこうと思います。

```R:
# 必要なライブラリ
library(ggplot2)
library(extrafont)  # フォント管理ライブラリ

# 日本語対応フォントをインストール（必要に応じて一度だけ実行）
# font_import(prompt = FALSE)

# 日本語フォントの指定
jp_font <- "Hiragino Sans"  # Macの場合 (ヒラギノ)
# jp_font <- "MS Gothic"  # Windowsの場合

# データの作成
data <- data.frame(
  x = c(10, 20, 30, 40, 50),  # 広告費
  y = c(58, 74, 94, 120, 142) # 売上
)

# 単回帰分析の計算
mean_x <- mean(data$x)  # xの平均
mean_y <- mean(data$y)  # yの平均

# 傾きと切片の計算
sum_xy <- sum((data$x - mean_x) * (data$y - mean_y))
sum_x2 <- sum((data$x - mean_x)^2)
beta_1 <- sum_xy / sum_x2  # 傾き
beta_0 <- mean_y - beta_1 * mean_x  # 切片

# 回帰直線の方程式
data$y_pred <- beta_0 + beta_1 * data$x

# プロットの作成
ggplot(data, aes(x = x, y = y)) +
  geom_point(color = "blue", size = 3, alpha = 0.8) +  # 元のデータ点
  geom_line(aes(y = y_pred), color = "red", size = 1) + # 回帰直線
  labs(
    title = "単回帰分析のプロット",
    x = "広告費 (x)", 
    y = "売上 (y)"
  ) +
  theme_minimal(base_family = jp_font) +  # 日本語フォントを指定
  theme(plot.title = element_text(hjust = 0.5))  # タイトル中央寄せ
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/eac3600d-6fb8-ddae-a537-433be0157cd3.png)

## 最後に
単回帰分析の説明でした！コードにすると意外とシンプルです！！