Я запускаю код для построения 10-кратных ошибок перекрестной проверки (это то, чему я научился на онлайн-курсе в Стэнфорде). Цель состоит в том, чтобы выяснить, какое из множества значений переменных (многочлен степеней от 1 до 5) лучше всего подходит для дальнейших прогнозов вне выборки.
Исходное кодирование:
require(ISLR)
require(boot)
cv.error10=rep(0,5)
for(d in degree){
glm.fit=glm(mpg~poly(horsepower,d), data=Auto)
cv.error10[d]=cv.glm(Auto,glm.fit,K=10)$delta[1]
}
plot(degree,cv.error10,type="b",col="red")
Это прекрасно работает. Теперь я пытаюсь сделать то же самое для своих данных (я запускаю отрицательный бином)
glm.fit2<-glm(abs_pb_t ~ RI1 + RA1 + pacl_to + abs_pb + pbf3 + pbf32 + pbs + pbc + suc_inc + cdval + + cdval:RI1 + cdval:RA1 + pbf3:RI1 + pbf3:RA1 + pbf32:RI1 + pbf32:RA1 + Rfirm, data=p.data, family="quasipoisson")
cv.error10=rep(0,5)
for(d in degree){
glm.fit2=update(glm.fit2 , ~. + poly(yy,d), data=p.data, na.action="na.exclude")
cv.error10[d]=cv.glm(p.data,glm.fit2,K=10)$delta[1]
}
Я добавил исключение значений NA, потому что люди предлагали это в других вопросах SO (здесь , здесь и здесь).
Я получаю следующую ошибку:
Error in model.frame.default(formula = abs_pb_t ~ RI1 + RA1 + lnRnD + :
variable lengths differ (found for 'poly(yy, d)')
В моей формуле обновления переменная yy — это числовая переменная, которая идеально подходит для моего data.frame (592 наблюдения).
yy<-rep(seq(1:16),times=37) ; poly(yy,1) ; poly(yy,5)
В соответствии с файлом справки по «поли» пропущенные значения не допускаются, поэтому я не понимаю, почему эта переменная внезапно (с использованием полинома) генерирует пропущенные значения. Я проверил это, и полином не создает переменные NA, поэтому что-то еще должно объяснять, почему я получаю эту ошибку.
Есть идеи?
заранее спасибо
na.exclude
приводит к тому, что данные содержат меньше наблюдений. Я предлагаю вам подмножить остальные данные наcomplete.cases(yy)
, чтобы они были одинаковой длины. - person ilir   schedule 22.04.2014p.data[complete.cases(yy)]
может быть только в том случае, еслиyy
длиннее, чемp.data
имеет строки. Убедитесь, что они одного размера. - person ilir   schedule 22.04.2014