2012-04-05 8 views
12

Usando R, me gustaría trazar una relación lineal entre dos variables, pero me gustaría que la línea ajustada esté presente solo dentro del rango de los datos.Trazar la línea ajustada dentro de cierto rango R

Por ejemplo, si tengo el siguiente código, me gustaría que la línea exista solo desde los valores xey de 1:10 (con los parámetros predeterminados, esta línea se extiende más allá del rango de puntos de datos).

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

Respuesta

13

En lugar de utilizar abline(), (a) guardar el modelo ajustado, (b) utilizar predict.lm() para encontrar los valores de y empotrados que corresponden a x = 1 y x = 10, y a continuación, (c) el uso lines() a agregue una línea entre los dos puntos:

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

Puede hacer esto usando predecir. (? Ver predecir)

Se puede predecir en los valores específicos de x

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

Además de utilizar predict con lines o segments también puede utilizar la función clip con abline:

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

+1, porque funciona con cualquier línea, también abline(), sin utilizar el truco con predict(). De esta manera, uno puede, por ejemplo, recortar también las ablines que se extienden a los márgenes de un gráfico, pero solo hacia un lado, p. a la derecha, no a la izquierda. – pfifas

2

El plotrix l ibrary tiene la función ablineclip() por sólo esto:

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

Una alternativa es utilizar la función de segments (doc here).

Digamos que calculó la línea, y obtuvo una intercepción de a y una pendiente de b. Por lo tanto, su función ajustada es y = a + bx.

Ahora, supongamos que quiere mostrar la línea para x entre x0 y x1. A continuación, el siguiente código traza su línea:

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

Sólo tiene que sustituir los valores dea, b, x0, x1con los de su elección.

enter image description here


Para aquellos como yo que llegó a esta pregunta querer trazar una línea para un par cualquiera de números (y no aquellos que se ajustan una regresión dado), el siguiente código es lo que necesita :

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

Basta con sustituir los valores dex0, y0, x1, y1con los de su elección.

Cuestiones relacionadas