predict.lm
モデルの予測子の適合値を生成するために使用したいと思います。つまり、オブジェクトの係数推定値に、 n行lm
の新しいデータ フレームの値を乗算したいと考えています。結果は、各値に対応する係数が乗算された n行の行列になります。
これは、新しいデータ フレームにオブジェクト内の各係数推定値の列がある場合に簡単に実行できlm
ます。例えば:
y <- rnorm(6)
x1 <- rnorm(6)
x2 <- rnorm(6)
modEasy <- lm(y ~ x1 + x2)
dfEasy <- data.frame(x1 = rnorm(6), x2 = rnorm(6))
predict(modEasy, newdata = dfEasy, type = "terms")
しかし、モデルに因子変数または多項式が含まれている場合、適合値を生成するのは困難です。このような場合、新しいデータ フレームの列はk列より少なくなります。例えば:
y <- rnorm(6)
x1 <- rnorm(6)
x2 <- factor(rep(letters[1:3], 2))
modHard <- lm(y ~ x1 + x2)
dfHard <- data.frame(x1 = rnorm(6), x2 = factor(rep(letters[1:3], each=2)))
predict(modHard, newdata = dfHard, type = "terms")
この場合、にはと の各因子水準のmodHard$coefficients
推定値が含まれています。ただし、列は 2 つしかありません。1 つは 用、もう 1 つは 用です。その結果、は 2 つの列のみを持つ行列を返します。1 つは 用、もう 1 つは 用です。 x1
x2
dfHard
x1
x2
predict
x1
x2
この状況では、predict でx1
、 の各レベルの および の列を含む行列を返すようにしますx2
。このコードでそのマトリックスを作成できます。
mf <- model.frame(formula(modHard), dfHard)
mm <- model.matrix(formula(modHard), mf)
t(modHard$coefficients * t(mm))
しかし、もっと簡単な方法はありますか?