आर में डमी कोडिंग के बजाय प्रभाव कोडिंग के साथ प्रतिगमन कैसे करें?


15

मैं वर्तमान में एक प्रतिगमन मॉडल पर काम कर रहा हूं जहां मेरे पास केवल स्वतंत्र वेरिएबल के रूप में श्रेणीबद्ध / कारक चर हैं। मेरा आश्रित चर एक परिवर्तनित अनुपात है।

आर में एक सामान्य प्रतिगमन को चलाना काफी आसान है, क्योंकि आर स्वचालित रूप से जानते हैं कि डमी को कैसे कोड करना है जैसे ही वे "कारक" प्रकार के होते हैं। हालाँकि इस प्रकार की कोडिंग का अर्थ यह भी है कि प्रत्येक चर में से एक श्रेणी को आधार रेखा के रूप में प्रयोग किया जाता है, जिससे व्याख्या करना कठिन हो जाता है।

मेरे प्रोफेसर ने मुझे केवल (-1 या 1) के बजाय प्रभाव कोडिंग का उपयोग करने के लिए कहा है, क्योंकि इससे इंटरसेप्ट के लिए भव्य माध्य का उपयोग होता है।

क्या किसी को पता है कि कैसे संभालना है?

अब तक मैंने कोशिश की है:

gm <- mean(tapply(ds$ln.crea, ds$month,  mean))
model <- lm(ln.crea ~ month + month*month + year + year*year, data = ds, contrasts = list(gm = contr.sum))

Call:
lm(formula = ln.crea ~ month + month * month + year + year * 
    year, data = ds, contrasts = list(gm = contr.sum))

Residuals:
     Min       1Q   Median       3Q      Max 
-0.89483 -0.19239 -0.03651  0.14955  0.89671 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -3.244493   0.204502 -15.865   <2e-16 ***
monthFeb    -0.124035   0.144604  -0.858   0.3928    
monthMar    -0.365223   0.144604  -2.526   0.0129 *  
monthApr    -0.240314   0.144604  -1.662   0.0993 .  
monthMay    -0.109138   0.144604  -0.755   0.4520    
monthJun    -0.350185   0.144604  -2.422   0.0170 *  
monthJul     0.050518   0.144604   0.349   0.7275    
monthAug    -0.206436   0.144604  -1.428   0.1562    
monthSep    -0.134197   0.142327  -0.943   0.3478    
monthOct    -0.178182   0.142327  -1.252   0.2132    
monthNov    -0.119126   0.142327  -0.837   0.4044    
monthDec    -0.147681   0.142327  -1.038   0.3017    
year1999     0.482988   0.200196   2.413   0.0174 *  
year2000    -0.018540   0.200196  -0.093   0.9264    
year2001    -0.166511   0.200196  -0.832   0.4073    
year2002    -0.056698   0.200196  -0.283   0.7775    
year2003    -0.173219   0.200196  -0.865   0.3887    
year2004     0.013831   0.200196   0.069   0.9450    
year2005     0.007362   0.200196   0.037   0.9707    
year2006    -0.281472   0.200196  -1.406   0.1625    
year2007    -0.266659   0.200196  -1.332   0.1855    
year2008    -0.248883   0.200196  -1.243   0.2164    
year2009    -0.153083   0.200196  -0.765   0.4461    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

Residual standard error: 0.3391 on 113 degrees of freedom
Multiple R-squared: 0.3626, Adjusted R-squared: 0.2385 
F-statistic: 2.922 on 22 and 113 DF,  p-value: 0.0001131 

1
देखो, विरोधाभास मुझे लगता है कि इसके कॉन्ट्रो.सुम को भव्य माध्य के खिलाफ परीक्षण करने के लिए - आर मदद फाइलों की जांच करें
user20650

2
यह सहायक हो सकता है: unc.edu/courses/2006spring/ecol/145/001/docs/lectures/…
mark999

जवाबों:


13

सिद्धांत रूप में, दो प्रकार के कंट्रास्ट कोडिंग हैं, जिसके साथ इंटरसेप्ट ग्रैंड मीन का अनुमान लगाएगा। ये सम विषम और दोहराया विरोधाभासी (स्लाइडिंग अंतर) हैं।

यहाँ एक उदाहरण डेटा सेट है:

set.seed(42)
x <- data.frame(a = c(rnorm(100,2), rnorm(100,1),rnorm(100,0)),
                b = rep(c("A", "B", "C"), each = 100))

शर्तों का अर्थ है:

tapply(x$a, x$b, mean)
         A           B           C 
2.03251482  0.91251629 -0.01036817 

द ग्रैंड मीन:

mean(tapply(x$a, x$b, mean))
[1] 0.978221

आप contrastsपैरामीटर के साथ कंट्रास्ट कोडिंग के प्रकार को निर्दिष्ट कर सकते हैंlm

सम विषम

lm(a ~ b, x, contrasts = list(b = contr.sum))

Coefficients:
(Intercept)           b1           b2  
     0.9782       1.0543      -0.0657 

इंटरसेप्ट ग्रैंड माध्य है। पहला ढलान पहले कारक स्तर और ग्रैंड मीन के बीच का अंतर है। दूसरा ढलान दूसरे कारक स्तर और ग्रैंड मीन के बीच का अंतर है।

बार-बार विरोधाभास

बार-बार विरोधाभास बनाने का कार्य MASSपैकेज का हिस्सा है ।

lm(a ~ b, x, contrasts = list(b = MASS::contr.sdif))

Coefficients:
(Intercept)         b2-1         b3-2  
     0.9782      -1.1200      -0.9229 

इंटरसेप्ट ग्रैंड माध्य है। ढलान लगातार कारक स्तरों (2 बनाम 1, 3 बनाम 2) के बीच के अंतरों का अनुमान लगाते हैं।


हम्म, आपने जो सुझाव दिया था, उसे अभी आज़माया है, लेकिन मुझे यकीन नहीं है कि कोई भी कोड वही करता है जो मुझे चाहिए। बात यह है कि मेरे पास एक IV में वर्ष {1998, ..., 2007} है और दूसरे IV में महीने {Jan, ..., Dec}। जैसा कि अब यह है कि lm फ़ंक्शन स्वचालित रूप से अप्रैल को इंटरसेप्ट बनने के साथ-साथ 1998 भी बना देता है। इसके बजाय मैं चाहता हूं कि इंटरसेप्ट एक समग्र माध्य हो ... मुझे वास्तव में नहीं पता है कि क्या इसके बारे में सोचते समय समझ में आता है ...
कास्पर क्राइस्टेंसन

@KasperChristensen यदि आप उदाहरणों में विरोधाभासों को निर्दिष्ट करते हैं, तो इंटरसेप्ट ग्रैंड मीन होगा। कृपया जो आपने प्रयास किया है, उसका एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण प्रदान करें।
स्वेन होइनस्टीन

@SvenHohenstein, सम विषम में C श्रेणीबद्ध मान के लिए कोई बी 3 गुणांक क्यों नहीं है? यह -0.9885891 होना चाहिए।
विवाल्डी

@Vivaldi बी 3 का मूल्य इंटरसेप्ट और बी 1, बी 2 द्वारा निर्धारित किया जाता है। एक और विपरीत के लिए स्वतंत्रता की कोई डिग्री नहीं है।
स्वेन होइनस्टीन

@ SvenHohenstein b3 के बाद से इसे अधिक संपार्श्विकता की समस्या नहीं है क्योंकि इसे सीधे अन्य चर के रैखिक संयोजन के रूप में व्यक्त किया जा सकता है: (3 * भव्य माध्य - b1 - b2)?
विवाल्डी

6

नाइटपैकिंग: यदि आपके प्रोफेसर ने आपको अपने चरों के साथ कोड करने के लिए कहा था (-1, 1), तो उन्होंने आपको प्रभाव कोडिंग का उपयोग करने के लिए कहा , न कि प्रभाव आकारों पर । किसी भी दर पर, @ user20650 सही है। हमेशा की तरह, यूसीएलए सांख्यिकी मदद वेबसाइट में एक उपयोगी पृष्ठ है जो यह बताता है कि आर के साथ ऐसा कैसे करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.