मेरे पास एक स्कैटर प्लॉट है। मैं गैर-रेखीय प्रवृत्ति रेखा कैसे जोड़ सकता हूं?
मेरे पास एक स्कैटर प्लॉट है। मैं गैर-रेखीय प्रवृत्ति रेखा कैसे जोड़ सकता हूं?
जवाबों:
चलो कुछ डेटा बनाते हैं।
n <- 100 x <- seq (n) y <- rnorm (n, 50 + 30 * x ^ (- 0.2), 1) डेटा <- data.frame (x, y)
निम्नलिखित दर्शाता है कि आप कैसे एक लोस लाइन या एक गैर-रेखीय प्रतिगमन के फिट कर सकते हैं।
प्लॉट (y ~ x, डेटा) # एक पंक्ति पंक्ति फिट loess_fit <- loess (y ~ x, डेटा) लाइनें (डेटा $ x, प्रेडिक्ट (loess_fit), col = "blue") # एक गैर-रेखीय प्रतिगमन फिट nls_fit <- nls (y ~ a + b * x ^ (- c), डेटा, प्रारंभ = सूची (a = 80, b = 20,) c = 0.2)) लाइनें (डेटा $ x, प्रेडिक्शन (nls_fit), col = "red")
यदि आप ggplot2
(R और जाली के बाद R में, तीसरे प्लॉटिंग सिस्टम का उपयोग करते हैं ), तो यह हो जाता है:
library(ggplot2)
ggplot(Data, aes(x,y)) + geom_point() + geom_smooth()
आप यह चुन सकते हैं कि डेटा कैसे स्मूथ है: ?stat_smooth
विवरण और उदाहरण देखें।
stat_smooth
टाइप करके आर हेल्प फ़ाइल तक पहुँच कर यह पता लगा सकते हैं ?stat_smooth
। :-)
यह जानने के बिना कि आप क्या देख रहे हैं, lattice
पैकेज का उपयोग करके आप आसानी से एक घटिया वक्र जोड़ सकते हैं type="smooth"
; जैसे,
> library(lattice)
> x <- rnorm(100)
> y <- rnorm(100)
> xyplot(y ~ x, type=c("smooth", "p"))
help("panel.loess")
उन तर्कों के लिए देखें , जिन्हें बदलने के लिए लूप फिटिंग रूटीन में पास किया जा सकता है, उदाहरण के लिए, उपयोग करने के लिए बहुपद की डिग्री।
अद्यतन करें
लूप कर्व का रंग बदलने के लिए, आप एक छोटा सा फंक्शन लिख सकते हैं और इसे एक panel
पैरामीटर के रूप में पास कर सकते हैं xyplot
:
x <- rnorm(100)
y <- rnorm(100)
panel_fn <- function(x, y, ...)
{
panel.xyplot(x, y, ...)
panel.xyplot(x, y, type="smooth", col="red", ...)
}
xyplot(y ~ x, panel=panel_fn)
आपका प्रश्न थोड़ा अस्पष्ट है, इसलिए मैं आपकी समस्या के बारे में कुछ अनुमान लगाने जा रहा हूं। यह बहुत मदद करेगा यदि आप एक स्कैल्पलॉट लगा सकते हैं और डेटा का थोड़ा सा वर्णन कर सकते हैं। कृपया, यदि मैं गलत धारणाएं बना रहा हूं तो मेरे उत्तर को अनदेखा करें।
सबसे पहले, यह संभव है कि आपका डेटा कुछ प्रक्रिया का वर्णन करता है जो आप यथोचित मानते हैं कि गैर-रैखिक है। उदाहरण के लिए, यदि आप कार की गति को अचानक ब्रेक लगाने की गति से रोकने के लिए दूरी पर रिग्रेशन करने की कोशिश कर रहे हैं, तो भौतिकी हमें बताती है कि वाहन की ऊर्जा वेग के वर्ग के समानुपाती है - वेग नहीं अपने आप। तो आप इस मामले में बहुपद प्रतिगमन की कोशिश कर सकते हैं, और (R में) आप कुछ ऐसा कर सकते हैं model <- lm(d ~ poly(v,2),data=dataset)
। प्रतिगमन मॉडल में विभिन्न गैर-रैखिकताएं प्राप्त करने के तरीके के बारे में बहुत सारे दस्तावेज हैं।
दूसरी ओर, यदि आपको एक लाइन मिली है जो "wobbly" है और आपको नहीं पता कि यह wobbly क्यों है, तो एक अच्छा शुरुआती बिंदु संभवतः स्थानीय रूप से भारित प्रतिगमन होगा, या loess
R में। यह एक छोटे से रैखिक प्रतिगमन करता है क्षेत्र, पूरे डेटासेट के विपरीत। "के निकटतम पड़ोसी" संस्करण की कल्पना करना सबसे आसान है, जहां किसी भी बिंदु पर वक्र के मूल्य की गणना करने के लिए, आप कश्मीर बिंदुओं को ब्याज के बिंदु के करीब पाते हैं, और उन्हें औसत करते हैं। Loess ऐसा ही है, लेकिन एक औसत औसत के बजाय प्रतिगमन का उपयोग करता है। इसके लिए, उपयोग करें model <- loess(y ~ x, data=dataset, span=...)
, जहां span
चर चौरसाई की डिग्री को नियंत्रित करता है।
तीसरे हाथ पर (हाथों से बाहर निकलते हुए) - आप रुझानों के बारे में बात कर रहे हैं? क्या यह एक अस्थायी समस्या है? यदि यह है, तो ट्रेंड लाइनों और सांख्यिकीय महत्व की व्याख्या करने के साथ थोड़ा सतर्क रहें। समय श्रृंखला में रुझान "ऑटोरेगिविव" प्रक्रियाओं में दिखाई दे सकते हैं, और इन प्रक्रियाओं के लिए प्रक्रिया की यादृच्छिकता कभी-कभी यादृच्छिक शोर से रुझानों का निर्माण कर सकती है, और गलत सांख्यिकीय महत्व परीक्षण आपको बता सकता है कि यह महत्वपूर्ण है जब यह नहीं है!
तितर बितर साजिश नमूना अंक और एक ही ग्राफ पर चिकनी वक्र:
library(graphics)
## Create some x,y sample points falling on hyperbola, but with error:
xSample = seq(0.1, 1.0, 0.1)
ySample = 1.0 / xSample
numPts <- length(xSample)
ySample <- ySample + 0.5 * rnorm(numPts) ## Add some noise
## Create x,y points for smooth hyperbola:
xCurve <- seq(0.1, 1.0, 0.001)
yCurve <- 1.0 / xCurve
plot(xSample, ySample, ylim = c(0.0, 12.0)) ## Plot the sample points
lines(xCurve, yCurve, col = 'green', lty = 1) ## Plot the curve