GAM में इंटरेक्शन टर्म कैसे शामिल करें?


24

निम्नलिखित कोड दो समय श्रृंखला के बीच समानता का मूल्यांकन करता है:

set.seed(10)
RandData <- rnorm(8760*2)
America <- rep(c('NewYork','Miami'),each=8760)

Date = seq(from=as.POSIXct("1991-01-01 00:00"), 
           to=as.POSIXct("1991-12-31 23:00"), length=8760)

DatNew <- data.frame(Loc = America,
                     Doy = as.numeric(format(Date,format = "%j")),
                     Tod = as.numeric(format(Date,format = "%H")),
                     Temp = RandData,
                     DecTime = rep(seq(1, length(RandData)/2) / (length(RandData)/2),
                                   2))
require(mgcv)
mod1 <- gam(Temp ~ Loc + s(Doy) + s(Doy,by = Loc) +
  s(Tod) + s(Tod,by = Loc),data = DatNew, method = "ML")

यहां, gamयह मूल्यांकन करने के लिए उपयोग किया जाता है कि दिन के अलग-अलग समय में न्यूयॉर्क और मियामी का तापमान औसत तापमान (दोनों स्थानों के) से कैसे भिन्न होता है। मेरे पास अब जो समस्या है वह यह है कि मुझे एक इंटरैक्शन टर्म शामिल करने की आवश्यकता है जो यह दर्शाता है कि प्रत्येक स्थान का तापमान वर्ष के विभिन्न दिनों के लिए दिन भर में कैसे भिन्न होता है। मैं अंततः इस जानकारी को एक ग्राफ (प्रत्येक स्थान के लिए) पर प्रदर्शित करने की उम्मीद करता हूं। तो, मियामी के लिए मुझे उम्मीद है कि एक ग्राफ होगा जो दिखाता है कि दिन के अलग-अलग समय के दौरान तापमान अलग-अलग होता है और वर्ष के अलग-अलग समय (3 डी प्लॉट?)।


2
आपको इस प्रश्न का उत्तर मिल सकता है । आँकड़े .stackexchange.com /questions/ 18937/… प्रासंगिक।
जूलमैन

जवाबों:


18

"ए" इन "गम" का अर्थ "एडिटिव" होता है, जिसका कोई मतलब नहीं है, इसलिए यदि आप इंटरैक्शन को फिट करते हैं तो आप वास्तव में किसी गम मॉडल को फिट नहीं कर रहे हैं।

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

आप एक अन्य फिटिंग उपकरण के रूप में प्रक्षेपण खोज प्रतिगमन को भी देख सकते हैं। ढीले या अधिक पैरामीट्रिक मॉडल (पाप और / या कॉस के साथ) भी उपयोगी हो सकते हैं।

किस उपकरण पर निर्णय लेने का एक हिस्सा है कि आप किस प्रश्न का उत्तर देने की कोशिश कर रहे हैं। क्या आप भविष्य की तारीखों और समय की भविष्यवाणी करने के लिए एक मॉडल खोजने की कोशिश कर रहे हैं? क्या आप यह देखने के लिए परीक्षण करने की कोशिश कर रहे हैं कि क्या मॉडल में विशेष भविष्यवक्ता महत्वपूर्ण हैं? क्या आप एक भविष्यवक्ता और परिणाम के बीच संबंधों के आकार को समझने की कोशिश कर रहे हैं? कुछ और?


3
मान लीजिए कि आपके पास दो भविष्यवाणियां हैं - अभी भी नहीं है? इसे कुछ अर्थों में 'अंतःक्रिया' माना जा सकता है। इसके अलावा, मुझे लगता है कि पैकेज आपको (जो यह सोचता है कि तर्क क्या कर रहा है) जैसे मॉडल फिट करने की अनुमति देता है । क्या वह अभी भी एक गेम है? y = 1 ( एक्स 1 ) + 2 ( एक्स 2 ) + 3 ( एक्स 1 एक्स 2 ) + ε y = 1 ( एक्स 1 ) + 2 ( एक्स 2 ) + 3 ( x 1 ) x 2 + f 4 ( x 2)एक्स1,एक्स2
y=1(एक्स1)+2(एक्स2)+3(एक्स1एक्स2)+ε
gam
y=1(एक्स1)+2(एक्स2)+3(एक्स1)एक्स2+4(एक्स2)एक्स1+ε
by
मैक्रो

1
@ मैक्रो, यह इस बात पर निर्भर करता है कि आप बालों को विभाजित करना चाहते हैं या नहीं (अच्छी तरह से तकनीकी रूप से आपने जो लिखा है वह शायद हो जाएगा क्योंकि आप वास्तव में जी भाग का उपयोग नहीं कर रहे हैं)।
ग्रेग स्नो

2
@ मैक्रो, मुझे यकीन है कि इस विषय पर और अधिक कहा गया है, लेकिन इस स्थान के लेख के GAMs पर पेज 4 देखें, Exegeses on रैखिक मॉडल । यह बिल्कुल स्पष्ट नहीं है कि गैर-योज्य मुख्य प्रभाव और बातचीत प्रभाव एक साथ कैसे पहचाने जाते हैं।
एंडी डब्ल्यू

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

2
@AndyW यह ध्यान रखना महत्वपूर्ण है कि वेनटेबल द्वारा उन पर टिप्पणी करने के बाद से जीएएम ने एक लंबा रास्ता तय किया है - पिछले एक दशक में हुए घटनाक्रम या तो दंडित सेंसु सेंसु साइमन वुड (जैसा कि mgcv में लागू किया गया है ) और पूरी तरह से गेशियन ट्रीटमेंट एड्रेस मुद्दों जैसे चिकनाई चयन, बातचीत और उन्हें कैसे फिट करने के लिए (additive मॉडल ढांचे में सीमांत ठिकानों के दसियों उत्पाद)। मुझे विश्वास है कि जीएबी और कॉक्स की जीएएम को आपत्ति है क्योंकि पूर्व एक्सजीज में उल्लिखित जीएएम थ्योरी में इन हालिया घटनाक्रमों को बड़ी हद तक संबोधित किया गया है।
मोनिका - जी। सिम्पसन

25

दो निरंतर चर के लिए फिर आप वह कर सकते हैं जो आप चाहते हैं (चाहे यह एक बातचीत हो या न हो, मैं अन्य लोगों को @ ग्रेग के जवाब के लिए टिप्पणियों के अनुसार चर्चा करने के लिए छोड़ दूंगा)

mod1 <- gam(Temp ~ Loc + s(Doy, bs = "cc", k = 5) + 
                         s(Doy, bs = "cc", by = Loc, k = 5, m = 1) + 
                         s(Tod, bs = "cc", k = 5) + 
                         s(Tod, bs = "cc", by = Loc, k = 5, m = 1) +
                         te(Tod, Doy, by = Loc, bs = rep("cc",2)),
            data = DatNew, method = "ML")

सरल मॉडल को तब और अधिक जटिल मॉडल के भीतर नेस्टेड किया जाना चाहिए। वह सरल मॉडल है:

mod0 <- gam(Temp ~ Loc + s(Doy, bs = "cc", k = 5) + 
                         s(Doy, bs = "cc", by = Loc, k = 5, m = 1) + 
                         s(Tod, bs = "cc", k = 5) + 
                         s(Tod, bs = "cc", by = Loc, k = 5, m = 1),
            data = DatNew, method = "ML")

यहाँ दो बातें नोट करें:

  1. प्रत्येक चिकनी के लिए आधार-प्रकार बताया गया है। इस मामले में हम उम्मीद करेंगे कि 23:59 और 00:00 के बीच टेंप में कोई डिस्कॉफ़िट Todन हो Doy == 1और न ही बीच में और Doy == 365.25। इसलिए चक्रीय क्यूबिक विभाजन उचित हैं, इसके माध्यम से यहां संकेत दिया गया है bs = "cc"
  2. आधार आयाम स्पष्ट रूप से कहा गया है ( k = 5)। यह एक te()शब्द में प्रत्येक चिकनी के लिए डिफ़ॉल्ट आधार आयाम से मेल खाता है ।

साथ में ये विशेषताएं सुनिश्चित करती हैं कि सरल मॉडल वास्तव में अधिक जटिल मॉडल के भीतर निहित है।

Mgcv?gam.models में अधिक देखने के लिए ।


आपके 2 अंक से संबंधित - के विनिर्देश के अलावा k, किसी को समुद्री मील (जैसे fx=TRUE) की संख्या भी ठीक करनी चाहिए । यदि नहीं, तो परिणामी मॉडल edfप्रत्येक पद के लिए भिन्न होता है ।
बॉक्स

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

3
उम्मीद है कि कोई भी इस धागे को देख रहा है और जवाब दे सकता है। इन मॉडलों में, आपको कैसे आना चाहिए s(Doy...)और दोनों को निर्दिष्ट करना चाहिए s(Doy, by =Loc...)? मैंने सोचा था कि पहले वाले को बाद में नेस्टेड किया जाएगा और इस तरह निर्दिष्ट करने के लिए अकारण होगा?
अहं_

3
नहीं, पहला स्मूथ ग्लोबल फंक्शन है और इसके और ग्लोबल स्मूथ के बीच साइट-विशिष्ट अंतर को सुचारू रूप से प्रस्तुत करता है। m = 1हालांकि, चिकने अंतर के लिए पहले व्युत्पन्न पर जुर्माना लगाने के लिए उन्हें वास्तव में स्मूदी की जरूरत होती है ।
मोनिका को बहाल करें - जी। सिम्पसन

2
@JoshuaRosenberg यदि आपका मतलब है te(), तो यह निर्भर करता है कि आप टेंसर उत्पाद में क्या शामिल हैं? यहाँ वर्णित इंटरैक्शन फैक्टर-स्मूथ इंटरैक्शन हैं, लेकिन te()दो या अधिक निरंतर चर का अर्थ होगा। यदि आप वैश्विक शब्द और विषय-विशिष्ट विचलन चाहते हैं, तो हाँ, te(DoY, Year, by = Loc, m = 1)साथ-साथ उपयोग कर सकते हैं te(DoY, Year), हालांकि यादृच्छिक प्रभाव-समान-सुचारू इंटरैक्शन और te()यादृच्छिक प्रभाव वाली युक्तियों का उपयोग करके समान चीज़ों को प्राप्त करने के अन्य तरीके हैं ।
मोनिका को बहाल करें - जी। सिम्पसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.