web-dev-qa-db-ja.com

特定の範囲R内で近似直線をプロットする

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

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

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

abline()を使用する代わりに、(a)フィットしたモデルを保存します。(b)predict.lm()を使用して、x = 1およびx = 10に対応するフィットしたy値を検索し、次に( 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)
14
Josh O'Brien

predictlinesまたはsegmentsとともに使用することに加えて、clip関数をablineとともに使用することもできます。

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

これは、predictを使用して実行できます。

Xの特定の値を予測できます(?predictを参照)

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

Plotrixライブラリには、このためのablineclip()関数があります。

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

もう1つの方法は、segments関数を使用することです(doc here )。

直線を推定し、aの切片とbの傾きを得たとします。したがって、フィットした関数はy = a + bxです。

ここで、x0x1の間のxの線を表示するとします。次に、次のコードでラインをプロットします。

# 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の値を選択した値に置き換えます

0
luchonacho