答えはいいえabline()
です。モデルが当てはめられたプロット領域の一部だけに当てはめ線を引くことはできません。これは、モデルからの予測ではなく、モデル係数のみを使用して線を引くためです。よく見ると、線の描画が実際にはプロット領域の外側に伸びており、領域が存在するプロット フレームを覆っていることがわかります。
このような問題に対する最も簡単な解決策は、モデルから必要な領域を予測することです。
# The dataset:
daten <- data.frame(x = c(0:6), y = c(0.3, 0.1, 0.9, 3.1, 5, 4.9, 6.2))
# make a linear fit for the datapoints 3, 4, 5
mod <- lm(y~x, data = daten, subset = 3:5)
まず、x
微分したい値の範囲を取得します。
xr <- with(daten, range(x[3:5]))
次に、モデルを使用して、この範囲で等間隔の点のセットを予測します。
pred <- data.frame(x = seq(from = xr[1], to = xr[2], length = 50))
pred <- transform(pred, yhat = predict(mod, newdata = pred))
を使用してデータとモデルをプロットしますabline()
。
plot(y ~ x, data = daten)
abline(mod)
次に、強調したい領域を追加します。
lines(yhat ~ x, data = pred, col = "red", lwd = 2)
これにより、次のプロットが得られます。

で処理できるモデルよりも複雑なモデルがある場合はabline()
、わずかに異なる戦略を採用し、利用可能なプロットされたデータの範囲を予測して線を引き、強調表示する間隔を選択します。 . 次のコードはそれを行います。
## range of all `x` data
xr2 <- with(daten, range(x))
## same as before
pred <- data.frame(x = seq(from = xr2[1], to = xr2[2], length = 100))
pred <- transform(pred, yhat = predict(mod, newdata = pred))
## plot the data and the fitted model line
plot(y ~ x, data = daten)
lines(yhat ~ x, data = pred)
## add emphasis to the interval used in fitting
with(pred, lines(yhat ~ x, data = pred, subset = x >= xr[1] & x <= xr[2],
lwd = 2, col = "red"))
ここで行うことは、subset
引数を使用して、フィッティングで使用される間隔内にある予測から値を選択することです。渡すベクトルは、どのデータが関心領域にあり、どのデータが関心領域にあるかを示す値subset
の論理ベクトルです。それらのデータに沿って線を引きます。TRUE
FALSE
lines()
R> head(with(pred, x >= xr[1] & x <= xr[2]))
[1] FALSE FALSE FALSE FALSE FALSE FALSE
この場合、データまたは関心領域の開始と終了の予測を実行して 2 つのポイントを結合できるのに、なぜ予測子変数の 50 または 100 の等間隔の値に対して予測を実行したのか疑問に思うかもしれません。 ? さて、すべてのモデリング演習がそれほど単純であるとは限りません.前の質問からモデルを2倍にすることはその好例です.上記で概説した一般的な解決策はすべての場合で機能しますが、2つの予測を単純に結合することはできません.
@Andrie がアイデア 2 の解決策を提供してくれました。