Проблема проиллюстрирована с помощью приведенного ниже кода. Если вы запустите его, вы увидите, что lm изящно обрабатывает прогноз, в то время как gls этого не делает. Это, скорее всего, проблема в predict.gls, но я не понимаю, почему. Это проблема только при использовании вызова фактора. Без него все работает нормально. Я вполне уверен, что predict.gls не работает, потому что в новом наборе данных нет всех уровней. Тем не менее, я с этим справился. Для меня это похоже на ошибку, но я недостаточно хорошо разбираюсь в коде gls, чтобы определить ее.
library(nlme)
# lm example
myfit<-lm(mpg~factor(cyl):disp+hp, data=mtcars)
mypred<-predict(myfit, mtcars[1:3, 1:7])
# gls example
myfit2<-gls(mpg~factor(cyl):disp+hp, data=mtcars)
mypred2<-predict(myfit2, mtcars[1:3, 1:7])
Вылетает с ошибкой:
# Error in X[, names(cf), drop = FALSE] : subscript out of bounds
Есть идеи?
Мой вывод R.version:
платформа x86_64-pc-linux-gnu
arch x86_64
os linux-gnu
система x86_64, linux-gnu
статус
основная 3
второстепенная 0.2
год 2013
месяц 09
день 25
svn rev 63987
язык R
version.string R версия 3.0.2 (25-09-2013) псевдоним Frisbee Sailing
Версия пакета nlme: «пакет ‘nlme’ версии 3.1-113"
predict.gls
должен использовать аргументxlev
вmodel.frame
. Но авторы могут возразить, что вам действительно следует преобразовывать столбец так, чтобы он учитывал ваши данные заранее. - person joran   schedule 06.03.2014mypred2<-predict(myfit2, mtcars[1:5, 1:7])
работает. Это можно считать ошибкой в том, какpredict.gls
обрабатывает факторы. - person Roland   schedule 06.03.2014mtcars$cyl <- factor(mtcars$cyl); myfit2<-gls(mpg~cyl:disp+hp, data=mtcars)
. - person Roland   schedule 06.03.2014