2. 回帰分析

 今回は、多変量解析の代表的な手法である回帰分析について解説する。

 工学系や農学系の実験等を行う領域では頻繁に使用される手法であるが、 日常的な話題の中でも概念は広く利用されているので、 取っ付き易い手法ではないだろうか。 過去のデータからその構造を把握し、新規に測定されたデータに対する予測を 行ないたいと言うときに、回帰分析は有用である。 構造のシンプルな単回帰分析でこの手法の原理を理解し、 複数の説明変量を用いた重回帰分析に拡張する。 残差の取り方や、その二乗和を最少にするという考えは同じである。

2.1. アイディア

散布図にもっともらしい「直線」を当てはめたい。

皆さんから収集した体格データを用いて、散布図を描いてみよう。どういう直線が「もっともらしい」と考えるか?

2.2. 前準備(Rの場合)

後々の分析(残差プロット)時に、データに欠損値が含まれていると計算できないので、分析対象の変量だけを切り出して、欠損値を除外しておく。

加えて、今回、新しいデータを提供する。 第3回の講義の中で、学生データとして「StudAll20a.xlsx」 (Excel形式)を提供したが、その後新しいデータが得られたので、 追加したものを「StudAll20c.xlsx」としてMoodleに置いておいた。 もし、より多くのデータを対象に演習がしたいと考えるのであれば、 Moodleからダウンロードし、CSV形式に変換して演習に供されたい。 以下では、そのデータ(StudAll20c.csv)を用いて話を進めるが、 「前のデータのままで良い」という場合は、 以下の「StudAll20c」を「StudAll20a」に読み替えて 実行すれば良い。若干計算結果は異なるが、 大きな違いはないので、理解の妨げになることはないと考えている。

# データの切り出し
colnames(Student20c)
## [1] "Sex"        "Height"     "Weight"     "Chest"      "Residence" 
## [6] "Remittance" "Carrier"    "Fee"
StudTmp1<-Student20c[,2:3]  # 身長(2番目)と体重(3番目)だけを切り出す
StudTmp1[1:20,]
##    Height Weight
## 1   145.0   38.0
## 2   146.7   41.0
## 3   148.0   42.0
## 4   148.0   43.0
## 5   148.9     NA
## 6   149.0   45.0
## 7   150.0   46.0
## 8   151.0   45.0
## 9   151.0   46.0
## 10  151.0   50.0
## 11  151.7   41.5
## 12  152.0   35.0
## 13  152.0   43.0
## 14  152.0   44.0
## 15  153.0   41.0
## 16  153.0   42.0
## 17  153.0   46.5
## 18  153.0   50.0
## 19  153.0   55.0
## 20  153.0     NA
dim(StudTmp)
## [1] 494   8

元々の身長と体重のデータは 494例だったが、欠損値を含むデータが56例あり、 残ったのは438例である。

StudHW<-na.omit(StudTmp1)  # 欠損値を含むデータを削除
dim(StudHW)
## [1] 438   2
colnames(StudHW)
## [1] "Height" "Weight"
## RresultHW <- lm(Weight ~ Height, data=StudHW)
## RresultHW
## summary(RresultHW)

以後は、Student20cの代わりにStudHWを使って分析を行う。

2.3. 単回帰分析 : 予測等に使う、連続変量の関係

# 表記方法 その1
Rresult1 <- lm(StudHW$Weight ~ StudHW$Height,
               data=StudHW) # 線形モデル, Linear Model
Rresult1
## 
## Call:
## lm(formula = StudHW$Weight ~ StudHW$Height, data = StudHW)
## 
## Coefficients:
##   (Intercept)  StudHW$Height  
##      -78.0283         0.8127
summary(Rresult1)
## 
## Call:
## lm(formula = StudHW$Weight ~ StudHW$Height, data = StudHW)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -15.446  -4.446  -1.038   3.212  34.617 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -78.02833    7.39601  -10.55   <2e-16 ***
## StudHW$Height   0.81271    0.04364   18.62   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.072 on 436 degrees of freedom
## Multiple R-squared:  0.443,  Adjusted R-squared:  0.4418 
## F-statistic: 346.8 on 1 and 436 DF,  p-value: < 2.2e-16
# 表記方法 その2
RresultHW <- lm(Weight ~ Height, 
               data=StudHW) # 線形モデル, Linear Model
RresultHW
## 
## Call:
## lm(formula = Weight ~ Height, data = StudHW)
## 
## Coefficients:
## (Intercept)       Height  
##    -78.0283       0.8127
summary(RresultHW)
## 
## Call:
## lm(formula = Weight ~ Height, data = StudHW)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -15.446  -4.446  -1.038   3.212  34.617 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -78.02833    7.39601  -10.55   <2e-16 ***
## Height        0.81271    0.04364   18.62   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.072 on 436 degrees of freedom
## Multiple R-squared:  0.443,  Adjusted R-squared:  0.4418 
## F-statistic: 346.8 on 1 and 436 DF,  p-value: < 2.2e-16
coef <-RresultHW$coefficient
resid<-RresultHW$residuals
coef          # 回帰係数
## (Intercept)      Height 
## -78.0283291   0.8127064
resid[1:20]   # 残差(先頭の20例)
##           1           2           3           4           6           7 
##  -1.8141038  -0.1957047  -0.2522231   0.7477769   1.9350705   2.1223640 
##           8           9          10          11          12          13 
##   0.3096576   1.3096576   5.3096576  -3.7592369 -10.5030488  -2.5030488 
##          14          15          16          17          18          19 
##  -1.5030488  -5.3157553  -4.3157553   0.1842447   3.6842447   8.6842447 
##          22          23 
##  -0.7221085  -1.1284617
plot(Weight ~ Height, data=StudHW)
abline(RresultHW)
abline(h=seq(40,100,10), lty=3)
abline(v=seq(140,190,5), lty=3)

2.4. 残差分析もお忘れなく

# 残差プロット: 対身長に対して
plot(StudHW$Height, RresultHW$residuals)
abline(v=seq(140,190,5),lty=3)     # 点線を追記
abline(h=seq(-10,30,10),lty=3)     # 点線を追記
abline(h=0,lty=1)                  # 原点を追記

# 残差プロット: 対体重に対して
plot(StudHW$Weight, RresultHW$residuals)
abline(v=seq(30,100,5),lty=3)      # 点線を追記
abline(h=seq(-10,30,10),lty=3)     # 点線を追記
abline(h=0,lty=1)                  # 原点を追記

# 残差のヒストグラム
hist(RresultHW$residuals, right=F)
abline(h=seq(0,150,25),lty=3)     # 点線を追記

# 残差の箱ひげ図
boxplot(RresultHW$residuals, horizontal=T)
abline(v=seq(-10,30,10),lty=3)      # 点線を追記

# 残差のQQプロット: 正規確率プロット
qqnorm(RresultHW$residuals)
qqline(RresultHW$residuals, lty=2)
abline(h=0,lty=1)                # 点線を追記
abline(h=seq(-10,30,10),lty=3)   # 点線を追記

2.5. その他の情報

ここまでで回帰直線の当てはめに疑義がなければ、他に得られる情報についても知っておくと良い。

summary(RresultHW)
## 
## Call:
## lm(formula = Weight ~ Height, data = StudHW)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -15.446  -4.446  -1.038   3.212  34.617 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -78.02833    7.39601  -10.55   <2e-16 ***
## Height        0.81271    0.04364   18.62   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.072 on 436 degrees of freedom
## Multiple R-squared:  0.443,  Adjusted R-squared:  0.4418 
## F-statistic: 346.8 on 1 and 436 DF,  p-value: < 2.2e-16

2.6. この分析のまとめ(結果の見方)

[演習] 上述では[体重]を[身長]で説明する回帰式の例で説明した。では、[体重]を[胸囲]で説明するとどうなるか? 各自でやってみよ。

2.7. 改めて注意事項