つまり、これはダミー変数を標準化しますが、そうする理由があります。 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法は回帰分析の初期標準化を必要とするので、罰則はすべての回帰変数に対して公平である。カテゴリー回帰分析では、回帰変数をダミー変数で符号化し、これは連続変数とカテゴリ変数の間の任意のスケーリングを引き起こしますが、それは等しいペナルティ処理のために行われます。
なぜあなたは余分な仕事をしていますか? –
@DWin私は別の方法が表示されません。 glmnetが差別しない場合は、私はする必要があります。私がちょうど下に投稿したように、標準化されたダミー変数の係数を解釈できない場合、標準化する前にダミーを非ダミーから分離する必要があります。 –