2012-04-05 2 views
12

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

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

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

ответ

13

Вместо использования abline(), (а) сохранить оборудованную модель, (б) использовать predict.lm() найти подогнанные у-значения, соответствующие х = 1 и х = 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) 
8

Вы можете сделать это, используя прогноз. (? См предсказать)

Вы можете предсказать на конкретных значениях х

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

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

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

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

2

Планировщик l ibrary имеет ablineclip() функцию только это:

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

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

Скажите, что вы оценили линию, и вы получили перехват 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с теми вашим выбором.

enter image description here


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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^