прогнозирование в R дает неправильное количество прогнозов

#r

#r

Вопрос:

Я разделил свой набор данных на 2 фрейма данных: обучающий (имеющий 830 строк) и тестовый (200 строк). Имена столбцов идентичны и расположены в том же порядке.

Я построил естественную сплайновую модель для прогнозирования прочности по одной переменной, цементу.

Когда я пытаюсь использовать эту модель для составления прогнозов в моем тестовом наборе, вместо ожидаемых 200 прогнозов я получаю 830 прогнозов. Я не знаю, почему это происходит. Я просмотрел страницы справки и Веб, но не нашел ничего, что решало бы эту проблему.

Я проверил размеры test $ cement, и в нем действительно всего 200 записей.

Вот мой код прямо сейчас:

 library(tidyverse)
library(caret)
library(splines)

attach(train)
fit1 <- lm(strength~ns(cement, 4), data = train)
summary(fit1)
pred1 <- predict(fit1, newdata = data.frame(test$cement), se=T)
pred1
detach(train)
  

Я также пробовал эти версии predict:

pred2 <- fit1 %>% предсказать (тест $ cement)

—> что выдает мне ошибки, говорящие о том, что он не понимает %>%

pred = predict.BSpline(fit1, newdata = test $ cement, se = T)

и

pred = predict.bSpline2(fit1, newdata = test $ cement, se = T)

—> Оба из которых говорят мне, что они не могут найти функцию predict.BSpline или predict.bSpline2, хотя я открыл библиотеки как splines, так и splines2.

Также predict.ns, похоже, не существует.

Любая помощь была бы высоко оценена.

Комментарии:

1. newdata должно иметь то же имя, что и предсказатели в модели, поэтому попробуйте newdata = data.frame(cement=test$cement) . и, пожалуйста, не используйте attach , поскольку это может вызвать кучу проблем.

Ответ №1:

У меня нет ваших данных, но вы должны попробовать пройти тест всего фрейма данных:

 pred1 <- predict(fit1, newdata = test, se=T)
  

также «%>%» оператора определяется в «tidyr» библиотека верю.

Я думаю, что predict.ns predict.BSpline переопределяет функцию прогнозирования — посмотрите ее документацию. Хотя я никогда не использовал объекты spline, то, что я прочитал, предполагает, что вы просто используете тип объекта из этой библиотеки с обычной функцией «predict».

Ответ №2:

Я думаю, нам нужно было бы увидеть воспроизводимый пример вашего набора данных, потому что я думаю, что это может быть причиной вашей проблемы. Когда я использую следующий код, я получаю правильные результаты:

 library(dplyr)
library(splines)

train <- sample_frac(mtcars, .8)

test <- setdiff(mtcars, train)

fit1 <- lm(mpg~ns(wt, 4), data = train)

pred1 <- predict(fit1, newdata = test, se=T)

pred1
  

Просто подумав о том, caret я бы убедился, что вы не создаете объект list при создании своих разделений на поезда / тесты ( createDataPartition(list = FALSE) )

Кроме того, я бы не использовал attach . Для ввода всех имен переменных требуется немного больше ввода, но иногда вы можете получать странные результаты, которые могут быть тем, что происходит с вами. Я бы перезапустил ваш сеанс R, удалил прикрепление и затем повторил попытку.

Не лучшее решение, но я бы попробовал.