कैसे mgcv GAM मॉडल में स्मूथिंग को ट्यून करें


14

मैं यह पता लगाने की कोशिश कर रहा हूं कि कैसे एक mgcv में चौरसाई मापदंडों को नियंत्रित करने के लिए: गाम मॉडल।

मेरे पास एक द्विपद चर है जिसे मैं मुख्य रूप से x और y के एक फ़ंक्शन के रूप में मॉडल करने की कोशिश कर रहा हूं जो एक निश्चित ग्रिड पर समन्वय करता है, साथ ही कुछ अन्य चर अधिक मामूली प्रभावों के साथ। अतीत में मैंने पैकेज लोफिट और सिर्फ (एक्स, वाई) मूल्यों का उपयोग करके एक बहुत अच्छे स्थानीय प्रतिगमन मॉडल का निर्माण किया है।

हालांकि, मैं अन्य चर को मॉडल में शामिल करने का प्रयास करना चाहता हूं, और यह सामान्यीकृत additive मॉडल (GAM) की तरह लग रहा था। संकुल गम और mgcv को देखने के बाद, दोनों का GAM फ़ंक्शन होता है, मैंने बाद के लिए चुना क्योंकि मेलिंग सूची थ्रेड्स में कई टिप्पणियां इसकी सिफारिश करती हैं। एक नकारात्मक पक्ष यह है कि यह एक स्थानीय प्रतिगमन चिकना का समर्थन नहीं करता है जैसे कि लोटस या लोकोफिट।

शुरू करने के लिए, मैं बस (x, y) निर्देशांक का उपयोग करते हुए, लगभग हर स्थान मॉडल को दोहराने की कोशिश करना चाहता था। मैंने नियमित और टेंसर उत्पाद दोनों को सुगम बनाने की कोशिश की:

my.gam.te <- gam(z ~ te(x, y), family=binomial(logit), data=my.data, scale = -1)

my.gam.s  <- gam(z ~  s(x, y), family=binomial(logit), data=my.data, scale = -1)

हालांकि, मॉडल से भविष्यवाणियों की साजिश करते हुए, वे लोफिट मॉडल की तुलना में बहुत अधिक चिकनी हैं। इसलिए मैं मॉडल को ट्यून करने की कोशिश कर रहा हूं कि ज्यादा से ज्यादा न देखूं। मैंने मापदंडों को सपा और कश्मीर को समायोजित करने की कोशिश की है, लेकिन यह मेरे लिए स्पष्ट नहीं है कि वे कैसे चौरसाई को प्रभावित करते हैं। लोफिट में, एनएन पैरामीटर कम इस्तेमाल किए जाने वाले छोटे मूल्यों और अधिक "विगलिंग" के साथ उपयोग किए गए पड़ोस की अवधि को नियंत्रित करता है, जो ग्रिड पर कुछ क्षेत्रों को पकड़ने में मदद करता है जहां द्विपद परिणामों की संभावना तेजी से बदलती है। मैं उसी तरह का व्यवहार करने में सक्षम करने के लिए गम मॉडल की स्थापना के बारे में कैसे जाऊंगा?

जवाबों:


23

kतर्क प्रभावी रूप से प्रत्येक शब्द के लिए समरेखण मैट्रिक्स के आयामी स्वरूप सेट करता है। gam()चिकनाई की एक इष्टतम राशि का चयन करने के लिए GCV या UBRE स्कोर का उपयोग कर रहा है, लेकिन यह केवल चिकनाई मैट्रिक्स की आयामीता के भीतर काम कर सकता है। डिफ़ॉल्ट रूप से, te()चिकनी में k = 5^22 डी सतहों के लिए है। मैं भूल गया कि यह क्या है s()इसलिए दस्तावेजों की जांच करें। Mgcv के लेखक साइमन वुड की वर्तमान सलाह यह है कि यदि मॉडल द्वारा चुनी गई चिकनाई की डिग्री उपयोग की गई मूल्य द्वारा लगाए गए आयामीता की सीमा के करीब या करीब है k, तो आपको यह kदेखने के लिए मॉडल को बढ़ाना चाहिए और फिर से देखना चाहिए कि क्या अधिक जटिल मॉडल को उच्च आयामी चौरसाई मैट्रिक्स से चुना गया है।

हालाँकि, मुझे नहीं पता कि लोफिट कैसे काम करता है, लेकिन आपको कुछ भी करने से रोकने की ज़रूरत है जो आपको एक सतह (जीसीवी और यूबीआरई, या आरईएल) को फिट करने से रोक देता है, यदि आप उनका उपयोग करना चुनते हैं तो [आप नहीं कर सकते हैं] सेट scale = -1], बस ऐसा करने की कोशिश कर रहे हैं), जो डेटा द्वारा समर्थित नहीं है। दूसरे शब्दों में, आप डेटा की बहुत स्थानीय विशेषताओं को फिट कर सकते हैं, लेकिन क्या आप एकत्र किए गए डेटा के नमूने में शोर को फिट कर रहे हैं या क्या आप संभाव्यता वितरण के साधन को फिट कर रहे हैं? gam() हो सकता है कि आप अपने डेटा से जो अनुमान लगाया जा सकता है, उसके बारे में कुछ बता रहे हों , यह मानते हुए कि आपने आधार की आयामीता (ऊपर) को छांटा है।

एक और बात यह देखने की है कि वर्तमान में आप जिस स्मूदी का उपयोग कर रहे हैं वह इस मायने में वैश्विक है कि चुनी गई चिकनाई चिकनी की पूरी श्रृंखला पर लागू होती है। अनुकूली स्मूदी डेटा के कुछ हिस्सों में आवंटित चिकनाई "भत्ता" खर्च कर सकते हैं जहां प्रतिक्रिया तेजी से बदल रही है। gam()अनुकूली स्मूदी का उपयोग करने की क्षमता है।

देखें ?smooth.termsऔर ?adaptive.smoothदेखें कि क्या उपयोग करके फिट किया जा सकता है gam()te()इन सभी स्मूदों में से अधिकांश को संयोजित नहीं किया जा सकता है (डॉक्स की जांच करें, जिनके लिए टेनर उत्पादों में शामिल नहीं किया जा सकता है) ताकि आप डेटा के कुछ हिस्सों में महीन स्थानीय पैमाने पर कब्जा करने की कोशिश करने के लिए एक अनुकूली चिकनी आधार का उपयोग कर सकें। प्रतिक्रिया जल्दी से भिन्न हो रही है।

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


बहुत बहुत धन्यवाद, गेविन, इस तरह के एक विस्तृत जवाब के लिए। मैंने पूरी तरह से अनुकूली स्मूदी को याद किया, और उन्हें आजमाऊंगा। मैं ओवरफिटिंग पर चिंता को समझता हूं, लेकिन मैं अब तक गम के साथ जो कर रहा था, वह डेटा में विशेषताएं नहीं दिखा रहा था जो कि डोमेन विशेषज्ञता के माध्यम से वहां जाना जाता है।
कर्नल त्रिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.