R में gl में 'NA' मानों का व्यवहार कैसे किया जाता है


19

मेरे पास एक डेटा तालिका T1 है, जिसमें लगभग एक हजार चर (V1) और लगभग 200 मिलियन डेटा बिंदु हैं। डेटा विरल है और अधिकांश प्रविष्टियां NA हैं। प्रत्येक डेटा पॉइंट्स में दूसरे से अलग होने के लिए एक अद्वितीय आईडी और डेट जोड़ी होती है।

मेरे पास एक और टेबल T2 है, जिसमें चर (V2) का एक अलग सेट है। इस तालिका में आईडी और तिथि जोड़ी भी है जो विशिष्ट रूप से T2 में प्रविष्टियों की पहचान करती है।

हमें संदेह है कि T1 में डेटा का उपयोग T2 में चर के मूल्यों की भविष्यवाणी करने के लिए किया जा सकता है।

इसे साबित करने के लिए, मैंने R में 'glm' मॉडल लागू करने और यह जांचने के लिए सोचा कि क्या हम वास्तव में T2 में कुछ चर पा सकते हैं जो T1 में चर पर निर्भर हैं।

T2 में प्रत्येक चर के लिए, मैंने T1 में एक ही आईडी और दिनांक जोड़ी वाले सभी डेटा को निकालना शुरू कर दिया, जिसके परिणामस्वरूप कुछ परीक्षण चर के लिए बहुत छोटे ~ 50K डेटा बिंदु थे।

अब मैं glm के अनुप्रयोग से जो समस्याएँ आ रही हूँ वह इस प्रकार है।

  1. कुछ मामलों में, यह मुझे 'फिट नहीं पाया गया' और 'glm.fit: एल्गोरिथ्म में अभिसरण नहीं' की चेतावनी दिखाता है। मुझे यकीन नहीं है कि यह क्यों दिखाया गया है?

  2. चमक में NA का इलाज कैसे किया जाता है? क्या यह पहले 'NA' से जुड़े सभी रिकॉर्ड को हटा देता है और फिर फिटिंग करता है?

  3. क्या पहले सभी NAs को निकालना एक अच्छी रणनीति है और फिर 'glm' को कॉल करें। मुझे डर है कि यह डेटा पॉइंट्स को काफी कम कर सकता है क्योंकि उनमें से ज्यादातर एनए हैं।

  4. गुणांक की गणना करने के लिए किस विधि का उपयोग किया जाता है। मैं किसी भी वेबसाइट या पेपर या पुस्तक को नहीं खोज सका जो यह चर्चा करे कि आउटपुट की गणना कैसे की जाती है।

मैंने 'NA' के साथ और बिना glm का परीक्षण किया और अलग-अलग उत्तर पाए जो बताते हैं कि NAs को डेटा फिटिंग करते समय माना जाता है:

उदाहरण 1:

> tmpData
  x1 x2 x3        Y
1  1  1  1        3
2  1  0  4        5
3  1  2  3        6
4  0  3  1        4

Call:  glm(formula = as.formula(paste(dep, " ~ ", paste(xn, collapse = "+"))), 
    na.action = na.exclude)

Coefficients:
                      (Intercept)  as.numeric(unlist(tmpData["x1"]))  as.numeric(unlist(tmpData["x2"]))  
                        5.551e-16                          1.000e+00                          1.000e+00  
as.numeric(unlist(tmpData["x3"]))  
                        1.000e+00  

Degrees of Freedom: 3 Total (i.e. Null);  0 Residual
Null Deviance:      5 
Residual Deviance: 9.861e-31    AIC: -260.6 

उदाहरण 2:

'x1'    'x2'    'x3'    'Y'
100000  1   NA  2
1   1   1   3
1   NA  -1124   2
1   0   4   5
1   2   3   6
0   3   1   4



Coefficients:
                      (Intercept)  as.numeric(unlist(tmpData["x1"]))  as.numeric(unlist(tmpData["x2"]))  as.numeric(unlist(tmpData["x3"]))  
                       -2.3749044                         -0.0000625                          0.6249899                          1.8749937  

Degrees of Freedom: 5 Total (i.e. Null);  2 Residual
Null Deviance:      13.33 
Residual Deviance: 1.875    AIC: 20.05 

जवाबों:


27

NA हैंडलिंग: आप यह नियंत्रित कर सकते हैं कि कैसे गुम हुए डेटा को glm हैंडल करता है। glm () में एक तर्क है na.actionजो इंगित करता है कि डेटा में NA को संभालने के लिए glm द्वारा निम्नलिखित में से कौन से सामान्य कार्य का उपयोग किया जाना चाहिए:

  • na.omitऔर na.exclude: अवलोकन हटा दिए जाते हैं यदि उनमें कोई लापता मान होता है; अगर na.exclude का उपयोग किया जाता है, तो कुछ कार्य अवशेष मामलों के लिए NAs डालकर अवशेषों और भविष्यवाणियों को सही लंबाई में बदल देंगे।
  • na.pass: NA सहित सभी डेटा रखें
  • na.fail: ऑब्जेक्ट को केवल तभी लौटाता है, जब उसमें कोई लापता मान न हो

यदि आप na.action सेट नहीं करते हैं, तो glm () R के वैश्विक विकल्पों की जांच करेगा कि क्या कोई डिफ़ॉल्ट सेट है। आप अपने विकल्पों को एक्सेस कर सकते हैं getOption("na.action")या options("na.action")आप इसके साथ सेट कर सकते हैं, उदाहरण के लिए, options(na.action = "na.omit") हालाँकि, आर आउटपुट से आप उदाहरण 1 में प्रदान करते हैं, ऐसा लगता है कि आप सेटिंग कर रहे हैं na.action = na.omit। तो, हाँ, कम से कम उस उदाहरण में, आप फिटिंग से पहले NA के साथ सभी मामलों / पंक्तियों को हटा रहे हैं। इसके अलावा, मुझे पूरा यकीन है कि na.action = na.passजब डेटा NA (इसे आज़माता है) में glm () विफल होता है।

त्रुटियां: glm () अधिकतम पुनरावृत्ति अनुमान लगाने के लिए एक पुनरावृत्त प्रक्रिया (पुनरावृत्त भारित कम से कम वर्गों; IWLS) का उपयोग कर रहा है। आपको कभी-कभी त्रुटियां होती हैं क्योंकि यह केवल पूर्वनिर्धारित संख्या के पुनरावृत्तियों के माध्यम से जाएगा और, अगर यह एक अच्छा फिट नहीं है, तो यह छोड़ देता है। यह संख्या तर्क अधिकतम द्वारा नियंत्रित होती है, जो डिफ़ॉल्ट रूप से होती है maxit = 25। आप इसे उच्चतर सेट करने का प्रयास कर सकते हैं, हालाँकि, इसमें अधिक समय लगेगा। (यदि आप trace=TRUEइसे सेट करते हैं तो यह आपको प्रत्येक पुनरावृत्ति का परिणाम दिखाएगा।)

जानकारी के अन्य स्रोत: glm के लिए हेल्पफाइल इसके साथ सुलभ है ?glmया help(glm)बहुत कुछ समझाती है। दो अन्य उपयोगी संसाधन हैं:

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