2013-07-26 6 views
13

मेरे डेटासेट में मेरे पास कई निरंतर और डमी चर हैं। ग्लैमनेट के साथ विश्लेषण के लिए, मैं निरंतर चर को मानकीकृत करना चाहता हूं लेकिन डमी चर नहीं।ग्लैमनेट के मानकीकृत तर्क डमी चर को कैसे संभालता है?

मैं वर्तमान में कॉलम के एक डमी वेक्टर को परिभाषित करके मैन्युअल रूप से ऐसा करता हूं जिसमें केवल [0,1] के मान हैं और फिर सभी गैर-डमी कॉलम पर scale कमांड का उपयोग करते हैं। समस्या यह है कि यह बहुत ही सुरुचिपूर्ण नहीं है।

लेकिन ग्लैमनेट standardize तर्क में बनाया गया है। डिफ़ॉल्ट रूप से यह डमी को भी मानकीकृत करेगा? यदि हां, तो क्या डमी को छोड़ने के लिए ग्लैमनेट के standardize तर्क को बताने का एक शानदार तरीका है?

+0

आप वह अतिरिक्त काम क्यों कर रहे हैं? –

+0

@DWin मुझे एक और तरीका नहीं दिख रहा है। यदि ग्लैमनेट भेदभाव नहीं करता है, तो मुझे इसकी आवश्यकता है। जैसा कि मैंने अभी नीचे पोस्ट किया है, अगर हम मानकीकृत डमी वैरिएबल पर एक गुणांक की व्याख्या नहीं कर सकते हैं, तो मुझे मानकीकरण से पहले डमी को गैर-डमी से अलग करने की आवश्यकता है। –

उत्तर

10

संक्षेप में, हाँ - यह डमी चर को मानकीकृत करेगा, लेकिन ऐसा करने का एक कारण है। glmnet फ़ंक्शन X पैरामीटर के लिए इनपुट के रूप में एक मैट्रिक्स लेता है, डेटा फ्रेम नहीं, इसलिए यह factor कॉलम के लिए भेद नहीं करता है, यदि पैरामीटर data.frame था। आप आर समारोह पर एक नज़र, glmnet कोड standardize रूप

isd = as.integer(standardize) 

कौन सा एक 0 या 1 पूर्णांक के लिए आर बूलियन धर्मान्तरित आंतरिक FORTRAN कार्य (Elnet, lognet, एट में से किसी को खिलाने के लिए पैरामीटर आंतरिक रूप से लेते हैं ।। - अल)

आप FORTRAN कोड (निश्चित चौड़ाई का परीक्षण करके भी आगे जाने हैं पुराने स्कूल), तो आपको निम्न ब्लॉक देखेंगे:

  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 चिह्नित लाइनों पर एक नजर डालें - यह मूल रूप से टी को मानकीकरण फॉर्मूला लागू कर रहा है वह X मैट्रिक्स।

अब सांख्यिकीय रूप से बोलते हुए, कोई आमतौर पर अनुमानित प्रतिद्वंद्वियों की व्याख्या को बनाए रखने के लिए विशिष्ट चर को मानकीकृत नहीं करता है। हालांकि, जैसा कि तिब्शीरानी here द्वारा इंगित किया गया है, "लासो विधि को प्रतिद्वंद्वियों के प्रारंभिक मानकीकरण की आवश्यकता होती है, ताकि दंडकरण योजना सभी प्रतिद्वंद्वियों के लिए उचित हो। वर्गीकृत regressors के लिए, एक डमी चर के साथ regressor कोड और फिर डमी चर का मानकीकरण" - इसलिए जब यह निरंतर और स्पष्ट चर के बीच मनमाने ढंग से स्केलिंग का कारण बनता है, यह बराबर दंड के उपचार के लिए किया जाता है।

+2

मैंने कुछ [समान खुदाई] किया था (https: // thinklab।कॉम/चर्चा/कंप्यूटिंग-मानकीकृत-लॉजिस्टिक-रिग्रेशन-गुणांक/205 # 5) मानकीकृत चर पर फ़िट होने के बाद ग्लोनेट गुणांक को दोबारा बदलने के तरीके की पुष्टि करने के लिए। फंट्रान :-) –

+0

'ग्लमनेट की मदद से: "गुणांक हमेशा मूल पैमाने पर लौटाए जाते हैं"। तो, गुणांक की व्याख्या एक मुद्दा नहीं होना चाहिए। – pbahr

+0

जबकि गुणांक "मूल पैमाने पर" हैं, एल 1 और एल 2 दंड मूल रूप से पुनर्विक्रेता गुणांक को भिन्नता को कम करने और कम करने के लिए पूर्वाग्रह करता है (देखें [बाईस-वेरिएंस ट्रेडऑफ] (https://en.wikipedia.org/wiki/Bias%E2 % 80% 93variance_tradeoff)), जिसका अर्थ है कि उन्हें निर्भर चर के मूल्य पर प्रभाव के निष्पक्ष अनुमान के रूप में नहीं माना जाना चाहिए। बस एक स्पष्टीकरण :) –

3

glmnet डमी चर के बारे में कुछ भी पता नहीं है, क्योंकि यह एक सूत्र इंटरफेस नहीं है (और इसलिए स्पर्श नहीं करता है model.frame और model.matrix।) आप चाहते हैं उन्हें विशेष रूप से इलाज किया जाना है, तो आप करना होगा तुम्हरे द्वारा।

+0

क्या यह डमी को मानकीकृत करने के लिए ठीक है? –

+2

ऊपर दिए गए अपने प्रश्न का उत्तर दें। ** नहीं, डमीज़ को मानकीकृत करना ठीक नहीं है। ** http://www.sagepub.com/upm-data/21120_Chapter_7.pdf उद्धरण, पृष्ठ 140: "एक डमी रेग्रेसर के लिए एक गैर-मानकीकृत गुणांक अपेक्षित प्रतिक्रिया के रूप में व्याख्या योग्य है डमी-रेग्र्रेसर सेट के लिए एक विशेष श्रेणी और बेसलाइन श्रेणी के बीच अविश्वसनीय अंतर (मॉडल में अन्य स्पष्टीकरण चर के लिए, निश्चित रूप से नियंत्रित करना)। यदि एक डमी-रेग्रेसर गुणांक मानकीकृत होता है, तो यह सरल व्याख्या खो जाती है। " –

+0

@R_User क्या आप अपनी टिप्पणी के आधार पर एक उत्तर जोड़ना चाहते हैं? मैं फिर जवाब के रूप में स्वीकार कर सकता हूं। –

संबंधित मुद्दे