Оценка линейной модели с новыми данными возвращает подогнанные значения - PullRequest
1 голос
/ 26 апреля 2020

Я строю и оцениваю свою модель, как показано ниже.

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 в этом случае. Некоторая помощь будет высоко ценится.

1 Ответ

1 голос
/ 27 апреля 2020

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
  • V1 и V2 - имена столбцов по умолчанию, назначаемые при преобразовании матрицы во фрейм данных.
  • эта спецификация не будет Если вы располагаете неизвестным и / или большим количеством столбцов, которые нужно поместить в полином (например, poly(V1, ..., V1000, degree=2, raw=TRUE))

, если вы заранее не знаете количество столбцов, 1015 * немного хакерское решение будет:

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))

(не проверено)

...