web-dev-qa-db-fra.com

Tracé de la ligne ajustée dans certaines limites R

En utilisant R, je voudrais tracer une relation linéaire entre deux variables, mais j'aimerais que la ligne ajustée ne soit présente que dans la plage des données.

Par exemple, si j'ai le code suivant, je voudrais que la ligne existe uniquement à partir de valeurs x et y de 1:10 (avec les paramètres par défaut, cette ligne s'étend au-delà de la plage de points de données).

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

Au lieu d'utiliser abline(), (a) enregistrez le modèle ajusté, (b) utilisez predict.lm() pour trouver les valeurs y ajustées correspondant à x = 1 et x = 10, puis (c) utilisez lines() pour ajouter une ligne entre les deux points :

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

plot(x,y)
lines(x=X, y=Y)
14
Josh O'Brien

En plus d'utiliser predict avec lines ou segments, vous pouvez également utiliser la fonction clip avec abline:

x <- 1:10
y <- 1:10
plot(x,y)
clip(1,10, -100, 100)
abline(lm(y~x))
18
Greg Snow

Vous pouvez le faire en utilisant Predict.

Vous pouvez prédire des valeurs spécifiques de x (voir? Prévoir)

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

8

La bibliothèque plotrix a la fonction ablineclip() pour ceci seulement:

x <- 1:10
y <- 1:10
plot(x,y)
ablineclip(lm(y~x),x1=1,x2=5)
3
Dr.J

Une alternative consiste à utiliser la fonction segments (doc here ).

Supposons que vous estimiez la ligne et que vous obteniez une interception de a et une pente de b. Ainsi, votre fonction ajustée est y = a + bx.

Maintenant, supposons que vous vouliez afficher la ligne pour x entre x0 et x1. Ensuite, le code suivant trace votre ligne:

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

Remplacez simplement les valeurs de a, b, x0, x1 par celles de votre choix .

 enter image description here


Pour ceux qui, comme moi, sont venus à cette question pour tracer une ligne pour une paire de nombres arbitraire (et non ceux qui correspondent à une régression donnée), vous avez besoin du code suivant:

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

Remplacez simplement les valeurs de x0, y0, x1, y1 par celles de votre choix .

0
luchonacho