2013-07-26 4 views
13

私のデータセットには、いくつかの連続変数とダミー変数があります。 glmnetを使った解析では、連続変数を標準化したいが、ダミー変数は入れない。glmnetの標準化引数はダミー変数をどのように扱いますか?

私は現在、[0,1]の値しか持たない列のダミーベクトルを定義してから、ダミー以外のすべての列に対してscaleコマンドを使用して手動でこれを行います。問題は、これはあまり優雅ではないということです。

しかしglmnetはstandardize引数に建てられました。デフォルトでは、これもダミーを標準化しますか?もしそうなら、glmnetのstandardize引数にダミーをスキップするようエレガントな方法がありますか?それは式のインタフェースを持っていないため

+0

なぜあなたは余分な仕事をしていますか? –

+0

@DWin私は別の方法が表示されません。 glmnetが差別しない場合は、私はする必要があります。私がちょうど下に投稿したように、標準化されたダミー変数の係数を解釈できない場合、標準化する前にダミーを非ダミーから分離する必要があります。 –

答えて

10

つまり、これはダミー変数を標準化しますが、そうする理由があります。 glmnet機能は、そのXパラメータの入力ではなく、データフレームとして行列をとるので、パラメータがdata.frameだった場合、あなたが持っているかもしれfactorの列の区別をしていません。あなたが内部FORTRAN関数(ELNET、lognet、他のいずれかに供給する0または1の整数にRブール値に変換

isd = as.integer(standardize) 

として内部、glmnetコードstandardizeパラメータRの関数を見てみた場合。。!

  subroutine standard1 (no,ni,x,y,w,isd,intr,ju,xm,xs,ym,ys,xv,jerr) 989 
      real x(no,ni),y(no),w(no),xm(ni),xs(ni),xv(ni)      989 
      integer ju(ni)              990 
      real, dimension (:), allocatable :: v          
      allocate(v(1:no),stat=jerr)           993 
      if(jerr.ne.0) return             994 
      w=w/sum(w)               994 
      v=sqrt(w)                995 
      if(intr .ne. 0)goto 10651            995 
      ym=0.0                995 
      y=v*y                 996 
      ys=sqrt(dot_product(y,y)-dot_product(v,y)**2)       996 
      y=y/ys                997 
    10660 do 10661 j=1,ni              997 
      if(ju(j).eq.0)goto 10661            997 
      xm(j)=0.0                997 
      x(:,j)=v*x(:,j)              998 
      xv(j)=dot_product(x(:,j),x(:,j))          999 
      if(isd .eq. 0)goto 10681            999 
      xbq=dot_product(v,x(:,j))**2           999 
      vc=xv(j)-xbq               1000 
      xs(j)=sqrt(vc)              1000 
      x(:,j)=x(:,j)/xs(j)             1000 
      xv(j)=1.0+xbq/vc              1001 
      goto 10691               1002 

が1000をマークされた行を見てみましょう: - アル)は

あなたはFORTRANコード(固定幅調べることによってさらに行けば古い学校)を、次のブロックが表示されますこれは基本的に標準化公式をtに適用することです彼はXマトリックスです。

は今、統計学的に言えば、一つは一般的に推定説明変数の解釈可能に保持するために、カテゴリ変数を標準化しません。しかし、Tibshirani hereによって指摘されているように、「lasso法は回帰分析の初期標準化を必要とするので、罰則はすべての回帰変数に対して公平である。カテゴリー回帰分析では、回帰変数をダミー変数で符号化し、これは連続変数とカテゴリ変数の間の任意のスケーリングを引き起こしますが、それは等しいペナルティ処理のために行われます。

+2

私は[類似の掘り出し物](https:// thinklab。glmnetが標準化された変数にフィッティングした後に係数を再変換する方法を確認するために、com/discussion/computing-standardized-logistic-regression-coefficients/205#5) Funtran :-) 'glmnet'の助けを借りて –

+0

:"係数は常に元の縮尺で返されます "。したがって、係数の解釈可能性は問題ではありません。 – pbahr

+0

係数は「元のスケール」であるが、L1とL2のペナルティは、回帰係数を本質的に偏らせて、分散を試み、減らす([Bias-Variance Tradeoff](https://en.wikipedia.org/wiki/Bias%E2 %80%93variance_tradeoff))、従属変数の値に対する偏りのない推定値として扱われるべきではないことを意味する。ちょうど明確化:) –

3

glmnetは、ダミー変数について何も知らない(したがってmodel.framemodel.matrixには触れていません。)あなたがそれらを特別扱いすることにしたい場合は、あなたが行う必要があるでしょうあなた自身。

+0

ダミーを標準化させても構いませんか? –

+2

上記の自分の質問に答える。 **いいえ、ダミーを標準化することはできません。** http://www.sagepub.com/upm-data/21120_Chapter_7.pdf、140ページを引用してください:「ダミー回帰のための標準化されていない係数は、期待される応答として解釈可能ですダミー回帰係数が標準化されていれば、この直接的な解釈は失われてしまう」と述べている(非特許文献2参照)。 –

+0

@R_Userあなたのコメントに基づいて回答を追加しますか?私は答えとしてあなたを受け入れることができます。 –

関連する問題