GLM में डमी (मैनुअल या स्वचालित) चर निर्माण को समझना


13

यदि एक कारक चर (उदाहरण के लिए एम और एफ के स्तर के साथ लिंग) का उपयोग glm सूत्र में किया जाता है, तो डमी चर (s) बनाए जाते हैं, और उनके संबंधित गुणांकों (जैसे लिंगम) के साथ glm मॉडल सारांश में पाया जा सकता है

यदि, इस तरह से कारक को विभाजित करने के लिए R पर निर्भर होने के बजाय, कारक संख्यात्मक 0/1 चर (उदाहरण के लिए लिंग 1, M के लिए 0, F के लिए 1), लिंग (1 के लिए F, 0 के लिए 0) की श्रृंखला में इनकोड किया गया है। M) और इन चरों का उपयोग glm सूत्र में संख्यात्मक चर के रूप में किया जाता है, क्या गुणांक कोई भिन्न होगा?

मूल रूप से सवाल यह है: क्या कारक चर बनाम संख्यात्मक चर के साथ काम करते समय आर एक अलग गुणांक गणना का उपयोग करता है?

अनुवर्ती प्रश्न (संभवत: उपरोक्त द्वारा उत्तर दिया गया है): आर को डमी वैरिएबल बनाने की क्षमता के अलावा, क्या संख्यात्मक 0,1 वैरिएबल की एक श्रृंखला के रूप में री-कोडिंग कारकों के साथ कोई समस्या है और इसके बजाय मॉडल का उपयोग कर रहे हैं?


2
गुणांक समान होगा, कारकों के लिए आर का डिफ़ॉल्ट कोडिंग ठीक उसी तरह है जैसा आपने वर्णित किया है (इसे "डमी" कोडिंग कहा जाता है)। यदि मैन्युअल रूप से ऐसा कर रहे हैं, तो आपको "डमी वैरिएबल ट्रैप" से अवगत कराना होगा - आप सभी गए वैरिएबल को शामिल नहीं कर सकते हैं , लेकिन केवल एन - 1 को शामिल कर सकते हैं (वैकल्पिक रूप से, अवरोधन को छोड़कर ); अन्यथा आपके मॉडल को पहचान लिया गया है। एन्कोडिंग फैक्टर चर के अन्य तरीके भी हैं। NN1
चक्कर

@ मेरा अनुमान है कि अगर मैं लिंगम और लिंगफ दोनों में खिलाया जाता हूं, तो उनमें से एक गुणांक के लिए NA लौट आएगा (इस संदेश के साथ कि एक चर को विलक्षणताओं के कारण बाहर रखा गया था)। यह समझ में आता है क्योंकि वे इस मामले में पूरी तरह से रैखिक रूप से संबंधित हैं। लेकिन आप कहते हैं कि मैं सभी एन को शामिल नहीं कर सकता; इसका मतलब यह है कि भले ही लिंग एनए पर सेट हो, यह लिंगम गुणांक के लिए मतभेद / समस्याओं का परिणाम होगा? या, अधिक सरल रूप से, यदि GLM / LM विलक्षणताओं के कारण वैरिएबल्स को बाहर कर देता है, तो एक ओवरसाइज़्ड मॉडल का उपयोग एक समस्या है? (मैं आपकी बात से सहमत हूं - सिर्फ व्यावहारिक प्रभाव का हवाला देते हुए)
ब्रायन

जवाबों:


22

श्रेणीबद्ध चर (जिसे " R में कारक " कहा जाता है ) को कई प्रतिगमन मॉडल में संख्यात्मक कोड द्वारा प्रस्तुत किया जाना चाहिए। संख्यात्मक कोड के निर्माण के लिए बहुत से संभावित तरीके हैं ( यूसीएलए के आँकड़े सहायता साइट पर इस महान सूची को देखें )। डिफ़ॉल्ट रूप से, R संदर्भ स्तर कोडिंग का उपयोग करता है (जिसे R "contr.treatment" कहता है), और जो डिफ़ॉल्ट रूप से बहुत अधिक विस्तृत है। यह आपके संपूर्ण R सत्र के लिए सभी विरोधाभासों का उपयोग करके बदला जा सकता है ? विकल्प , या विशिष्ट विश्लेषणों / चर का उपयोग करने के लिए ? विरोधाभासों या ? सी (राजधानी पर ध्यान दें)। यदि आपको संदर्भ स्तर कोडिंग के बारे में अधिक जानकारी की आवश्यकता है, तो मैं इसे यहां बताता हूं: सप्ताह के दिनों के उदाहरण के लिए प्रतिगमन पर आधारित

कुछ लोगों को संदर्भ स्तर कोडिंग भ्रामक लगती है, और आपको इसका उपयोग करने की आवश्यकता नहीं है। यदि आप चाहते हैं, तो आपके पास पुरुष और महिला के लिए दो चर हो सकते हैं; इसे स्तर का मतलब कोडिंग कहा जाता है। हालाँकि, यदि आप ऐसा करते हैं, तो आपको अवरोधन को दबाने की आवश्यकता होगी या मॉडल मैट्रिक्स विलक्षण होगा और प्रतिगमन @ नोटों के ऊपर फिट नहीं किया जा सकता है और जैसा कि मैं यहाँ बताता हूँ: गुणात्मक चर कोडिंग से विलक्षणता होती है । अवरोधन को दबाने के लिए, आप अपने सूत्र को जोड़कर -1या +0जैसे: y~... -1या y~... +0

(constant)sexMsexMt0sexMt0

set.seed(1)
y    = c(    rnorm(30), rnorm(30, mean=1)         )
sex  = rep(c("Female",  "Male"          ), each=30)
fem  = ifelse(sex=="Female", 1, 0)
male = ifelse(sex=="Male", 1, 0)

ref.level.coding.model   = lm(y~sex)
level.means.coding.model = lm(y~fem+male+0)

summary(ref.level.coding.model)
# ...
# Coefficients:
#             Estimate Std. Error t value Pr(>|t|)    
# (Intercept)  0.08246    0.15740   0.524    0.602    
# sexMale      1.05032    0.22260   4.718 1.54e-05 ***
#   ---
#   Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# ...
summary(level.means.coding.model)
# ...
# Coefficients:
#      Estimate Std. Error t value Pr(>|t|)    
# fem   0.08246    0.15740   0.524    0.602    
# male  1.13277    0.15740   7.197 1.37e-09 ***
#   ---
#   Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# ...

1
कोड को जोड़ने के लिए धन्यवाद: यह स्पष्ट रूप से दर्शाता है कि संदर्भ सेल कोडिंग में अंतर = सेक्सफैब इन सेल का मतलब कोडिंग है (मैं एन -1 चर के "क्या हुआ" द्वारा इसके अतिरिक्त भ्रमित था ...) शायद एक और प्रश्न की आवश्यकता है, लेकिन यह एक चर के साथ समझना आसान है, 2 या अधिक के बारे में क्या? उदाहरण के लिए आयु: "बूढ़ा" "युवा"। रेफरी सेल कोडिंग में, गुणांक सेक्समैले के लिए दिखाएगा, ageYoung (उदाहरण के लिए) और BOTH sexFairy और ageOld के लिए अवरोधन खाता?
ब्रायन

1
यदि आपके पास एक कारक w / 3 स्तर है, तो अवरोधन रेफरी स्तर का मतलब है, और अन्य 2 को आउटपुट में दर्शाया जाएगा। उनके गुणांक दोनों अंतर b / t होंगे और रेफरी स्तर और उनके ps उन विभिन्नताओं का महत्व होगा। यदि आपके पास 2 कारक हैं, तो दोनों में रेफरी स्तर होंगे, और इंटरसेप्ट उन लोगों का मतलब होगा, जो दोनों रेफरी समूहों (जैसे young F) और अन्य स्तरों में भिन्न होंगे b / t दिए गए स्तर का कारक 1 w / t होगा अन्य कारक और दोनों रेफरी स्तर समूह के रेफरी स्तर। जैसे oldहै old F- `युवा F , & M` है young M- young F
गूँग - मोनिका

1
मैंने इसके साथ थोड़ा सा खेला और R^2दोनों दृष्टिकोणों के बीच पर्याप्त अंतर का अनुभव किया। मुझे पता है कि यह केवल एक है R^2, लेकिन क्या इसके लिए कोई स्पष्टीकरण है?
हंस

@ hans0l0, मुझे कोई पता नहीं है। कोई अंतर नहीं होना चाहिए।
गंग -

1
@confused, आप पा सकते हैं कि दस्तावेज में, ? GLM
गूँग - मोनिका

2

अनुमानित गुणांक उसी स्थिति के अधीन होगा जो आप अपने डमी चर (यानी संख्यात्मक वाले) को आर के अनुरूप बनाते हैं। उदाहरण के लिए: 'एक नकली डेटा बनाने और कारक का उपयोग करके एक पॉइज़न ग्लम फिट करने देता है। ध्यान दें कि glफ़ंक्शन एक कारक चर बनाता है।

> counts <- c(18,17,15,20,10,20,25,13,12)
> outcome <- gl(3,1,9)
> outcome
[1] 1 2 3 1 2 3 1 2 3
Levels: 1 2 3
> class(outcome)
[1] "factor"
> glm.1<- glm(counts ~ outcome, family = poisson())
> summary(glm.1)

Call:
glm(formula = counts ~ outcome, family = poisson())

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.9666  -0.6713  -0.1696   0.8471   1.0494  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   3.0445     0.1260  24.165   <2e-16 ***
outcome2     -0.4543     0.2022  -2.247   0.0246 *  
outcome3     -0.2930     0.1927  -1.520   0.1285    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 10.5814  on 8  degrees of freedom
Residual deviance:  5.1291  on 6  degrees of freedom
AIC: 52.761

Number of Fisher Scoring iterations: 4

चूंकि परिणाम के तीन स्तर होते हैं, इसलिए मैं दो डमी चर बनाता हूं (dummy.1 = 0 यदि परिणाम = 2 और dummy.2 = 1 यदि परिणाम = 3) और इन संख्यात्मक मानों का उपयोग करके परिशोधित करें:

> dummy.1=rep(0,9)
> dummy.2=rep(0,9)
> dummy.1[outcome==2]=1
> dummy.2[outcome==3]=1
> glm.2<- glm(counts ~ dummy.1+dummy.2, family = poisson())
> summary(glm.2)

Call:
glm(formula = counts ~ dummy.1 + dummy.2, family = poisson())

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.9666  -0.6713  -0.1696   0.8471   1.0494  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   3.0445     0.1260  24.165   <2e-16 ***
dummy.1      -0.4543     0.2022  -2.247   0.0246 *  
dummy.2      -0.2930     0.1927  -1.520   0.1285    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 10.5814  on 8  degrees of freedom
Residual deviance:  5.1291  on 6  degrees of freedom
AIC: 52.761

Number of Fisher Scoring iterations: 4

जैसा कि आप देख सकते हैं कि अनुमानित गुणांक समान हैं। लेकिन यदि आप एक ही परिणाम प्राप्त करना चाहते हैं तो अपने डमी वैरिएबल बनाते समय आपको सावधान रहने की आवश्यकता है। उदाहरण के लिए यदि मैं दो डमी चर बनाता हूं (dummy.1 = 0 यदि परिणाम = 1 और डमी। 2 = 1 यदि परिणाम = 2) तो अनुमानित परिणाम निम्नानुसार हैं:

> dummy.1=rep(0,9)
> dummy.2=rep(0,9)
> dummy.1[outcome==1]=1
> dummy.2[outcome==2]=1
> glm.3<- glm(counts ~ dummy.1+dummy.2, family = poisson())
> summary(glm.3)

Call:
glm(formula = counts ~ dummy.1 + dummy.2, family = poisson())

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.9666  -0.6713  -0.1696   0.8471   1.0494  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   2.7515     0.1459   18.86   <2e-16 ***
dummy.1       0.2930     0.1927    1.52    0.128    
dummy.2      -0.1613     0.2151   -0.75    0.453    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 10.5814  on 8  degrees of freedom
Residual deviance:  5.1291  on 6  degrees of freedom
AIC: 52.761

Number of Fisher Scoring iterations: 4

यह जब आप जोड़ने के वजह से है outcomeglm.1 में चर, डिफ़ॉल्ट रूप से आर दो डमी चर अर्थात् बनाता है outcome2और outcome3और उन्हें परिभाषित करता है इसी तरह dummy.1और dummy.2glm.2 यानी में परिणाम के पहले स्तर जब अन्य सभी डमी चर (है outcome2और outcome3) होने के लिए सेट कर रहे हैं शून्य।


अनुमानित गुणांक के कोड प्रमाण के लिए धन्यवाद समान है। अपने स्वयं के निर्माण पर चेतावनी भी उपयोगी है: मैं अपना स्वयं का निर्माण करना चाहता था क्योंकि तब एक मॉडल चर नाम से एक डेटाबेस कॉलम में सीधे टाई करेगा (जो उपयोगी बहाव हो सकता है), लेकिन ऐसा लगता है कि मुझे कैसे मुद्दों के साथ समझने की आवश्यकता है मैं यह करने के बारे में जाना।
ब्रायन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.