2013-06-04 6 views
5

मैं इस कार्यक्रमउपयोग - आर

dens <- read.table('DensPiu.csv', header = FALSE) 
fl <- read.table('FluxPiu.csv', header = FALSE) 
mydata <- data.frame(c(dens),c(fl)) 

dat = subset(mydata, dens>=3.15) 
colnames(dat) <- c("x", "y") 
attach(dat) 

है और मैं Dat में निहित डेटा पर एक कम से कम वर्ग प्रतिगमन करना चाहते हैं, समारोह रूप है

y ~ a + b*x 

और मैं चाहता हूं कि रिग्रेशन लाइन एक विशिष्ट बिंदु पी (x0, y0) (जो मूल नहीं है) से गुजरती है।

मैं की तरह यह करने के लिए कोशिश कर रहा हूँ इस

x0 <- 3.15 

y0 <-283.56 

regression <- lm(y ~ I(x-x0)-1, offset=y0) 

(मुझे लगता है कि डेटा = Dat आवश्यक नहीं है इस मामले में है), लेकिन मैं इस त्रुटि है:

Error in model.frame.default(formula = y ~ I(x - x0) - 1, : variable 
lengths differ (found for '(offset)'). 

मैं डॉन ' टी क्यों पता है। मुझे लगता है कि मैंने ऑफ़सेट मान सही ढंग से परिभाषित नहीं किया है लेकिन मुझे इंटरनेट पर कोई उदाहरण नहीं मिला।

क्या कोई मुझे बता सकता है कि ऑफ़सेट कृपया काम करता है?

+0

आप एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण प्रदान कर सकते हैं, डेटा के साथ करें:

regression <- lm(y ~ I(x-x0)-1, offset = rep(y0, length(y)) 

यहाँ जो लोग रुचि रखते हैं के लिए एक अच्छा विवरण है? – joran

+2

कृपया इस प्रश्न और आपके पिछले एक के बीच क्या अंतर है? – agstudy

+0

अब मैं उस वस्तु को परिभाषित करने के लिए कह रहा हूं जो _offset_ में जाता है। मेरा पिछला सवाल इस बारे में था कि एक विशिष्ट बिंदु के लिए एक रिग्रेशन कैसे पारित किया जाए। – amcabassi

उत्तर

9

आपका ऑफसेट अवधि x और y, नहीं एक अंकीय निरंतर की तरह एक चर होने के लिए, है। इसलिए आपको उचित डेटा के साथ अपने डेटासेट में एक कॉलम बनाने की आवश्यकता है।

dat$o <- 283.56 
lm(y ~ I(x - x0) - 1, data=dat, offset=o) 
+0

आपके उत्तर के लिए धन्यवाद। मैंने अपने डेटाबेस में बिंदु पी (x0, y0) जोड़ा है। अब यह _dat_ का 161 तत्व है। 3.15 Y0 <- - Dat [161,2] प्रतिगमन <- एल एम (y ~ मैं (एक्स x0) -1, ऑफसेट = Y0) ' और इस ' Y0 <मैं दोनों 'x0 <की कोशिश की है - डेटा [161,] रिग्रेशन <- एलएम (वाई ~ आई (एक्स) -1, ऑफसेट = वाई 0) 'लेकिन उनमें से कोई भी काम नहीं करता है। मैं क्या गलत कर रहा हूं? मैंने इसे स्पष्ट करने के लिए कोड के पहले भाग को अपने प्रश्न में जोड़ा है। – amcabassi

+2

आप अभी भी दिए गए मान के साथ एक एकल स्थिर बना रहे हैं। आपको ऑफसेट के रूप में मूल्यों के _vector_ को पास करने की आवश्यकता है। ऐसा करने का सबसे आसान तरीका यह है कि मैंने पोस्ट किया है: अपने डेटासेट में एक नया कॉलम बनाएं। मुझे लगता है कि 'दिनांक [161, 2]' क्या आपका y0 होना चाहिए? ऐसा करें: 'ओ $ ओ <- डेटा [161,2]; एलएम (वाई ~ आई (एक्स - एक्स 0) - 1, ऑफ़सेट = ओ, डेटा = डेटा) ' –

+0

बिल्कुल सही, बहुत बहुत धन्यवाद! मैंने कॉलम की बजाय एक पंक्ति बनाई थी, यही कारण है कि यह काम नहीं किया! आपके धैर्य के लिए धन्यवाद। – amcabassi

2

वास्तव में, यहाँ असली मुद्दा यह है कि आप का एक वेक्टर जिसकी लंबाई है रूप में एक ही पंक्तियों की संख्या (या लंबाई, डेटा वेक्टर के रूप में बना है तो) के साथ offset निर्दिष्ट करना चाहिए है अपने डेटा। उम्मीद के रूप में निम्नलिखित कोड अपने काम करेगा:, http://rfunction.com/archives/223