当模型包含因子或多项式时,使用predict.lm生成模型项的拟合值

时间:2012-12-17 20:23:52

标签: r

我想使用predict.lm为模型中的预测变量生成拟合值。换句话说,我想将lm对象中的系数估计乘以具有 n 行的新数据帧中的值。结果是具有 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 列少于 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包含x1的估算值以及x2的每个因素级别的估算值。但dfHard只有两列:一列用于x1,另一列用于x2。因此,predict会返回一个只有两列的矩阵:一列用于x1,另一列用于x2

在这种情况下,我希望预测返回一个矩阵,其中包含x1列和x2的每个级别。我可以使用以下代码生成该矩阵:

mf <- model.frame(formula(modHard), dfHard)
mm <- model.matrix(formula(modHard), mf)
t(modHard$coefficients * t(mm))

但是有更简单的方法吗?

0 个答案:

没有答案