In breve, sì - questo standardizzerà le variabili dummy, ma c'è un motivo per farlo. La funzione glmnet
accetta una matrice come input per il suo parametro X
, non un frame di dati, quindi non fa la distinzione per le colonne factor
che si possono avere se il parametro era un data.frame
. Se si prende uno sguardo alla funzione R, codici glmnet il parametro standardize
internamente come
isd = as.integer(standardize)
che converte i booleano R per un 0 o 1 intero per alimentare una qualsiasi delle funzioni FORTRAN interne (elnet, Lognet, et ..! al)
Se si va ancora di più esaminando il codice FORTRAN (larghezza fissa - vecchia scuola), si vedrà il seguente blocco:
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
Date un'occhiata alle linee contrassegnate 1000 - In pratica si applica la formula di standardizzazione a t lui matrice X
.
Ora, statisticamente parlando, non si standardizzano generalmente le variabili categoriali per mantenere l'interpretabilità dei regressori stimati. Tuttavia, come sottolineato da Tibshirani here, "Il metodo lazo richiede la standardizzazione iniziale dei regressori, in modo che lo schema di penalizzazione sia corretto per tutti i regressori.Per i regressori categoriali, si codifica il regressore con variabili dummy e poi si normalizzano le variabili dummy" - quindi mentre questo causa un ridimensionamento arbitrario tra variabili continue e categoriali, è fatto per un trattamento di penalizzazione uguale.
Perché stai facendo tutto quel lavoro extra? –
@DWin Non vedo un altro modo. Se glmnet non discrimina, allora ho bisogno di farlo. Come ho appena postato qui sotto, se non possiamo interpretare un coefficiente su una variabile dummy standardizzata, allora ho bisogno di separare i manichini da non-dummies prima della standardizzazione. –