第6回 Rを用いた統計講座(基礎編)〜「回帰分析」〜

2020年9月15日

「回帰分析(regression analysis)」とは、ある変数(予測・説明変数)の値から、他の変数(目的・基準変数)の値を予測・説明する分析のことです。なお、一次関数を用いて予測・説明を行う場合「線形回帰」と呼びます。

予測変数が一つの場合を「単回帰分析」、予測変数が複数ある場合を「重回帰分析」と呼びます。

単回帰式のモデルは以下で表すことが出来る。

yi = αxi +β+εi 

予測変数xiを利用することで、yiを「yi = αxi +β」で予想、説明をしています。また、α、βの値をデータから推定することで、予測式を算出することができます。

重回帰式のモデルは以下で表すことが出来る。

yi = α1x1i +α2x2i +β+εi 

予測変数x1i は、1つ目の予測変数のi番目の値、α1はそれにかかる傾き、x2iは2つ目の予測変数のi番目の値、α2はそれにかかる傾きです。なお、予測変数が3つ以上の場合でも、同じようにモデル化が出来ます。

本講座では、下記リンク先のcsvファイル2019年セリーグ順位表を用いて行います。

「セリーグ順位_2019.csv」のデータ内容は以下の通りです。


勝率得点失点本塁打盗塁打率防御率
巨人0.546663573183830.2573.77
DeNA0.507596611163400.2463.93
阪神0.504538566941000.2513.46
広島0.5591601140810.2543.68
中日0.48256354490630.2633.72
ヤクルト0.418656739167620.2444.78

「R」でのデータ読み込み方法がわからない場合は、下記リンク先を参照下さい。

Rでも「単回帰分析」をすることで、予測式を求めることが出来ます。

コマンド用法
lm(y~x)線形モデルを用いた回帰分析をする関数。yは目的変数、xは説明変数。

本講座では、目的変数(勝率):yとし、説明変数(失点):xとすることで、単回帰分析で予測式を算出します。

サンプルコード

df <- read.csv(“セリーグ順位_2019.csv",header=T,row.names=1,fileEncoding="CP932″)
y <- df$勝率
x <- df$失点
ans <- lm(y~x)
ans

上記、サンプルコードを実行すると、実行結果から、「y=0.77849 – 0.0004716x」の予測式が算出されることが分かります。

単回帰分析の詳細情報を調べることもできます。

コマンド用法
summary(ans)単回帰分析結果ansの詳細な結果を求めることが出来る関数です。
サンプルコード

s.ans <- summary(ans)
s.ans

上記、サンプルコードを実行することで、コンソール上で実行結果が表示されます。その結果の用語を以下でまとめています。

項目意味
Estimate回帰分析による回帰係数の推定値
MultipleR-squared決定係数R^2(単回帰分析の場合、xとyの相関係数の2乗)
Pr(>|t|)p値。回帰係数が0である帰無仮説に対する仮説検定結果のp値
Residual standard error誤差項の標準偏差の推定値
std.Error各回帰係数の推定量の標準語差
t valuet値。回帰係数=0であるという帰無仮説に対するt検定によって計算される値

Rでは、回帰分析の結果をcsvファイルで出力することができます。サンプルコードでは、体裁を整えて、見やすい状態になるようにファイル出力しています。

コマンド用法
$coefficient回帰係数を抽出します。
AIC(ans)AIC(赤池情報量基準)を抽出します。
cbind(a,b,c)行数が同じ行列a,b,cを横に結びつけます。
write.table()write.table(出力変数, 出力ファイル名, オプション)で、ファイルを出力できます。(オプション append= T:ファイルへの追加出力を許可、row.names=T:行列名を出力、colnames = T:列名を出力 ※TはTRUEでもか。F(FALSE)で不出力);:
サンプルコード

coe <- s.ans$coefficient 
aic <- AIC(ans)
N <- length(y)
result <- cbind(coe,aic,N)
result[2,5:6] <- “"
write.table(matrix(c(“",colnames(result)),nrow=1),"回帰分析.csv",append=T,quote=F,sep=",",row.names=F,col.names=F)
write.table(result,"回帰分析.csv",append=T,quote=F,sep=",",row.names=T,col.names=F)

サンプルコードを実行するとcsvファイルが出力されます。csvファイルで出力された結果は以下の通りです。


EstimateStd. Errort valuePr(>|t|)aicN
(Intercept)0.7784900020.1159902366.7116856380.002565295-21.615971896
x-0.000471640.000190461-2.4763065580.068481779

Rでは、「単回帰分析」と同様、「重回帰分析」をすることで、予測式を求めることが出来ます。

コマンド用法
lm(y~x1+x2)線形モデルを用いた回帰分析をする関数。yは目的変数、xは説明変数。”+”で説明変数を複数設定し、重回帰分析がおこなえます。

本講座では、目的変数(勝率):yとし、説明変数(失点):x1、(防御率):x2とすることで、重回帰分析で予測式を算出します。

サンプルコード

df <- read.csv(“セリーグ順位_2019.csv",header=T,row.names=1,fileEncoding="CP932″)
ans <- lm(df$勝率~df$失点+df$防御率)
ans

上記、サンプルコードを実行すると、実行結果から、「y=0.7836134 – 0.0001914 x1 – 0.0449570 x2」の予測式が算出されることが分かります。

重回帰分析でも、詳細情報を調べることやcsvファイルに出力することができます。

サンプルコード

s.ans <- summary(ans)
coe <- s.ans$coefficient
N <- nrow(df)
aic <- AIC(ans)
result <- cbind(coe,aic,N)
result[2:nrow(result),5:6] <- “"
filename <- “重回帰出力.csv"
write.table(matrix(c(“",colnames(result)),nrow=1),filename,append=T,quote=F,sep=","
,row.names=F,col.names=F,fileEncoding="CP932″)
write.table(result,filename,append=T,quote=F,sep=",",row.names=T,col.names=F,fileEncoding="CP932″)

サンプルコードを実行するとcsvファイルが出力されます。csvファイルで出力された結果は以下の通りです。


EstimateStd. Errort valuePr(>|t|)aicN
(Intercept)0.7836133910.1295834766.0471706550.009070478-20.053687266
df$失点-0.0001913550.000625287-0.3060267760.77959221
df$防御率-0.0449570410.094351312-0.4764855920.666282135

「第6回 Rを用いた統計講座(基礎編)」で学んだコマンドは、以下になります。

コマンド用法
lm(y~x)線形モデルを用いた回帰分析をする関数。yは目的変数、xは説明変数。
summary(ans)単回帰分析結果ansの詳細な結果を求めることが出来る関数です。
$coefficient回帰係数を抽出します。
AIC(ans)AIC(赤池情報量基準)を抽出します。
cbind(a,b,c)行数が同じ行列a,b,cを横に結びつけます。
write.table()write.table(出力変数, 出力ファイル名, オプション)で、ファイルを出力できます。(オプション append= T:ファイルへの追加出力を許可、row.names=T:行列名を出力、colnames = T:列名を出力 ※TはTRUEでもか。F(FALSE)で不出力)
lm(y~x1+x2)線形モデルを用いた回帰分析をする関数。yは目的変数、xは説明変数。”+”で説明変数を複数設定し、重回帰分析がおこなえます。