2016/08/17
2020/05/04
Rでステップワイズ法による重回帰分析の自作関数例
今回はステップワイズの変数選択法による、線形重回帰分析の自作関数を作ったのでメモとして残しておきます。ご自由にお使いください。ステップワイズ法による変数選択とは、AICを最小にするような重回帰分析の説明変数を選択するというものです。
Rによる通常の回帰分析は、R言語で線形モデルによる回帰分析をお読みください。
また、線形モデルによる回帰分析の自作関数は、Rで線形モデルによる回帰分析の自作関数例に掲載しています。
※R言語入門のトップページはこちら
ステップワイズ法による回帰分析の自作関数
引数のdatには解析用データ、fnには出力ファイル名を入れます。また、データフレームである、datの1列目には目的変数、それ以外の列に説明変数を格納するようにして下さい。
解析用したいデータフレームを引数に関数を適用させると、ステップワイズの手法によって、自動で変数選択を行い、重回帰分析を行ってくれます。
step_mra_fun <- function(dat,fn){
colnames(dat)[1] <- “y”
ans <- lm(dat$y~., data=dat)
ans <- step(ans)
s.ans <- summary(ans)
coe <- s.ans$coefficient
N <- nrow(dat)
aic <- AIC(ans)
conf <- confint(ans,levels=(0.95))
R2 <- summary(ans)$r.squared
result <- cbind(coe,conf,R2,aic,N)
colnames(result)[5:6] <- c(“RR95%CI.low”,”RR95%CI.up”)
e2 <- deviance(ans)
MSE <- e2 / N
if(nrow(result)>=2){
result[2:nrow(result),7:9] <- “”
}
write.table(cbind(“E2″,e2,”MSE”,MSE),fn,append=T,quote=F,sep=”,”,row.names=F,col.names=F)
write.table(matrix(c(“”,colnames(result)),nrow=1),fn,append=T,quote=F,sep=”,”,row.names=F,col.names=F)
write.table(result,fn,append=T,quote=F,sep=”,”,row.names=T,col.names=F)
write.table(“”,fn,append=T,quote=F,sep=”,”,row.names=F,col.names=F)
}
関数の使用例
以下に関数の使用例を示します。事前に関数の読み込みと、データを変数dfに入れる作業を行っておきます。
dat = df[,c(3,12:17)] #3行目が目的変数。12~17行目が説明変数
colnames(dat)[1] = “y” #1行目の列名をyに。
fn = “ステップワイズsample.csv” #出力ファイル名
step_mra_fun(dat,fn) #ステップワイズ関数の実行
これによって、「ステップワイズsample.csv」という名前のファイルに、ステップワイズ法によって変数選択を行なった後の、重回帰分析の結果が出力されます。
出力内容
関数を使うとこのような結果が出力されます。(詳細は極秘データのためここにはお載せ出来ませんが)
ステップワイズによって変数選択されたものについての重回帰分析結果が出力されます。
最後に出力項目の一つ一つについて、意味を見ていきましょう。
項目 | 意味 |
---|---|
RSS | 残差平方和 |
RSS/N | 残差平方和を解析用データの行数で割ったもの |
Estimate | 回帰係数 |
Std.Error | 標準誤差 |
t value | t値 |
RR95%~ | 95%信頼区間の上限と下限 |
R2 | 決定係数 |
aic | AIC |
N | 解析データの大きさ。つまりデータフレームの行数 |
※R言語入門のトップページはこちら
COMMENT
-
TM 2017.6.19 5:28 PM
初めまして。いつもかつようさせていただいてます。
ステップワイズ法による回帰分析の自作関数について、始める前にパッケージの読み込み等は必要でしょうか。
また、公開していただいている関数はエラーなく入力できるのですが、結果の表示方法がわかりません。
お手数ですが、ご教示いただけないでしょうか。
-
IMIN 2017.6.19 6:35 PM
いつもご利用ありがとうございます。
1.パッケージの読み込みは必要ないかと思います。(Rのバージョン3.3.2)
2.解析結果は、csvファイルに出力されるような関数になっております。
関数の読み込みを行なったのち、解析を行いたいデータと出力ファイル名を引数にして、関数の実行をお試しください。
以下に、プログラム例を載せておきます。(事前に関数の読み込みと、データを変数dfに入れる作業を行っておきます。)
dat = df[,c(3,12:17)] #3行目が目的変数。12〜17行目が説明変数
colnames(dat)[1] = “y” #1列目の列名をyに。
fn = “ステップワイズsample.csv” #出力ファイル名
step_mra_fun(dat,fn) #ステップワイズ関数の実行 -
TM 2017.6.22 11:02 AM
ご回答ありがとうございます。
出力されたCSVはどこへ保存されますでしょうか・・・?
-
IMIN 2017.6.22 10:49 PM
現在の作業ディレクトリに、保存されますよ。
今現在の作業ディレクトリは、
getwd()
というコマンドで確認できます。また、作業ディレクトリを変更したい場合は、
setwd(d1)
のd1の部分に、作業ディレクトリのパスを入れるようにします。
以下に、作業ディレクトリ変更の例を記載しておきます。d1 = “/Users/IMIN/workspace2017/0112ロジスティック回帰”
setwd(d1)また、作業ディレクトリの変更など、Rでの基本操作は、こちらの記事をお読みいただけると、助けになるかもしれません。↓
Rでのプログラムの実行方法【Windows、Mac】
TM 2017.6.19 5:28 PM
初めまして。いつもかつようさせていただいてます。
ステップワイズ法による回帰分析の自作関数について、始める前にパッケージの読み込み等は必要でしょうか。
また、公開していただいている関数はエラーなく入力できるのですが、結果の表示方法がわかりません。
お手数ですが、ご教示いただけないでしょうか。
IMIN 2017.6.19 6:35 PM
いつもご利用ありがとうございます。
1.パッケージの読み込みは必要ないかと思います。(Rのバージョン3.3.2)
2.解析結果は、csvファイルに出力されるような関数になっております。
関数の読み込みを行なったのち、解析を行いたいデータと出力ファイル名を引数にして、関数の実行をお試しください。
以下に、プログラム例を載せておきます。
(事前に関数の読み込みと、データを変数dfに入れる作業を行っておきます。)
dat = df[,c(3,12:17)] #3行目が目的変数。12〜17行目が説明変数
colnames(dat)[1] = “y” #1列目の列名をyに。
fn = “ステップワイズsample.csv” #出力ファイル名
step_mra_fun(dat,fn) #ステップワイズ関数の実行
TM 2017.6.22 11:02 AM
ご回答ありがとうございます。
出力されたCSVはどこへ保存されますでしょうか・・・?
IMIN 2017.6.22 10:49 PM
現在の作業ディレクトリに、保存されますよ。
今現在の作業ディレクトリは、
getwd()
というコマンドで確認できます。また、作業ディレクトリを変更したい場合は、
setwd(d1)
のd1の部分に、作業ディレクトリのパスを入れるようにします。
以下に、作業ディレクトリ変更の例を記載しておきます。
d1 = “/Users/IMIN/workspace2017/0112ロジスティック回帰”
setwd(d1)
また、作業ディレクトリの変更など、Rでの基本操作は、こちらの記事をお読みいただけると、助けになるかもしれません。↓
Rでのプログラムの実行方法【Windows、Mac】