2012-04-05 16 views
12

Mit R würde ich gerne eine lineare Beziehung zwischen zwei Variablen darstellen, aber ich möchte, dass die angepasste Linie nur im Bereich der Daten vorhanden ist.Geplante Linie in einem bestimmten Bereich R

Zum Beispiel, wenn ich den folgenden Code hätte, möchte ich, dass die Linie nur aus x und y-Werten von 1:10 existiert (mit Standard-Parametern erstreckt sich diese Linie über den Bereich von Datenpunkten hinaus).

x <- 1:10 
y <- 1:10 
plot(x,y) 
abline(lm(y~x)) 

Antwort

13

Statt abline() der Verwendung (a), um das angepasste Modell zu speichern, (b) verwenden predict.lm() die angepassten y-Werte x = 1 entsprechen, zu finden, und x = 10, und dann (c) die Verwendung lines() zu Fügen Sie eine Linie zwischen den beiden Punkten hinzu:

f <- lm(y~x) 
X <- c(1, 10) 
Y <- predict(f, newdata=data.frame(x=X)) 

plot(x,y) 
lines(x=X, y=Y) 
8

Sie können dies mit Hilfe der Vorhersage tun. (? Siehe vorhersagen)

Sie auf bestimmte Werte von x vorhersagen kann

x<-1:10 
y<-1:10 
plot(x,y) 
new <- data.frame(x = seq(1, 5, 0.5)) 
lines(new$x, predict(lm(y~x), new)) 

enter image description here

17

Neben der Verwendung von predict mit lines oder segments Sie können auch die clip Funktion mit abline verwenden:

x <- 1:10 
y <- 1:10 
plot(x,y) 
clip(1,10, -100, 100) 
abline(lm(y~x)) 
+3

+1, denn es funktioniert mit jeder Zeile, auch abline(), ohne den Hack mit Predicted(). Auf diese Weise kann man z. B. Abzüge, die sich bis zu den Rändern eines Diagramms erstrecken, aber nur zu einer Seite, z. nach rechts, nicht nach links. – pfifas

2

Der Plotrix l ibrary hat die ablineclip() Funktion für diese gerade:

x <- 1:10 
y <- 1:10 
plot(x,y) 
ablineclip(lm(y~x),x1=1,x2=5) 
0

Eine Alternative ist die segments Funktion (doc here) zu verwenden.

Angenommen, Sie haben die Linie geschätzt, und Sie haben einen Schnittpunkt von a und eine Steigung von b. Daher ist Ihre angepasste Funktion y = a + bx. Geben Sie nun an, dass Sie die Zeile für x zwischen x0 und x1 anzeigen möchten. Dann zeichnet der folgende Code Ihre Linie:

# inputs 

a <- 0.5 
b <- 2 

x0 <- 1 
x1 <- 5 

# graph 

plot(c(0,5), c(0,5), type = "n", xlab = "", ylab = "", bty='l') 
segments(x0, a+b*x0, x1, a+b*x1) 

Ersetzen Sie einfach die Werte vona, b, x0, x1mit denen Ihrer wählen.

enter image description here


Für diejenigen, die wie ich auf diese Frage kam wollen, um eine Linie für ein beliebiges Paar von Zahlen zeichnen (und nicht diejenigen, die eine bestimmte Regression passen), der folgende Code ist, was Sie brauchen :

plot(c(0,5), c(0,5), type = "n", xlab = "", ylab = "", bty='l') 
segments(x0, yo, x1, y1) 

ersetzen Sie einfach die Werte vonx0, y0, x1, y1mit denen Ihrer wählen.

Verwandte Themen