在R中使用基于具有不同对比度的model.matrix的predict.lm

德德

目的是根据多元回归模型预测新的观察结果。

该模型包括两个因素(带效果编码的“ ec”,带伪编码的“ dc”)和数字变量(“ num”)以及交互项“ ec”和“ num”。

但是,基于新数据的predict.lm函数失败。

# Dependent variable 

y <- rnorm(12, 50, 10)

# Independent variables

# Dummy coding

dc <- factor(x=c("Schlecht", "Gut", "Mittel", "Schlecht", "Gut", "Mittel", "Schlecht", "Gut", "Mittel", "Schlecht", "Gut", "Mittel"))

contrasts(dc) <- contr.treatment(3, 1)

# Effect coding

ec <- factor(x=c("A", "B", "C", "D", "A", "B", "C", "D", "A", "B", "C", "D"))

contrasts(ec) <- contr.sum(4)

num <- rnorm(12, 10, 2)

# Design matrix

df <- data.frame(dc = dc, ec = ec, num = num)

lm_dm <- model.matrix(~ 1 + ec + dc * num, df)

lm <- lm(y ~ 0 + lm_dm)

# prediction

newdata <- data.frame(dc = c("Schlecht", "Gut", "Gut"), ec = c("C", "D", "B"), num = c(9, 8, 12))

predict.lm(lm, newdata)

如何使用估计的模型进行新的预测?

朱利叶斯·维诺拉(Julius Vainora)

问题在于该模型是使用外部矩阵而不是使用data参数来估计的相反,我们可能会做

mod <- lm(y ~ 1 + ec + dc * num, data = df)
predict.lm(mod, newdata)
#        1        2        3 
# 24.19016 71.26768 59.50670

坚持不使用它很复杂。例如,您版本中的变量mod具有name lm_dmec1lm_dmdc3我们需要将其匹配。此外,在供应的过程lm_dm作为一个整体,我们赔信息ecdc的因素; 由于这个原因,我们不能使用dcec作为您的因素newdata; 相反,我们必须为所有级别使用虚拟变量因此,最好的替代方法似乎是手动执行预测:

model.matrix(~ 1 + ec + dc * num, newdata) %*% coef(mod)
#       [,1]
# 1 57.08853
# 2 31.90847
# 3 47.81049

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章