Rでステップワイズ法による重回帰分析の自作関数例

[公開日]2016/08/17[更新日]2017/06/19 [カテゴリー]R言語入門 Written by  IMIN

今回はステップワイズの変数選択法による、線形重回帰分析の自作関数を作ったのでメモとして残しておきます。ご自由にお使いください。ステップワイズ法による変数選択とは、AICを最小にするような重回帰分析の説明変数を選択するというものです。

 

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」という名前のファイルに、ステップワイズ法によって変数選択を行なった後の、重回帰分析の結果が出力されます。

出力内容

関数を使うとこのような結果が出力されます。(詳細は極秘データのためここにはお載せ出来ませんが)

S__26878000

ステップワイズによって変数選択されたものについての重回帰分析結果が出力されます。

最後に出力項目の一つ一つについて、意味を見ていきましょう。

項目意味
RSS残差平方和
RSS/N残差平方和を解析用データの行数で割ったもの
Estimate回帰係数
Std.Error標準誤差
t valuet値
RR95%~95%信頼区間の上限と下限
R2決定係数
aicAIC
N解析データの大きさ。つまりデータフレームの行数

 

  • スポンサーリンク

  • 4 件のコメント

    • TM より:

      初めまして。いつもかつようさせていただいてます。

      ステップワイズ法による回帰分析の自作関数について、始める前にパッケージの読み込み等は必要でしょうか。

      また、公開していただいている関数はエラーなく入力できるのですが、結果の表示方法がわかりません。

      お手数ですが、ご教示いただけないでしょうか。

      • IMIN より:

        いつもご利用ありがとうございます。

        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 より:

          ご回答ありがとうございます。

          出力されたCSVはどこへ保存されますでしょうか・・・?

          • IMIN より:

            現在の作業ディレクトリに、保存されますよ。
            今現在の作業ディレクトリは、
            getwd()
            というコマンドで確認できます。また、作業ディレクトリを変更したい場合は、
            setwd(d1)
            のd1の部分に、作業ディレクトリのパスを入れるようにします。
            以下に、作業ディレクトリ変更の例を記載しておきます。

            d1 = “/Users/IMIN/workspace2017/0112ロジスティック回帰”
            setwd(d1)

            また、作業ディレクトリの変更など、Rでの基本操作は、こちらの記事をお読みいただけると、助けになるかもしれません。↓
            Rでのプログラムの実行方法【Windows、Mac】

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    CAPTCHA