2012-07-19 16 views
5

मैं आर में अंक का एक सेट है कि रैखिक मैं अंक साजिश, उन्हें एक लाइन फिट निम्न कर सकते हैं कर रहे हैं, तो लाइन प्रदर्शित:आर में फिटिंग लघुगणक वक्र

x=c(61,610,1037,2074,3050,4087,5002,6100,7015) 
y=c(0.401244, 0.844381, 1.18922, 1.93864, 2.76673, 3.52449, 4.21855, 5.04368, 5.80071) 

plot(x,y)  
Estimate = lm(y ~ x)  
abline(Estimate) 

अब, अगर मैं जैसे कि निम्न अंक का एक सेट है कि लग रहा है एक लघुगणक वक्र फ़िट की तरह और अधिक उपयुक्त है:

x=c(61,610,1037,2074,3050,4087,5002,6100,7015)   
y=c(0.974206,1.16716,1.19879,1.28192,1.30739,1.32019,1.35494,1.36941,1.37505) 

मैं जानता हूँ कि मैं निम्नलिखित के साथ एक्स मूल्यों का लॉग के खिलाफ मानक प्रतिगमन फिट प्राप्त कर सकते हैं:

logEstimate = lm(y ~ log(x)) 

लेकिन फिर मैं लॉग इनस्टेट को सामान्य स्केलिंग में कैसे बदलूं और पहले से अपने रैखिक वक्र के खिलाफ वक्र प्लॉट कैसे करूं?

उत्तर

10

हमम, मुझे यकीन नहीं है कि "पहले से मेरे रैखिक वक्र के खिलाफ वक्र साजिश" का मतलब क्या है।

(1) का प्रयोग करें predict:

plot(x,y) 
xvec <- seq(0,7000,length=101) 
logpred <- predict(logEstimate,newdata=data.frame(x=xvec)) 
lines(xvec,logpred) 

(2) निकालें संख्यात्मक गुणांक मूल्यों:

coef(logEstimate) 
## (Intercept)  log(x) 
## 0.6183839 0.0856404 
curve(0.61838+0.08564*log(x),add=TRUE,col=2) 

(

d <- data.frame(x,y) ## need to use data in a data.frame for predict() 
logEstimate <- lm(y~log(x),data=d) 

तीन तरीके भविष्यवाणी मूल्यों को प्राप्त करने के लिए कर रहे हैं 3) with() जादू का उपयोग करें (आपको पैरामीटर अनुमान नामों के आस-पास बैक-कोट्स की आवश्यकता है b ecause वे कोष्ठक शामिल)

with(as.list(coef(logEstimate)), 
     curve(`(Intercept)`+`log(x)`*log(x),add=TRUE,col=4)) 

हो सकता है कि आप क्या चाहते हैं

est1 <- predict(lm(y~x,data=d),newdata=data.frame(x=xvec)) 
plot(est1,logpred) 

है ... हालांकि मुझे यकीन है कि नहीं कर रहा हूँ क्यों ...

+0

बहुत बहुत धन्यवाद। वक्र समारोह के साथ आपका दूसरा तरीका, वही है जो मैं चाहता था।आंकड़ों को तैयार करने में क्या वास्तव में क्या होता है और भविष्यवाणी क्या करती है? मुझे मदद() फ़ंक्शन ने मुझे क्या बताया उससे बहुत कुछ नहीं मिला। – user52291

+1

डेटा फ्रेम में डेटा डालने से भविष्य के काम को फिट ऑब्जेक्ट (भविष्यवाणियां, इत्यादि) के साथ अधिक सरल बनाता है क्योंकि यह आर के लिए इनपुट चर का पता लगाना आसान बनाता है। 'predict()' predicts ... –

8

मैं बिल्कुल यकीन है कि तुम क्या मतलब है नहीं कर रहा हूँ या तो ... लेकिन मैंने थोड़ा अलग अनुमान लगाया। मुझे लगता है कि आप उन मॉडलों, एक रैखिक, और एक लॉग में दो मॉडल फिट करना चाहते हैं। फिर, आप अंक, और दोनों मॉडलों के कार्यात्मक रूप को साजिश करना चाहते हैं। यहाँ उस के लिए कोड है:

x=c(61,610,1037,2074,3050,4087,5002,6100,7015) 
y=c(0.974206,1.16716,1.19879,1.28192,1.30739,1.32019,1.35494,1.36941,1.37505) 

Estimate = lm(y ~ x) 
logEstimate = lm(y ~ log(x)) 

plot(x,predict(Estimate),type='l',col='blue') 
lines(x,predict(logEstimate),col='red') 
points(x,y) 

enter image description here


टिप्पणी में आपके दूसरे प्रश्न के जवाब में, रेखीय प्रतीपगमन हमेशा अपने भविष्यवक्ताओं की एक रैखिक संयोजन वापसी करता है, लेकिन जरूरी है कि ऐसा नहीं करता इसका मतलब है कि यह एक सीधी रेखा है। क्या आपके log परिवर्तन वास्तव में इसका मतलब है के बारे में सोचो: यदि आप फिट,

y = log(x) 

कि x बढ़ जाती है रैखिक, तो y तेजी से परिवर्तन होगा, क्योंकि, जो स्पष्ट रूप है जिसका मतलब है फिटिंग

exp(y) = x 

रूप में ही है कि एक 'सीधी रेखा' नहीं। हालांकि, अगर आपने लॉग एक्स पर अपना एक्स-अक्ष बदल दिया है, तो प्रदर्शित लाइन सीधे होगी।

+1

बस ध्यान दें कि यदि आप एक चिकनी लॉगरिदमिक वक्र चाहते हैं तो आपको भविष्यवाणी के 'न्यूडाटा' फॉर्म का उपयोग करने की आवश्यकता है ... और यदि आपका डेटा नहीं होता है तो परिणाम अजीब होंगे 'x' ऑर्डर बढ़ रहा है ... (लेकिन मूल विचार ध्वनि है) –

+0

सहमत हैं। मैंने सोचा कि मैं शुद्धता पर सादगी के लिए जाऊंगा, लेकिन आप पूरी तरह से सही हैं। – nograpes

+0

धन्यवाद। यह मुझे वह भी देता है जो मैं चाहता था (हालांकि वक्र समारोह के साथ चिकनी नहीं है)। मैं थोड़ा उलझन में हूं क्योंकि मैंने सोचा कि एलएम हमेशा एक लाइन लौटाता है। यह आपके कोड के बारे में क्या है जिसने एक वक्र बनाया है और लाइन नहीं दिख रही है? – user52291

संबंधित मुद्दे