R の glm 関数も lm 関数と同様に回帰分析を行うことができる

glm 関数と回帰分析

R で回帰分析を行うとき、一般的に lm 関数を利用する。回帰分析は、一般化線形モデルに含まれる。そのため、一般化線形モデル用の関数 glm で回帰分析を行うこともできる。このページでは、glm 関数を利用した回帰分析を紹介する。

単回帰分析

単回帰分析は、確率変数 X と Y があるとき、Y を X で説明しようとする解析手法である。具体的に、2 つの変数を、Y = aX + b でモデルを立て、Y と X の関係を係数 a と b 用いて説明しようとする。

次は、sleep in mammals のデータに対して、glm 関数で単回帰分析を行う例である。sleep in mammals データには、種名(Species)、体重(BodyWt)、睡眠時間(TotalSleep)や寿命(LifeSpan)などが含まれている。ここで、寿命が睡眠時間によって、影響されるかどうかを調べてみる。

x <- read.table("https://stats.biopapyrus.jp/data/sleep_in_mammals.txt", header = TRUE)
LifeSpan <- x$LifeSpan
TotalSleep <- x$TotalSleep

m <- glm(LifeSpan ~ TotalSleep, family = gaussian)

summary(m)
## 
## Call:
## glm(formula = LifeSpan ~ TotalSleep, family = gaussian)
## 
## Deviance Residuals:
##     Min       1Q   Median       3Q      Max
## -22.075  -10.699   -2.000    6.841   76.190
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)
## (Intercept)  36.9326     5.7696   6.401 4.45e-08 ***
## TotalSleep   -1.6403     0.5057  -3.243  0.00207 **
## ---
## Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
## 
## (Dispersion parameter for gaussian family taken to be 299.9632)
## 
##     Null deviance: 18754  on 53  degrees of freedom
## Residual deviance: 15598  on 52  degrees of freedom
##   (8 observations deleted due to missingness)
## AIC: 465.21
## 
## Number of Fisher Scoring iterations: 2

summary によって出力される各項の意味は次のようになっている。

Deviance Residuals残差平方和の四分位数
Coefficients予測したパラメーターの値と統計量など
Estimateモデルパラメーターの予測値
Std. Error標準偏差
t valueそのパラメーターが 0 かどうかの検定結果である統計量
P(>|t|)t value に対応する p value
Null devianceNull Deviance = 2(LL(飽和モデル) - LL(帰無モデル)) によって計算される。飽和モデルはデータの個数分だけのパラメーターを持つと想定したモデルを指し、帰無モデルはすべてのデータがただ一つのパラメーターを持つと想定したモデルを指す。
Residual devianceResidual Deviance = 2(LL(飽和モデル) - LL(提案モデル)) によって計算される。提案モデルは解析者が提案したモデルを指す。上の例では 2 つのパラメーター(a と b)を想定しているモデルを指す。
AIC赤池情報量規準
plot(TotalSleep, LifeSpan)
abline(a = m$coefficients[1], b = m$coefficients[2])
glm関数を利用した回帰分析

重回帰分析

glm 関数を利用した重回帰分析も、基本的に lm 関数と同じように行える。sleep in mammals のデータに対して、glm 関数で重回帰分析を行ってみる。sleep in mammals データには、種名(Species)、体重(BodyWt)、睡眠時間(TotalSleep)や寿命(LifeSpan)などが含まれている。ここで、寿命が睡眠時間と体重によって、影響されるかどうかを調べてみる。

x <- read.table("https://stats.biopapyrus.jp/data/sleep_in_mammals.html", header = TRUE)
LifeSpan <- x$LifeSpan
TotalSleep <- x$TotalSleep
BodyWt <- x$BodyWt

TotalSleep.std <- scale(TotalSleep)
BodyWt.std <- scale(BodyWt)

m <- glm(LifeSpan ~ TotalSleep.std + BodyWt.std, family = gaussian)

summary(m)
## 
## Call:
## glm(formula = LifeSpan ~ TotalSleep.std + BodyWt.std, family = gaussian)
## 
## Deviance Residuals:
##     Min       1Q   Median       3Q      Max
## -20.114  -10.484   -2.591    6.490   77.322
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)
## (Intercept)      19.630      2.333   8.415 3.28e-11 ***
## TotalSleep.std   -6.476      2.422  -2.674   0.0101 *
## BodyWt.std        3.366      2.313   1.455   0.1518
## ---
## Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
## 
## (Dispersion parameter for gaussian family taken to be 293.6548)
## 
##     Null deviance: 18754  on 53  degrees of freedom
## Residual deviance: 14976  on 51  degrees of freedom
##   (8 observations deleted due to missingness)
## AIC: 465.01
## 
## Number of Fisher Scoring iterations: 2