2016-03-29 18 views
3

Yaklaşan birkaç referans var, ancak() çizgileri() sadece bir doğrusal olmayan eğri yerine çoklu yaylar üretiyor. Bir grup istenmeyen çizgiyle bir hamak gibi görünüyor. Basit bir lineer olmayan çizgi nasıl üretiyorsunuz? Veri kümesi, http://www-bcf.usc.edu/~gareth/ISL/data.html adresinde Auto.csv olarak kullanılabilir.R, lineer olmayan bir eğri çizin

library(ISLR) 
    data(Auto) 
    lm.fit1=lm(mpg~horsepower,data=Auto) #linear 
    lm.fit2=lm(mpg~horsepower+I(horsepower^2),data=Auto) #add polynomial 
    plot(Auto$horsepower,Auto$mpg,col=8,pch=1) 
    abline(lm.fit1,col=2)  #linear fit 
    lines(Auto$horsepower,predict(lm.fit2),col=4) #attempt at nonlinear 

cevap

3

lines araziler öncelikle x değeri tarafından değil sıralama yapmak istersen bir sonucu olarak. Olmak ne olursa olsun sipariş verileri, ileri geri gidiş çizgilerin bir karmaşa alırsınız x değeri, bir satırdan diğerine ileri ve geri atlar. örneğin, bu deneyin:

plot(c(1,3,2,0), c(1,9,4,0), type="l", lwd=7) 
lines(0:3, c(0,1,4,9), col='red', lwd=4) 

göre sıralama, güzel eğri almak için horsepower ilk: Henüz sıralama horsepower tarafından yaparsanız Oysa

curve.dat = data.frame(x=Auto$horsepower, y=predict(lm.fit2)) 
curve.dat = curve.dat[order(curve.dat$x),] 

lines(curve.dat, col=4) 

enter image description here

, burada ne var sen olsun:

enter image description here

1

Veri çerçevesini sıralamak için endişelenmek istemiyorsanız alternatif bir yol, ggplot'u kullanmaktır.

library(ISLR) 
library(ggplot2) 
data(Auto) 

ggplot(Auto, aes(mpg, horsepower)) + 
    geom_point() + 
    geom_smooth(method="lm", formula = y~x, se=FALSE)+ 
    geom_smooth(method="lm", formula = y~x+I(x^2), se=FALSE, colour="red") 

enter image description here

3

Sen polinom oturması için poly kullanmalıdır: Bu size modeline uyacak şekilde istediğiniz formülü ve çizgi tipini seçmek sağlayan kullanışlı bir yöntem geom_smooth sahiptir. Daha sonra predict ile curve kullanabilirsiniz:

lm.fit2 = lm(mpg ~ poly(horsepower, 2, raw = TRUE), data = Auto) #fit polynomial 
#curve passes values to x, see help("curve") 
curve(predict(lm.fit2, newdata = data.frame(horsepower = x)), add = TRUE, col = 4) 

resulting plot

Bu aynı zamanda nls uyan ile çalışır.

+0

Poli() öneri için teşekkürler. – Orknie