「回帰分析(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.546 | 663 | 573 | 183 | 83 | 0.257 | 3.77 |
DeNA | 0.507 | 596 | 611 | 163 | 40 | 0.246 | 3.93 |
阪神 | 0.504 | 538 | 566 | 94 | 100 | 0.251 | 3.46 |
広島 | 0.5 | 591 | 601 | 140 | 81 | 0.254 | 3.68 |
中日 | 0.482 | 563 | 544 | 90 | 63 | 0.263 | 3.72 |
ヤクルト | 0.418 | 656 | 739 | 167 | 62 | 0.244 | 4.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 value | t値。回帰係数=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ファイルで出力された結果は以下の通りです。
Estimate | Std. Error | t value | Pr(>|t|) | aic | N | |
(Intercept) | 0.778490002 | 0.115990236 | 6.711685638 | 0.002565295 | -21.61597189 | 6 |
x | -0.00047164 | 0.000190461 | -2.476306558 | 0.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ファイルで出力された結果は以下の通りです。
Estimate | Std. Error | t value | Pr(>|t|) | aic | N | |
(Intercept) | 0.783613391 | 0.129583476 | 6.047170655 | 0.009070478 | -20.05368726 | 6 |
df$失点 | -0.000191355 | 0.000625287 | -0.306026776 | 0.77959221 | ||
df$防御率 | -0.044957041 | 0.094351312 | -0.476485592 | 0.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は説明変数。”+”で説明変数を複数設定し、重回帰分析がおこなえます。 |
コメント