我已经拟合了一个二次模型,并使用方差结构允许每个因素级别有不同的方差水平,但现在只有2个条目的新数据集上预测时遇到了困难。以下是一个可复制的示例:
library(nlme)
set.seed(101)
mtcars$amf <- factor(mtcars$am)
modGLS <- gls(mpg ~ amf*poly(hp, 2),
weights = varIdent(form = ~ 1|amf), data = mtcars)
minhp <- min(mtcars$hp); maxhp <- max(mtcars$hp)
newdata <- data.frame(amf = as.factor(c(0, 1)),
hp = round(runif(2, min = minhp, max = maxhp)))
newdata2 <- data.frame(amf = as.factor(c(0, 0, 1)),
hp = round(runif(3, min = minhp, max = maxhp)))
predict(modGLS, newdata = newdata)
# Error in poly(hp, 2) : 'degree' must be less than number of unique points
predict(modGLS, newdata = newdata2)
## [1] 5.973306 13.758955 44.037921
## attr(,"label")
## [1] "Predicted values"
然而,在一个
lm
框架中,预测效果很好:modLM <- lm(mpg ~ amf*poly(hp, 2), mtcars)
predict(modLM, newdata = newdata)
## 1 2
## 25.22253 16.83943
为什么会这样?
emmeans
的一个包维护者似乎认为这可能与attr(, “predvars”)
上缺少的信息有关(请参见我们在此处的讨论:https://github.com/rvlenth/emmeans/issues/133)。我已向Bates博士(
nlme
的联络点)报告了此事,但我想联系更广泛的社区。提前感谢您的帮助。
terms(modGLS)
中应该有一个“predvars”属性。 - Russ Lenth