簡単なグラフを作成できます。同じグラフで(線形回帰から)観測値と予測値を取得したいと思います。 Yvariable
vs Xvariable
と言ってプロットしています。予測子は1つ、応答は1つだけです。同じグラフに線形回帰曲線を追加するにはどうすればよいですか?
したがって、結論として、次のような支援が必要です。
これは、ポイントとしての単一プロットの観測値と予測値の1つのオプションです。 2番目に説明する観測点の回帰直線を取得する方が簡単です。
最初にいくつかのダミーデータ
set.seed(1)
x <- runif(50)
y <- 2.5 + (3 * x) + rnorm(50, mean = 2.5, sd = 2)
dat <- data.frame(x = x, y = y)
モデルに合わせる
mod <- lm(y ~ x, data = dat)
モデルの出力と観測されたx
をplottの単一のオブジェクトに結合します
res <- stack(data.frame(Observed = dat$y, Predicted = fitted(mod)))
res <- cbind(res, x = rep(dat$x, 2))
head(res)
格子をロードしてプロット
require("lattice")
xyplot(values ~ x, data = res, group = ind, auto.key = TRUE)
結果のプロットは次のようになります
観測データの回帰直線だけを取得し、回帰モデルが私が示すもののような単純な直線モデルである場合、これのほとんどを回避し、を使用してプロットすることができます
xyplot(y ~ x, data = dat, type = c("p","r"), col.line = "red")
(つまり、モデルを適合させたり、プロットのために新しいデータを作成したりする必要はありません)
結果のプロットは次のようになります
回帰直線の係数を与えるもので使用できる最初の例の代わりに、独自のパネル関数を作成することもできます。見た目ほど怖くはありません。
xyplot(y ~ x, data = dat, col.line = "red",
panel = function(x, y, ...) {
panel.xyplot(x, y, ...)
panel.abline(coef = coef(mod), ...) ## using mod from earlier
}
)
これにより、上記の図2のプロットが得られますが、手作業で行われます。
キャレットでこれを行ったと仮定すると
mod <- train(y ~ x, data = dat, method = "lm",
trControl = trainControl(method = "cv"))
xyplot(y ~ x, data = dat, col.line = "red",
panel = function(x, y, ...) {
panel.xyplot(x, y, ...)
panel.abline(coef = coef(mod$finalModel), ...) ## using mod from caret
}
)
上記の図2と同じプロットが生成されます。
もう1つのオプションは、latticeExtra
からpanel.lmlineq
を使用することです。
library(latticeExtra)
set.seed(0)
xsim <- rnorm(50, mean = 3)
ysim <- (0 + 2 * xsim) * (1 + rnorm(50, sd = 0.3))
## basic use as a panel function
xyplot(ysim ~ xsim, panel = function(x, y, ...) {
panel.xyplot(x, y, ...)
panel.lmlineq(x, y, adj = c(1,0), lty = 1,xol.text='red',
col.line = "blue", digits = 1,r.squared =TRUE)
})