2011-07-30 12 views
8

तो मैं आरआर में रिग्रेशन में अवशिष्ट में एनएएस से कैसे निपटूं?

अंक में एक lm क्रॉस अनुभागीय प्रतिगमन के बच में कुछ NA मूल्यों के साथ कुछ मुद्दों कर रहा हूँ NA खुद को महत्व देता है नहीं है, यह रास्ता आर उन्हें प्रस्तुत करता है।

उदाहरण के लिए:

test$residuals 
#   1   2   4   5 
# 0.2757677 -0.5772193 -5.3061303 4.5102816 
test$residuals[3] 
#  4 
# -5.30613 

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

test$residuals 
#   1   2   3   4   5 
# 0.2757677 -0.5772193   NA -5.3061303 4.5102816 

मैं सभी अलग-अलग बच का ट्रैक रखने के तो यह मेरे जीवन बहुत आसान हो जाएगा की जरूरत है अगर मैं उन्हें इस तरह के बजाय निकाल सकते।

उत्तर

11

मुझे बस this थोड़ा गहराई से गुगल मिला। residlm पर na.action=na.exclude पर फ़ंक्शन जाने का तरीका है।

1

यहां एलएम सहायता पृष्ठ पर थोड़ा संशोधित उदाहरण का उपयोग करके एक सचित्र रणनीति है।

## Annette Dobson (1990) "An Introduction to Generalized Linear Models". 
## Page 9: Plant Weight Data. 
# Two NA's introduced 
weight <- c(4.17,5.58,NA,6.11,4.50,4.61,5.17,4.53,5.33,5.14, 
4.81,4.17,4.41,3.59,5.87,3.83,6.03,NA,4.32,4.69) 
group <- gl(2,10,20, labels=c("Ctl","Trt")) 
lm.D9 <- lm(weight ~ group) 
rr2 <- weight- predict(lm.D9, na.action=na.pass) 
Warning message: 
In weight - predict(lm.D9, na.action = na.pass) : 
    longer object length is not a multiple of shorter object length 
> rr2 
[1] -0.8455556 0.5644444   NA 1.0944444 -0.5155556 -0.4055556 0.1544444 
[8] -0.4855556 0.3144444 0.5044444 0.1744444 -0.4655556 -0.2255556 -1.0455556 
[15] 1.2344444 -0.8055556 1.3944444   NA -0.6955556 -0.3255556 

मुझे लगता है कि यह सीधे एक एल एम वस्तु को संशोधित करने के लिए इतना है कि lm.D9 $ अवशिष्ट कि परिणाम वापसी होगी खतरनाक होगा: यह अवशिष्ट की परिभाषा का एक सीधा आवेदन है।

3

फिर भी एक और विचार lm पर इनपुट के रूप में प्रदान किए गए डेटा फ्रेम से जुड़े पंक्ति नामों का लाभ उठाना है। उस स्थिति में, अवशेषों को स्रोत डेटा से नामों को बनाए रखना चाहिए। आपके उदाहरण से अवशेषों तक पहुंचने से test$residuals["4"] और test$residuals["3"] के लिए NA के लिए -5.3061303 का मान दिया जाएगा।

हालांकि, यह आपके प्रश्न का बिल्कुल जवाब नहीं देता है। वास्तव में कर आप एनए मूल्यों बच में वापस जाने के मामले में क्या पूछा करने के लिए एक दृष्टिकोण नीचे बताया गया है:

> D<-data.frame(x=c(NA,2,3,4,5,6),y=c(2.1,3.2,4.9,5,6,7),residual=NA) 
> Z<-lm(y~x,data=D) 
> D[names(Z$residuals),"residual"]<-Z$residuals 
> D 
    x y residual 
1 NA 2.1  NA 
2 2 3.2 -0.28 
3 3 4.9  0.55 
4 4 5.0 -0.22 
5 5 6.0 -0.09 
6 6 7.0  0.04 

आप प्रतिगमन परिणाम के आधार पर भविष्यवाणियों कर रहे हैं, तो आप lm में na.action=na.exclude निर्दिष्ट करने के लिए चाहते हो सकता है । चर्चा के लिए na.omit के लिए सहायता परिणाम देखें। ध्यान दें कि na.exclude निर्दिष्ट करने से वास्तव में एनए मान वापस अवशिष्ट वेक्टर में नहीं डालते हैं।

एक पूर्व जवाब में बताया गया है, resid (residuals के लिए पर्याय) एक सामान्य पहुँच समारोह जिसमें बच वांछित एनए को महत्व देता है, तो na.excludelm में निर्दिष्ट किया गया था शामिल होंगे प्रदान करता है। resid का उपयोग करना शायद अधिक सामान्य और क्लीनर दृष्टिकोण है। उस स्थिति में, उपर्युक्त उदाहरण के लिए कोड बदल दिया जाएगा:

> D<-data.frame(x=c(NA,2,3,4,5,6),y=c(2.1,3.2,4.9,5,6,7),residual=NA) 
> Z<-lm(y~x,data=D,na.action=na.exclude) 
> D$residuals<-residuals(Z) 
संबंधित मुद्दे