第8回 線形回帰分析(1)
関西大学総合情報学部
2024-11-14
すぐに実習できるように準備しておきましょう。
Data
フォルダーを作成し、そこにアップロードしましょう。# A tibble: 69 × 5
Year Month Temperature Icecream Beer
<dbl> <dbl> <dbl> <dbl> <dbl>
1 2016 1 6.1 464 452
2 2016 2 7.2 397 584
3 2016 3 10.1 493 750
4 2016 4 15.4 617 835
5 2016 5 20.2 890 794
6 2016 6 22.4 883 961
7 2016 7 25.4 1292 1025
8 2016 8 27.1 1387 1021
9 2016 9 24.4 843 748
10 2016 10 18.7 621 730
# ℹ 59 more rows
変数 | 説明 |
---|---|
Year |
年 |
Month |
月 |
Temperature |
東京都の平均気温 (℃) |
Icecream |
一人あたりアイスクリーム支出額 (円) |
Beer |
アサヒ・スーパードライの販売量 (万箱) |
Temperature
とBeer
の相関係数(検定の際、\(\alpha\) = 0.05を採用)
Pearson's product-moment correlation
data: beer_df$Temperature and beer_df$Beer
t = 2.0899, df = 67, p-value = 0.04042
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.01137629 0.45729570
sample estimates:
cor
0.2473909
回帰直線(regression line): 二変数の散布図を描く場合、その関係も最も正確に表す直線
回帰直線の特徴
\(y = \alpha + \beta x\)の一次関数
二変数の相関係数が1、または-1の場合、散布図上の点はすべて直線上に乗る
beer_df
の5行目)の「気温は20.2度であり、ビールの販売量は794万箱」である。すべての観測値とそれぞれの予測値との距離(=残差; \(e_i\))の二乗和が最も小さくなる直線を推定
残差(\(e_i\))の二乗和が最小となる\(\alpha\)と\(\beta\)を推定する方法
lm()
関数の利用)lm()
関数の利用応答変数 ~ 説明変数
~
)で区切るdata = データオブジェクト名
beer_fit
summary()
関数を使用# 応答変数 (結果): ビールの販売量
# 説明変数 (原因): 気温
beer_fit <- lm(Beer ~ Temperature, data = beer_df)
summary(beer_fit)
Call:
lm(formula = Beer ~ Temperature, data = beer_df)
Residuals:
Min 1Q Median 3Q Max
-392.8 -169.1 -10.8 115.1 677.2
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 576.227 63.941 9.012 3.64e-13 ***
Temperature 7.355 3.519 2.090 0.0404 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 217.1 on 67 degrees of freedom
Multiple R-squared: 0.0612, Adjusted R-squared: 0.04719
F-statistic: 4.368 on 1 and 67 DF, p-value: 0.04042
(Intercept)
:切片 = \(\alpha\)
Temperature
:傾き = \(\beta\)
Beer
は「万箱」単位であるため、「Beer
の値が1上がる」ことは「ビール販売量の予測値が1万箱上がる」ことを意味する。# A tibble: 47 × 6
ID Pref Jimin Zaisei Over65 Primary
<dbl> <chr> <dbl> <dbl> <dbl> <dbl>
1 1 Hokkaido 32.8 0.435 29.2 7.00
2 2 Aomori 40.4 0.341 30.2 12.0
3 3 Iwate 34.9 0.352 30.5 10.6
4 4 Miyagi 36.7 0.614 25.9 4.36
5 5 Akita 43.5 0.309 33.9 9.62
6 6 Yamagata 42.5 0.351 30.9 9.19
7 7 Fukushima 33.8 0.533 28.8 6.48
8 8 Ibaraki 40.6 0.637 27.1 5.64
9 9 Tochigi 38.8 0.640 26.3 5.52
10 10 Gunma 42.1 0.625 28.1 4.96
# ℹ 37 more rows
変数 | 説明 |
---|---|
ID |
都道府県ID |
Pref |
都道府県名 |
Jimin |
2016年参院選の自民得票率 (比例) |
Zaisei |
2016年度財政力指数 |
Over65 |
65歳以上人口割合 |
Primary |
第一次産業従事者割合 |
重回帰分析(multiple regression):説明変数が2つ以上の回帰分析
lm()
関数を使用するが、説明変数を+
で追加する。\[ \hat{y} = \alpha + \beta_1 x + \beta_2 z \]
参考)単回帰分析と重回帰分析の違い
単回帰分析において残差は「観測値と回帰直線間の距離」であるが、重回帰分析の場合、「観測値と回帰平面間の距離」が残差となる。説明変数が2つの場合は、回帰平面、3つ以上の場合は回帰超平面となる。
2016年行われた参院選における自民党の得票率(都道府県)はどのような要因で説明出来るだろうか。財政的に豊かではない地域が国からの補助金への依存度が高く、高齢者ほど保守的であることは先行研究において指摘されている。ならば、自民党の得票率は、その都道府県の財政力指数と高齢者の割合で説明できるだろうか。
lm()
関数による重回帰分析複数の説明変数を+
で区切るだけ
Call:
lm(formula = Jimin ~ Zaisei + Over65, data = pref_df)
Residuals:
Min 1Q Median 3Q Max
-13.6140 -2.8382 0.8015 3.1558 9.6759
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 15.8910 11.3983 1.394 0.1703
Zaisei -4.5472 4.8211 -0.943 0.3507
Over65 0.8810 0.3366 2.617 0.0121 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 4.6 on 44 degrees of freedom
Multiple R-squared: 0.3135, Adjusted R-squared: 0.2823
F-statistic: 10.05 on 2 and 44 DF, p-value: 0.0002545
自民党の得票率の予測値 = 15.891 - 4.547 \(\times\) 財政力指数 + 0.881 \(\times\) 65歳以上人口の割合
term | estimate | std.error | p.value |
---|---|---|---|
(Intercept) | 15.891 | 11.398 | 0.170 |
Zaisei | −4.547 | 4.821 | 0.351 |
Over65 | 0.881 | 0.337 | 0.012 |
Intercept
)の係数:15.891
Zaisei
)の係数:-4.547
Over65
)の係数:0.881
財政力指数の係数は-4.547、65歳以上人口の割合の係数は0.881
term | estimate | std.error | statistic | p.value |
---|---|---|---|---|
(Intercept) | 15.891 | 11.398 | 1.394 | 0.170 |
Zaisei | −4.547 | 4.821 | −0.943 | 0.351 |
Over65 | 0.881 | 0.337 | 2.617 | 0.012 |
モデル1 | モデル2 | モデル3 | |
---|---|---|---|
切片(Intercept ) |
15.819 | 45.291 | 7.518 |
財政力指数(Zaisei ) |
-4.547 | -13.012 | |
65歳以上人口の割合(Over65 ) |
0.881 | 1.094 |
モデル1: 自民党の得票率の予測値 = 15.891 - 4.547 \(\times\) 財政力指数 + 0.881 \(\times\) 65歳以上人口の割合
モデル2: 自民党の得票率の予測値 = 45.291 - 13.012 \(\times\) 財政力指数
モデル3: 自民党の得票率の予測値 = 7.518 + 1.094 \(\times\) 65歳以上人口の割合
モデルの当てはまりの良さを評価する指標
\[ R^2 = \frac{\sum(\hat{y}_i - \bar{y})^2}{\sum(y_i - \bar{y})^2} = \frac{\text{回帰変動}}{\text{全変動}} \]
[1] 38.71447
[1] 32.82 40.44 34.90 36.68 43.46 42.49
1 2 3 4 5 6
39.62745 40.95864 41.15184 35.87845 44.38813 41.51710
[1] 0.3135332
説明変数が増えると決定係数は必ず大きくなるため、説明変数の数で決定係数にペナルティーを与える。
\[ \text{Adjusted } R^2 = 1 - \frac{(1 - R^2)(n - 1)}{(n - k - 1)} \]
Call:
lm(formula = Jimin ~ Zaisei + Over65, data = pref_df)
Residuals:
Min 1Q Median 3Q Max
-13.6140 -2.8382 0.8015 3.1558 9.6759
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 15.8910 11.3983 1.394 0.1703
Zaisei -4.5472 4.8211 -0.943 0.3507
Over65 0.8810 0.3366 2.617 0.0121 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 4.6 on 44 degrees of freedom
Multiple R-squared: 0.3135, Adjusted R-squared: 0.2823
F-statistic: 10.05 on 2 and 44 DF, p-value: 0.0002545
summary()
関数から出力される推定結果の下段
「決定係数は0.XX以上が望ましい」といった基準は存在しない
library(modelsummary) # ない場合はinstall.packages("modelsummary")でインストール
modelsummary(list(jimin_fit1, jimin_fit2, jimin_fit3))
(1) | (2) | (3) | |
---|---|---|---|
(Intercept) | 15.891 | 45.291 | 7.518 |
(11.398) | (2.049) | (7.141) | |
Zaisei | -4.547 | -13.012 | |
(4.821) | (3.800) | ||
Over65 | 0.881 | 1.094 | |
(0.337) | (0.249) | ||
Num.Obs. | 47 | 47 | 47 |
R2 | 0.314 | 0.207 | 0.300 |
R2 Adj. | 0.282 | 0.189 | 0.284 |
AIC | 281.7 | 286.5 | 280.7 |
BIC | 289.1 | 292.1 | 286.2 |
Log.Lik. | -136.869 | -140.269 | -137.340 |
F | 10.048 | 11.724 | 19.254 |
RMSE | 4.45 | 4.79 | 4.50 |