R में स्कैटर प्लॉट में नॉन-लीनियर ट्रेंड लाइन कैसे जोड़ें? [बन्द है]


27

मेरे पास एक स्कैटर प्लॉट है। मैं गैर-रेखीय प्रवृत्ति रेखा कैसे जोड़ सकता हूं?


4
क्या आपके पास पहले से ही ट्रेंड कर्व का समीकरण है या इसे जोड़ने से डेटा से इसके समीकरण की गणना करना शामिल है?
whuber

जवाबों:


34

चलो कुछ डेटा बनाते हैं।

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")

चंक एक्सपोर्ट_प्लॉट की साजिश


1
साजिश के बारे में, उन का सामना आदेश की समस्याओं के लिए, यह सलाह उपयोगी है
tflutre

23

यदि आप ggplot2(R और जाली के बाद R में, तीसरे प्लॉटिंग सिस्टम का उपयोग करते हैं ), तो यह हो जाता है:

library(ggplot2)
ggplot(Data, aes(x,y)) + geom_point() + geom_smooth()

भूखंड

आप यह चुन सकते हैं कि डेटा कैसे स्मूथ है: ?stat_smoothविवरण और उदाहरण देखें।


अच्छा ग्राफ और स्पष्टीकरण! लेकिन छाया क्षेत्र का क्या मतलब है?
डार्विन पीसी

3
छायांकित क्षेत्र चिकनी रेखा के आसपास आत्मविश्वास अंतराल है। आप विन्सेन्ट के अनुसार stat_smoothटाइप करके आर हेल्प फ़ाइल तक पहुँच कर यह पता लगा सकते हैं ?stat_smooth। :-)
मुझे

9

यह जानने के बिना कि आप क्या देख रहे हैं, 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)

यहाँ छवि विवरण दर्ज करें


आप रेखा को एक अलग रंग कैसे बनाएंगे?
एंग्रीस्टूडेंट -

1
@EngrStudent मैंने अपना उत्तर अपडेट किया।
जेसन मॉर्गन

8

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

सबसे पहले, यह संभव है कि आपका डेटा कुछ प्रक्रिया का वर्णन करता है जो आप यथोचित मानते हैं कि गैर-रैखिक है। उदाहरण के लिए, यदि आप कार की गति को अचानक ब्रेक लगाने की गति से रोकने के लिए दूरी पर रिग्रेशन करने की कोशिश कर रहे हैं, तो भौतिकी हमें बताती है कि वाहन की ऊर्जा वेग के वर्ग के समानुपाती है - वेग नहीं अपने आप। तो आप इस मामले में बहुपद प्रतिगमन की कोशिश कर सकते हैं, और (R में) आप कुछ ऐसा कर सकते हैं model <- lm(d ~ poly(v,2),data=dataset)। प्रतिगमन मॉडल में विभिन्न गैर-रैखिकताएं प्राप्त करने के तरीके के बारे में बहुत सारे दस्तावेज हैं।

दूसरी ओर, यदि आपको एक लाइन मिली है जो "wobbly" है और आपको नहीं पता कि यह wobbly क्यों है, तो एक अच्छा शुरुआती बिंदु संभवतः स्थानीय रूप से भारित प्रतिगमन होगा, या loessR में। यह एक छोटे से रैखिक प्रतिगमन करता है क्षेत्र, पूरे डेटासेट के विपरीत। "के निकटतम पड़ोसी" संस्करण की कल्पना करना सबसे आसान है, जहां किसी भी बिंदु पर वक्र के मूल्य की गणना करने के लिए, आप कश्मीर बिंदुओं को ब्याज के बिंदु के करीब पाते हैं, और उन्हें औसत करते हैं। Loess ऐसा ही है, लेकिन एक औसत औसत के बजाय प्रतिगमन का उपयोग करता है। इसके लिए, उपयोग करें model <- loess(y ~ x, data=dataset, span=...), जहां spanचर चौरसाई की डिग्री को नियंत्रित करता है।

तीसरे हाथ पर (हाथों से बाहर निकलते हुए) - आप रुझानों के बारे में बात कर रहे हैं? क्या यह एक अस्थायी समस्या है? यदि यह है, तो ट्रेंड लाइनों और सांख्यिकीय महत्व की व्याख्या करने के साथ थोड़ा सतर्क रहें। समय श्रृंखला में रुझान "ऑटोरेगिविव" प्रक्रियाओं में दिखाई दे सकते हैं, और इन प्रक्रियाओं के लिए प्रक्रिया की यादृच्छिकता कभी-कभी यादृच्छिक शोर से रुझानों का निर्माण कर सकती है, और गलत सांख्यिकीय महत्व परीक्षण आपको बता सकता है कि यह महत्वपूर्ण है जब यह नहीं है!


6

तितर बितर साजिश नमूना अंक और एक ही ग्राफ पर चिकनी वक्र:

  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

चिकनी वक्र के साथ स्कैटर प्लॉट

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