使用新数据评估线性模型返回拟合值

问题描述 投票:1回答:1

我正在构建和评估我的模型,如下所示。

yData <- rnorm(10)
xData <- matrix(rnorm(20), 10, 2)
polyModel <- lm(yData~polym(xData, degree=2, raw=T))
newData <- matrix(rnorm(100), 50, 2)
yPredicted <- predict(polyModel, polym(newData, degree=2, raw=T))

但是,模型评估yPredicted等于拟合值polyModel$fitted.values,它是长度为10的向量。在这种情况下,我期望yPredicted是长度为50的向量。一些帮助将不胜感激。

r lm predict poly
1个回答
1
投票

predict()不能很好地工作,除非在data参数中指定了数据。这似乎起作用:

polyModel <- lm(yData~poly(V1, V2, degree=2, raw=TRUE),
                data=as.data.frame(xData))
length(fitted(polyModel))  ## 10
newData <- matrix(rnorm(100), 50, 2)
yPredicted <- predict(polyModel, newdata=as.data.frame(newData))
length(yPredicted) ## 50
  • [V1V2是将矩阵转换为数据帧时分配的默认列名称。
  • 如果要在多项式中放入未知和/或大量的列(例如poly(V1, ..., V1000, degree=2, raw=TRUE)),此规范将无法正常工作

如果您不预先知道列数,则 hacky解决方案将是:

f <- as.formula(sprintf("yData~poly(%s, degree=2, raw=TRUE)",
           paste("V", seq(ncol(xData)), sep="", collapse=", "))
polyModel <- lm(f, data=as.frame(xData))

(未测试)

© www.soinside.com 2019 - 2024. All rights reserved.