2013-07-26 11 views
13

In meinem Datensatz habe ich eine Anzahl von kontinuierlichen und Dummy-Variablen. Für die Analyse mit Glmnet möchte ich, dass die kontinuierlichen Variablen standardisiert sind, aber nicht die Dummy-Variablen.Wie behandelt das Standardisierungsargument von glmnet Dummy-Variablen?

Ich mache dies derzeit manuell, indem ich zuerst einen Dummy-Vektor von Spalten definiere, die nur Werte von [0,1] haben, und dann den scale-Befehl für alle Nicht-Dummy-Spalten verwende. Problem ist, das ist nicht sehr elegant.

Aber Glmnet hat ein eingebautes standardize Argument. Standardmäßig standardisiert dies auch die Dummies? Wenn ja, gibt es eine elegante Möglichkeit zu sagen, Glmnet standardize Argument zu überspringen Dummies?

+0

Warum machst du all diese zusätzliche Arbeit? –

+0

@DWin Ich sehe keinen anderen Weg. Wenn glmnet nicht diskriminiert, muss ich es tun. Wie ich gerade geschrieben habe, wenn wir einen Koeffizienten für eine standardisierte Dummy-Variable nicht interpretieren können, muss ich vor der Standardisierung Dummies von Nicht-Dummies trennen. –

Antwort

10

Kurz gesagt, ja - das wird die Dummy-Variablen standardisieren, aber es gibt einen Grund dafür. Die glmnet Funktion nimmt eine Matrix als Eingabe für ihren X Parameter, nicht einen Datenrahmen, so dass sie nicht für factor Spalten unterscheidet, die Sie haben könnten, wenn der Parameter ein data.frame wäre. Wenn Sie einen Blick auf die R-Funktion, glmnet Codes der standardize Parameter intern als

isd = as.integer(standardize) 

dem die R boolean auf einen 0 oder 1 ganze Zahl umwandelt einem der internen FORTRAN Funktionen zuzuführen (ELNET, LogNet, et ..! al)

Wenn Sie noch weiter gehen, indem der Fortran-Code (feste Breite Prüfung - alte Schule), werden Sie den folgenden Block sehen:

  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 

einen Blick auf die Linien nehmen markiert 1000 - Hier wird im Wesentlichen die Standardisierungsformel auf t angewendet er X Matrix.

Jetzt standardisiert man kategorische Variablen im Allgemeinen nicht, um die Interpretierbarkeit der geschätzten Regressoren beizubehalten. Wie jedoch von Tibshirani here ausgeführt, "erfordert die Lasso-Methode eine anfängliche Standardisierung der Regressoren, so dass das Bestrafungsschema für alle Regressoren angemessen ist. Bei kategorischen Regressoren kodiert man den Regressor mit Dummy-Variablen und standardisiert dann die Dummy-Variablen" Während dies eine willkürliche Skalierung zwischen kontinuierlichen und kategorischen Variablen bewirkt, wird dies für eine gleichwertige Bestrafung getan.

+2

Ich habe einige [ähnliche Grabung] (https: // thinklab.com/Diskussion/computing-standardized-logistic-Regression-Koeffizienten/205 # 5), um zu bestätigen, wie glmnet die Koeffizienten nach Anpassung an die standardisierten Variablen neu transformierte. Funtran :-) –

+0

aus 'glmnet''s Hilfe:" Die Koeffizienten werden immer auf der Originalskala zurückgegeben ". Daher sollte die Interpretierbarkeit der Koeffizienten kein Problem darstellen. – pbahr

+0

Während die Koeffizienten "auf der ursprünglichen Skala" sind, belasten die L1- und L2-Bestrafung die Regressor-Koeffizienten inhärent, um zu versuchen, die Varianz zu reduzieren (siehe [Bias-Varianz-Kompromiss] (https://en.wikipedia.org/wiki/Bias%E2 % 80% 93variance_tradeoff)), was bedeutet, dass sie nicht als unverzerrte Schätzungen der Auswirkungen auf den Wert der abhängigen Variablen behandelt werden sollten. Nur eine Klarstellung :) –

3

glmnet weiß nichts über Dummy-Variablen, weil es keine Formel-Schnittstelle besitzt (und damit nicht model.frame und model.matrix berührt.) Wenn Sie wollen, speziell behandelt werden, was Sie tun müssen es selbst.

+0

Ist es in Ordnung, die Dummies standardisieren zu lassen? –

+2

Beantworte meine eigene Frage, oben. ** Nein, es ist nicht in Ordnung, Dummies zu standardisieren. ** Zitat http://www.sagepub.com/upm-data/21120_Chapter_7.pdf, Seite 140: "Ein nicht standardisierter Koeffizient für einen Dummy-Regressor kann als erwartete Antwort interpretiert werden - Variabler Unterschied zwischen einer bestimmten Kategorie und der Baseline-Kategorie für den Dummy-Regressor-Satz (natürlich unter Berücksichtigung der anderen erklärenden Variablen im Modell). Wenn ein Dummy-Regressor-Koeffizient standardisiert ist, geht diese einfache Interpretation verloren. –

+0

@R_User Möchten Sie eine Antwort basierend auf Ihrem Kommentar hinzufügen? Ich könnte dann deine als Antwort akzeptieren. –

Verwandte Themen