Predict() в более широком диапазоне

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

Используя те же данные из dplyrdo-requires-named-function

это работает хорошо. Но если вы хотите изменить диапазон фитинга, я получаю сообщение об ошибке!

library(dplyr)
iris %>%
  group_by(Species) %>%
  do({
    mod <- lm(Sepal.Length ~ Sepal.Width, data = .)
    pred <- predict(mod, newdata = data.frame(Sepal.Width=seq(1,10,length.out=51)))
    data.frame(., pred)
  })

Ошибка в data.frame(., pred): аргументы подразумевают разное количество строк: 50, 51

Я так понимаю, что новый диапазон не совпадает с предыдущими данными .. OTH, мне нужно предсказать более широкий диапазон значений Sepal.Width. Это возможно ?


person Alexander    schedule 26.07.2017    source источник


Ответы (1)


Когда вы используете data.frame(.,pred), вы пытаетесь связать воедино существующий фрейм данных с 50 строками и новый прогноз с 51 строкой. Если вы замените эту строку на data.frame(pred), все будет работать нормально:

# A tibble: 153 x 2
# Groups:   Species [3]
   Species     pred
    <fctr>    <dbl>
 1  setosa 3.329491
 2  setosa 3.453779
 3  setosa 3.578067
 ...
person Ben Bolker    schedule 26.07.2017
comment
Это круто, но если вы хотите построить что-то с использованием того же . data.frame, полезно иметь data.frame(.,pred). В другом случае, я думаю, нам нужно построить другие данные из этого. Например, если я хочу построить график Sepal.Length_predicted и pred, мне нужно построить новый data.frame. Я прав? - person Alexander; 26.07.2017
comment
и этот Sepal.Lenght_predicted исходит из любого подходящего коэффициента, который мы получаем от lm. - person Alexander; 26.07.2017