रैखिक समीकरण में कारकों और संवादात्मक शब्दों के लिए गुणांक शब्द कैसे लागू करें?


9

R का उपयोग करते हुए, मैंने निरंतर और असतत भविष्यवक्ताओं के मिश्रण से एकल प्रतिक्रिया चर के लिए एक रैखिक मॉडल फिट किया है। यह uber-basic है, लेकिन मुझे यह समझने में परेशानी हो रही है कि असतत कारक के लिए गुणांक कैसे काम करता है।

संकल्पना: जाहिर है, सतत चर 'x' का गुणांक फॉर्म में लागू होता है y = coefx(varx) + interceptलेकिन यदि कारक गैर-संख्यात्मक है तो यह कारक z के लिए कैसे काम करता है?y = coefx(varx) + coefz(factorz???) + intercept

विशिष्ट: मैंने R के रूप में एक मॉडल फिट किया है lm(log(c) ~ log(d) + h + a + f + h:a)जहां असतत hऔर fगैर-संख्यात्मक कारक हैं। गुणांक हैं:

Coefficients:
              Estimate 
(Intercept)  -0.679695 
log(d)        1.791294 
h1            0.870735  
h2           -0.447570  
h3            0.542033   
a             0.037362  
f1           -0.588362  
f2            0.816825 
f3            0.534440
h1:a         -0.085658
h2:a         -0.034970 
h3:a         -0.040637

मैं भविष्यवाणिय समीकरण बनाने के लिए इनका उपयोग कैसे करूँ:

log(c) =  1.791294(log(d)) + 0.037362(a) + h??? + f???? + h:a???? + -0.679695

या मैं गलत कर रहा हूं?

मुझे लगता है कि यह अवधारणा है कि अगर विषय श्रेणी में आता है h1और f2, समीकरण बन जाता है:

log(c) =  1.791294(log(d)) + 0.037362(a) +  0.870735  + 0.816825  + h:a???? + -0.679695

लेकिन मैं वास्तव में स्पष्ट नहीं हूं कि h:aइंटरेक्टिव शब्द कैसे पार्स हो जाता है। मुझ पर आसान होने के लिए धन्यवाद।

जवाबों:


14

यह कोई समस्या नहीं है जो R. R. गुणांक के पारंपरिक प्रदर्शन का उपयोग करता है।

जब आप इस तरह के रिग्रेशन आउटपुट (एक पेपर, टेक्स्टबुक या सांख्यिकीय सॉफ्टवेयर से) पढ़ते हैं, तो आपको यह जानना होगा कि कौन से चर "निरंतर" हैं और जो "श्रेणीबद्ध" हैं:

  • "निरंतर" वाले स्पष्ट रूप से संख्यात्मक होते हैं और उनके संख्यात्मक मानों का उपयोग प्रतिगमन फिटिंग में होता है।

  • "श्रेणीबद्ध" चर किसी भी प्रकार के हो सकते हैं , जिनमें संख्यात्मक भी शामिल हैं! जो उन्हें स्पष्ट करता है वह यह है कि सॉफ्टवेयर ने उन्हें "कारक" के रूप में माना है: अर्थात्, प्रत्येक विशिष्ट मूल्य जो पाया जाता है उसे कुछ अलग का सूचक माना जाता है ।

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

    फिर भी, फिटिंग एल्गोरिदम को लागू करने के लिए संख्याओं के रूप में श्रेणीबद्ध चर का प्रतिनिधित्व किया जाना चाहिए। उन्हें एनकोड करने के कई तरीके हैं। कोड "डमी चर" का उपयोग करके बनाए गए हैं। इस साइट पर खोज करके डमी चर एन्कोडिंग के बारे में अधिक जानकारी प्राप्त करें; विवरण यहाँ मायने नहीं रखता।

प्रश्न में हमें बताया गया है कि hऔर fश्रेणीबद्ध ("असतत") मूल्य हैं। डिफ़ॉल्ट रूप से, log(d)और aनिरंतर हैं। बस इतना ही हमें पता होना चाहिए। मॉडल है

y=0.679695+1.791294 log(d)+0.870735 if h=h10.447570 if h=h2+0.542033 if h=h3+0.037362 a0.588362 if f=f1+0.816825 if f=f2+0.534440 if f=f30.085658 a if h=h10.034970 a if h=h20.040637 a if h=h3

यहाँ लागू नियम हैं:

  • "इंटरसेप्ट" शब्द, यदि यह दिखाई देता है, तो एक additive स्थिरांक (पहली पंक्ति) है।

  • सतत चर, उनके गुणांकों से गुणा कर रहे हैं "बातचीत" में भी तरह h1:a, h2:aहै, और h3:aशर्तों। (यह मूल प्रश्न का उत्तर देता है।)

  • कोई भी श्रेणीगत चर (या कारक) केवल उन मामलों के लिए शामिल किया जाता है जहां उस कारक का मूल्य प्रकट होता है।

उदाहरण के लिए, मान लीजिए कि , , , और । इस मॉडल में फिटेड वैल्यू हैlog(d)=2h=h3a=1f=f2

y^=0.6797+1.7913×(2)+0.5420+0.0374×(1)+0.81680.0406×(1).

सूचना कैसे मॉडल गुणांकों के सबसे बस, गणना में दिखाई नहीं देते क्योंकि hपर ले जा सकते हैं वास्तव में तीन में से एक मान , , और इसलिए केवल तीन गुणांक में से एक पर लागू होता है और केवल तीन गुणांक में से एक बातचीत में गुणा करेंगे ; इसी तरह, किसी विशेष मामले में केवल एक गुणांक लागू होता है ।h1h2h3(0.870735,0.447570,0.542033)h(0.085658,0.034970,0.040637)ah:af


8

यह सिर्फ एक टिप्पणी है लेकिन यह हमारे निपटान में सीमित संपादन बक्से के रूप में फिट नहीं होगा।

मुझे स्पष्ट रूप से सादे पाठ में लिखा एक प्रतिगमन समीकरण देखना पसंद है, जैसा कि @whuber ने अपने उत्तर में किया था। Hmisc पैकेज के साथ R में इसका एक त्वरित तरीका है । (मैं भी rms का उपयोग कर रहा हूँ , लेकिन यह वास्तव में कोई फर्क नहीं पड़ता।) असल में, यह केवल मानता है कि आपके मशीन पर एक टाइपसेटिंग सिस्टम उपलब्ध है।LATEX

आइए पहले कुछ आंकड़ों का अनुकरण करें,

n <- 200
x1 <- runif(n)
x2 <- runif(n)
x3 <- runif(n)
g1 <- gl(2, 100, n, labels=letters[1:2])
g2 <- cut2(runif(n), g=4)
y <- x1 + x2 + rnorm(200)

फिर एक प्रतिगमन मॉडल फिट करें,

f <- ols(y ~ x1 + x2 + x3 + g1 + g2 + x1:g1)

जो निम्नलिखित परिणाम देता है:

Linear Regression Model

ols(formula = y ~ x1 + x2 + x3 + g1 + g2 + x1:g1)

                Model Likelihood     Discrimination    
                   Ratio Test           Indexes        
Obs      200    LR chi2     35.22    R2       0.161    
sigma 0.9887    d.f.            8    R2 adj   0.126    
d.f.     191    Pr(> chi2) 0.0000    g        0.487    

Residuals

    Min      1Q  Median      3Q     Max 
-3.1642 -0.7109  0.1015  0.7363  2.7342 

                   Coef    S.E.   t     Pr(>|t|)
Intercept           0.0540 0.2932  0.18 0.8541  
x1                  1.1414 0.3642  3.13 0.0020  
x2                  0.8546 0.2331  3.67 0.0003  
x3                 -0.0048 0.2472 -0.02 0.9844  
g1=b                0.2099 0.2895  0.73 0.4692  
g2=[0.23278,0.553)  0.0609 0.1988  0.31 0.7598  
g2=[0.55315,0.777) -0.2615 0.1987 -1.32 0.1896  
g2=[0.77742,0.985] -0.2107 0.1986 -1.06 0.2901  
x1 * g1=b          -0.2354 0.5020 -0.47 0.6396  

फिर, इसी प्रतिगमन समीकरण को प्रिंट करने के लिए, बस जेनेरिक latexफ़ंक्शन का उपयोग करें , जैसे:

latex(f)

डीवीआई को पीएनजी में बदलने पर, आपको ऐसा कुछ प्राप्त करना चाहिए

यहाँ छवि विवरण दर्ज करें

IMO, यह दिखाने का गुण है कि संख्यात्मक और श्रेणीबद्ध भविष्यवक्ताओं के लिए वास्तविक या चुने हुए मूल्यों के आधार पर अनुमानित मूल्यों की गणना कैसे करें। उत्तरार्द्ध के लिए, कारक स्तरों को इसी गुणांक के पास ब्रैकेट में इंगित किया गया है।


1
+1 यह एक अच्छी क्षमता है। जैसे शब्दों का वाक्य विन्यास+0.2099013{b}, हालांकि, संभावित रूप से भ्रमित है: इस अभिव्यक्ति और स्पष्ट चर के बीच कोई स्पष्ट संबंध नहीं है g1, और न ही यह पूरी तरह से स्पष्ट है कि{b}वास्तव में एक संकेतक के लिए खड़ा हैg1=b के बजाय संख्यात्मक मूल्य के लिए b! (यहाँ,b वास्तव में "बी" का अर्थ है - पत्र - जो पर्याप्त चेतावनी हो सकती है, लेकिन जब श्रेणियों को संख्याओं द्वारा कोडित किया जाता है, जैसे कि 0 तथा 1, देखना ...)
whuber

1
@whuber उपरोक्त छवि को क्रॉप कर दिया गया है, लेकिन एक फुटनोट को याद करते हुए कहा गया है कि "{c} = 1 यदि विषय समूह c, 0 में है, तो" ( cइस विशेष मामले में पसंद का चयन भ्रमित हो सकता है, क्योंकि मैं दो अक्षर चुनता हूं G1 स्तरों का प्रतिनिधित्व करते हैं, लेकिन आमतौर पर यह काफी सहज है - और यह शुद्ध टेक्स है इसलिए हम अभी भी स्रोत फ़ाइल को बाद में संपादित कर सकते हैं)। संलग्न एक और सारांश है जहां मैं बदल गया g1ताकि यह अब चार-स्तरीय कारक हो। फिर भी, 0/1 लेबल के साथ जो अधिक भ्रमित हो सकता है
ch

5

आप अपने "विरोधाभासों" की जाँच कर सकते हैं और इसके लिए डिफ़ॉल्ट हैं options():

$contrasts
        unordered           ordered 
"contr.treatment"      "contr.poly" 

यदि आपके अनियंत्रित विरोधाभासों को सेट किया जाता है contr.treatment(जैसा कि उन्हें तब तक होना चाहिए जब तक कि आपने उन्हें बदल नहीं दिया है), तो आपके प्रत्येक कारक का पहला स्तर आधार रेखा के रूप में सेट किया जाएगा। आपको केवल कारक के अन्य स्तरों के लिए बनाए गए डमी चर के सामने गुणांक के लिए अनुमान दिया जाएगा । वास्तव में, वे गुणांक "कारक के आधारभूत स्तर की तुलना में कारक के इस स्तर पर प्रतिक्रिया चर कितना औसत है, मॉडल में बाकी सब कुछ के लिए नियंत्रित होता है" होगा।

मैं आपके आउटपुट से अनुमान लगा रहा हूं कि ए h0और f0जो एच और एफ के लिए आधारभूत स्तर हैं (जब तक कि आपके पास गैर-डिफ़ॉल्ट विकल्प नहीं है, उस स्थिति में कई संभावनाएं हैं। ?contr.treatmentकुछ मदद के लिए प्रयास करें )।

यह बातचीत के साथ समान है। यदि मेरा पिछला पैराग्राफ सही है, तो दिए गए अनुमान aवास्तव में aकब के लिए ढलान होंगे h=h0। सारांश में दिए गए अनुमान जो इंटरैक्शन पर लागू होते हैं, वे हैं कि ढलान विभिन्न स्तरों के लिए कितना बदलता है h

तो आपके उदाहरण में जहां h = h1 और f = f2 है, कोशिश करें:

log(c) =  1.791294(log(d)) + (0.037362 - 0.085658) (a) +  0.870735  + 0.816825  -0.679695

ओह, और आप predict()बहुत सारी उपयोगी चीजें करने के लिए भी उपयोग कर सकते हैं ... यदि आप वास्तव में कुछ भविष्यवाणी करना चाहते हैं (बजाय एक रिपोर्ट के समीकरण को लिखने के)। ?predict.lmयह देखने की कोशिश करें कि predict()किसी वस्तु का निर्माण किसके द्वारा किया जाता है lm


+1 (वास्तव में, मैंने इसे एक महीने पहले अपटेड किया था और किसी भी दर पर इसे फिर से रीयरिंग करना था), यह मेरे साथ होता है कि आप इसके विपरीत प्रकार की जाँच करने की सलाह देते हैं options()। आपको जो कुछ भी ज़रूरत है उसे खोजने के लिए आपको बहुत सारे कबाड़ से स्क्रॉल करना होगा। आप कोशिश कर सकते हैं options()$contrasts, जो केवल वही आउटपुट करेगा जो आप चाहते हैं।
गंग - मोनिका

अच्छा सुझाव है, मेरा दिमाग सो रहा होगा।
पीटर एलिस

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