2012-04-05 17 views
12

Rを使用して、2つの変数の間に線形関係をプロットしたいと思いますが、フィッティングされた線がデータの範囲内にのみ存在するようにしたいと思います。特定の範囲内に線を当てはめるR

たとえば、次のコードがある場合、xとyの値が1:10(デフォルトのパラメータで、この行はデータポイントの範囲を超えて拡張されます)の行のみが存在するようにします。

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

答えて

13

代わりのabline()を用いて、(A)(B)は、x = 1、X = 10に対応するフィットy値を見つけるためにpredict.lm()を使用し、次いで、(C)にlines()を使用し、フィットモデルを保存2点の間に線を追加します。

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

予測を使用してこれを行うことができます。 (?を参照予測)linesかと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)) 

enter image description here

17

segmentsあなたもablineclip機能を使用することができます。

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

+1、predict()でハックを使わずに、どのラインでも動作し、また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機能(DOC here)を使用することです。

あなたが線を推定したとし、aと勾配bの切片があるとします。したがって、フィット関数はy = a + bxです。

ここで、xの行をx0x1の間に表示したいとします。その後、次のコードは、あなたの行をプロット:

# 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の値を置き換えます。