2013-07-26 12 views
13

W moim zestawie danych mam szereg zmiennych ciągłych i fałszywych. Do analizy za pomocą glmnet, chcę by zmienne ciągłe były standaryzowane, ale nie zmienne obojętne.W jaki sposób argument standaryzacyjny glmnet obsługuje fałszywe zmienne?

Obecnie robię to ręcznie, najpierw definiując fałszywy wektor kolumn, które mają tylko wartości [0,1], a następnie używając polecenia scale we wszystkich kolumnach innych niż pozorne. Problem polega na tym, że nie jest to zbyt eleganckie.

Ale glmnet posiada wbudowany standardize argument. Domyślnie będzie to również standaryzować manekiny? Jeśli tak, czy istnieje elegancki sposób, aby powiedzieć argumentowi glmnet o standardize, aby pominąć atrapy?

+0

Dlaczego robisz wszystko, dodatkowej pracy? –

+0

@DWin Nie widzę innej drogi. Jeśli glmnet nie dyskryminuje, to muszę. Jak już napisałem poniżej, jeśli nie możemy zinterpretować współczynnika na standardowej zmiennej obojętnej, to przed standaryzacją muszę oddzielić manekiny od non-dummies. –

Odpowiedz

10

Krótko mówiąc, tak - będzie to standaryzację zmiennych obojętne, ale nie jest to powód do tego. Funkcja glmnet zajmuje macierzy jako wejście dla jego X parametru, a nie ramki danych, więc to nie robi różnicy dla factor kolumn, które mogą mieć, jeśli parametr był data.frame. Jeśli przyjrzeć funkcją R, kody glmnet parametr standardize wewnętrznie jako

isd = as.integer(standardize) 

który przetwarza wartość logiczną R w 0 lub 1 całkowitej paszy dowolnego z wewnętrznymi funkcjami FORTRAN (elnet, lognet Et ..! al)

Jeśli pójść jeszcze dalej poprzez analizę kodu FORTRAN (stała szerokość - old school), zobaczysz następujący blok:

  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 

Spójrz na linii oznaczonej 1000 - to jest zasadniczo stosowanie formuły standaryzacji do t on matryca X.

Teraz statystycznie rzecz biorąc, jeden na ogół nie standaryzację zmiennych kategorycznych zachować interpretability szacowanych regresorów. Jednak, jak podkreślił Tibshirani here „Metoda lasso wymaga wstępnej standaryzacji regresorów, tak że system penalizacja jest sprawiedliwe dla wszystkich regresorów Dla kategorycznych regresorów jeden koduje REGRESSOR ze zmiennych binarnych, a następnie standaryzuje zmienne fikcyjne.” - więc podczas gdy powoduje to arbitralne skalowanie pomiędzy zmiennymi ciągłymi i kategorycznymi, jest to zrobione dla równego traktowania kar.

+2

Zrobiłem trochę [podobny dig up] (https: // thinklab.com/discussion/computing-standardized-logistic-regression-coefficients/205 # 5) w celu potwierdzenia sposobu, w jaki glmnet ponownie przekształcał współczynniki po dopasowaniu do standardowych zmiennych. Funtran :-) –

+0

z "pomocy glmneta": "Współczynniki są zawsze zwracane w oryginalnej skali". Tak więc interpretowalność współczynników nie powinna stanowić problemu. – pbahr

+0

Podczas gdy współczynniki są "w oryginalnej skali", karanie L1 i L2 z natury prowadzi do uprzedzenia współczynników regresora, aby spróbować zredukować wariancję (patrz [Wariancja odchyleń wariancji] (https://en.wikipedia.org/wiki/Bias%E2 % 80% 93variance_tradeoff)), co oznacza, że ​​nie należy ich traktować jako obiektywnych szacunków wpływu na wartość zmiennej zależnej. Tylko wyjaśnienie :) –

3

glmnet nie wie nic o zmiennych binarnych wiedzieć, ponieważ nie ma interfejsu wzór (a więc nie dotykać model.frame i model.matrix). Jeśli chcesz, żeby być traktowany specjalnie, będziesz musiał zrobić samemu.

+0

Czy można pozwolić standaryzacji manekinów? –

+2

Odpowiadając na moje własne pytanie powyżej. ** Nie, nie jest w porządku standaryzacja manekinów. ** Cytując http://www.sagepub.com/upm-data/21120_Rozdział_7.pdf, strona 140: "niestandaryzowany współczynnik dla fałszywego regresora można zinterpretować jako oczekiwaną odpowiedź -zmienna różnica między daną kategorią a kategorią podstawową dla zestawu pozornie-regresorowego (kontrolowanie, oczywiście, dla innych zmiennych objaśniających w modelu) .Jeśli współczynnik obojętny-regresor jest standaryzowany, wówczas ta prosta interpretacja jest tracona. " –

+0

@R_User Czy chcesz dodać odpowiedź na podstawie Twojego komentarza? Wtedy mógłbym przyjąć twoją odpowiedź. –

Powiązane problemy