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