1

abline特定の範囲の x 値でのみ近似を描画することは可能ですか?

そのデータセットのサブセットの線形適合を持つデータセットがあります。

# 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
daten_fit <- lm(formula = y~x, data = daten, subset = 3:5)

データをプロットして回帰直線を描くと、次のようになります。

plot (y ~ x, data = daten)
abline(reg = daten_fit)

線は、元のデータの x 値の全範囲に対して描画されます。しかし、カーブ フィッティングに使用されたデータのサブセットに対してのみ回帰直線を描画したいと考えています。私の頭に浮かんだ2つのアイデアがありました:

  1. より太い2 番目の線を描画しますが、3:5 の範囲でのみ表示されます。のパラメータを確認しましたがabline、何も見つかりませんでしたlinessegments

  2. に垂直なそれぞれの位置に小さな目盛りを追加ablineします。どうすればこれを行うことができるかがわかりました。もちろん、これはより良い方法です。

解決策はありますか?

4

3 に答える 3

4

答えはいいえ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の論理ベクトルです。それらのデータに沿って線を引きます。TRUEFALSElines()

R> head(with(pred, x >= xr[1] & x <= xr[2]))
[1] FALSE FALSE FALSE FALSE FALSE FALSE

この場合、データまたは関心領域の開始と終了の予測を実行して 2 つのポイントを結合できるのに、なぜ予測子変数の 50 または 100 の等間隔の値に対して予測を実行したのか疑問に思うかもしれません。 ? さて、すべてのモデリング演習がそれほど単純であるとは限りません.前の質問からモデルを2倍にすることはその好例です.上記で概説した一般的な解決策はすべての場合で機能しますが、2つの予測を単純に結合することはできません.

@Andrie がアイデア 2 の解決策を提供してくれました。

于 2011-06-08T14:33:29.597 に答える
2

1 つの方法は、色を使用して、適合する点と適合しない点を区別することです。

daten_fit <- lm(formula = y~x, data = daten[3:5, ])

plot(y ~ x, data = daten)
points(y ~ x, data = daten[3:5, ], col="red")
abline(reg=daten_fit, col="red")

ここに画像の説明を入力

2 番目の方法は、x 軸に目盛りをプロットすることです。これらの目盛りは敷物と呼ばれ、rug関数を使用して描画できます。しかし、最初に次を計算する必要がありますrange

#points(y ~ x, data = daten[3:5, ], col="red")
abline(reg=daten_fit, col="red")
rug(range(daten[3:5, 1]), lwd=3, col="red")

ここに画像の説明を入力

于 2011-06-08T13:58:29.783 に答える