Нанесите подогнанную линию в пределах определенного диапазона R

#r #plot #regression #linear-regression

#r #построить #lm #par

Вопрос:

Используя R, я хотел бы построить линейную зависимость между двумя переменными, но я бы хотел, чтобы подогнанная линия присутствовала только в пределах диапазона данных.

Например, если у меня есть следующий код, я бы хотел, чтобы линия существовала только из значений x и y, равных 1: 10 (с параметрами по умолчанию эта линия выходит за пределы диапазона точек данных).

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

Ответ №1:

В дополнение к использованию predict с lines или segments вы также можете использовать clip функцию с abline :

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

Комментарии:

1. 1, потому что он работает с любой линией, также с abline(), без использования взлома с predict() . Таким образом, можно, например, также обрезать ablines, которые простираются до границ графика, но только в одну сторону, например, вправо, а не влево.

2. Это гораздо лучший ответ, чем принятый. Намного проще и фактически работает с визуальным представлением по желанию, вместо того, чтобы создавать какое-то странное представление новой строки с использованием predict

Ответ №2:

Вместо использования abline() (а) сохраните подогнанную модель, (б) используйте predict.lm() для нахождения подогнанных значений y, соответствующих x= 1 и x= 10, а затем (в) используйте lines() для добавления линии между двумя точками:

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

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

Ответ №3:

Вы можете сделать это с помощью predict .

Вы можете предсказать конкретные значения 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))
 

введите описание изображения здесь

Ответ №4:

Библиотека plotrix имеет ablineclip() функцию именно для этого:

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

Ответ №5:

Альтернативой является использование segments функции (документ здесь).

Допустим, вы оценили линию и получили пересечение a и наклон b . Таким образом, ваша подогнанная функция y = a bx .

Теперь, допустим, вы хотите показать линию для x между x0 и x1 . Затем следующий код построит вашу линию:

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

на выбранные a, b, x0, x1 вами значения просто замените значения.

введите описание изображения здесь


Для тех, кто, как и я, пришел к этому вопросу, желая построить линию для произвольной пары чисел (а не для тех, которые соответствуют заданной регрессии), вам нужен следующий код:

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

на выбранные x0, y0, x1, y1 вами значения просто замените значения.