आर में प्राकृतिक घन स्प्लिट्स में समुद्री मील की स्थापना


23

मेरे पास कई सहसंबद्ध सुविधाओं के साथ डेटा है, और मैं एक एलडीए चलाने से पहले एक सुचारू आधार फ़ंक्शन के साथ सुविधाओं को कम करके शुरू करना चाहता हूं। मैं फंक्शन के splinesसाथ पैकेज में प्राकृतिक क्यूबिक स्प्लिन का उपयोग करने की कोशिश कर रहा हूं nsमैं गाँठों को असाइन करने के बारे में कैसे जाऊँ?

यहाँ मूल आर कोड है:

library(splines)
lda.pred <- lda(y ~ ns(x, knots=5))

लेकिन मुझे इस बारे में कोई जानकारी नहीं है कि समुद्री मील को कैसे चुना जाए ns


3
क्या आप इस बारे में पूछ रहे हैं कि में गांठ को कैसे निर्दिष्ट किया जाए (यानी, ns के तर्क के माध्यम से ) या क्या आप गाँठ लगाने के लिए रणनीति तय करने के बारे में पूछ रहे हैं? R
कार्डिनल

1
हारेल, रिग्रेशन स्ट्रैटेजीज 2015 देखें, जहां समुद्री मील रखने के लिए एक अच्छी चर्चा के लिए (यह कोई फर्क नहीं पड़ता, इसलिए क्वांटाइल कुछ भी उतना ही अच्छा है - अपवाद हैं यदि आपके पास कुछ बिंदुओं पर व्यवहार परिवर्तन पर विश्वास करने के लिए ध्वनि कारण हैं) समुद्री मील की संख्या (3, 4, या 5 एन पर निर्भर करता है)
सांख्यिकीगीत

जवाबों:


40

आर में समुद्री मील कैसे निर्दिष्ट करें

nsसमारोह एक उत्पन्न करता है प्राकृतिक प्रतिगमन पट्टी एक इनपुट वेक्टर दी आधार। गांठों को या तो एक डिग्री-ऑफ-फ्रीडम तर्क के माध्यम से निर्दिष्ट किया जा सकता है dfजो एक पूर्णांक लेता है या एक समुद्री मील तर्क के माध्यम से knotsहोता है जो एक वेक्टर लेता है जो समुद्री मील का वांछित स्थान देता है। ध्यान दें कि आपके द्वारा लिखे गए कोड में

library(splines)
lda.pred <- lda(y ~ ns(x, knots=5))

आपने पांच समुद्री मील का अनुरोध नहीं किया है, बल्कि स्थान 5 पर एकल (आंतरिक) गाँठ का अनुरोध किया है ।

यदि आप dfतर्क का उपयोग करते हैं, तो वेक्टर की मात्रा के आधार पर आंतरिक समुद्री मील का चयन किया जाएगा x। उदाहरण के लिए, यदि आप कॉल करते हैं

ns(x, df=5)

फिर आधार में क्रमशः 20 वीं, 40 वीं, 60 वीं और 80 वीं मात्राओं में रखी गई दो सीमा गांठें और 4 आंतरिक समुद्री मील शामिल xहोंगे। सीमा समुद्री मील, डिफ़ॉल्ट रूप से, न्यूनतम और अधिकतम पर रखी जाती हैं x

यहाँ समुद्री मील के स्थानों को निर्दिष्ट करने के लिए एक उदाहरण है

x <- 0:100
ns(x, knots=c(20,35,50))

यदि आप कॉल करने के बजाय ns(x, df=4), आप क्रमशः 25, 50 और 75 स्थानों पर 3 आंतरिक समुद्री मील के साथ समाप्त हो जाएगा।

आप यह भी निर्दिष्ट कर सकते हैं कि क्या आप एक अवरोधन शब्द चाहते हैं। आम तौर पर यह निर्दिष्ट नहींns किया जाता है क्योंकि अक्सर सबसे अधिक संयोजन के साथ उपयोग किया जाता है lm, जिसमें एक अवरोधन निहित होता है (जब तक कि मजबूर न हो)। यदि आप intercept=TRUEअपने कॉल में उपयोग करते हैं ns, तो सुनिश्चित करें कि आप जानते हैं कि आप ऐसा क्यों कर रहे हैं, क्योंकि यदि आप ऐसा करते हैं और फिर lmभोलेपन से कॉल करते हैं , तो डिज़ाइन मैट्रिक्स रैंक की कमी हो जाएगी।

गांठ लगाने की रणनीतियाँ

नॉट को आमतौर पर क्वांटाइल्स में रखा जाता है, जैसे कि डिफ़ॉल्ट व्यवहार ns। अंतर्ज्ञान यह है कि यदि आपके पास बहुत सारे डेटा एक साथ बंद हो गए हैं, तो आप उस क्षेत्र में किसी भी संभावित गैरकानूनी मॉडल के लिए अधिक समुद्री मील चाहते हैं। लेकिन, इसका मतलब यह नहीं है कि (ए) एकमात्र विकल्प या (बी) सबसे अच्छा विकल्प है।

अन्य विकल्प स्पष्ट रूप से बनाए जा सकते हैं और डोमेन-विशिष्ट हैं। आपके भविष्यवक्ताओं के हिस्टोग्राम और घनत्व के अनुमानों को देखते हुए, जहां डेटा की जरूरत होती है, वहां सुराग दे सकते हैं, जब तक कि कुछ "कैनोनिकल" विकल्प आपके डेटा को न दे दें।

प्रतिगमन की व्याख्या करने के संदर्भ में, मैं यह नोट करूंगा कि जब आप निश्चित रूप से गाँठ लगाने के साथ "चारों ओर" खेल सकते हैं, तो आपको यह महसूस करना चाहिए कि आप इसके लिए एक मॉडल-चयन जुर्माना लगाते हैं कि आपको मूल्यांकन के लिए सावधान रहना चाहिए और किसी भी इनफ़ेक्शन को समायोजित करना चाहिए। परिणाम।


यह देखते हुए x <- 0:100, ब्रेकपॉइंट्स को परिभाषित करने का "उचित" तरीका है knots_x <- quantile(x, probs=c(.2, .35, .5)), जो तब ns(x, knots=knots_x)क्रमशः 25, 50 और 75 स्थानों पर 3 आंतरिक समुद्री मील को परिभाषित करने के लिए उपयोग किया जाएगा । उत्तर में मुझे जो उलझन हुई वह यह थी कि मैं knotsतर्क में वांछित मात्राओं को निर्दिष्ट करने की आवश्यकता की अपेक्षा कर रहा था , जबकि मुझे xवेक्टर से वास्तविक मूल्यों को इनपुट करने की आवश्यकता है ...
लैंड्रोनी

स्वास्थ्य सर्वेक्षण, प्राकृतिक splines के लिए एडवर्ड एल कॉर्न, बैरी मैं Graubard p.98 राज्य कि Durrleman और साइमन (1989) की सिफारिश की (0.05,0.50,0.95) द्वारा विश्लेषण
क्रिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.