Модель работает с GLM, но не с BigGLM

Я пытался запустить логистическую регрессию на 320 000 строк данных (6 переменных). Пошаговый выбор модели на выборке данных (10000) дает довольно сложную модель с 5 терминами взаимодействия: Y~X1+ X2*X3+ X2*X4+ X2*X5+ X3*X6+ X4*X5, glm() Функция могла бы уместить эту модель на 10000 строк данных, но не на весь набор данных (320 000).

С помощью bigglm чтение фрагмента данных по фрагменту с сервера SQL привело к ошибке, и я не мог понять результаты из traceback():

fit <- bigglm(Y~X1+ X2*X3+ X2*X4+ X2*X5+ X3*X6+ X4*X5, 
       data=sqlQuery(myconn,train_dat),family=binomial(link="logit"), 
       chunksize=1000, maxit=10)

Error in coef.bigqr(object$qr) : 
NA/NaN/Inf in foreign function call (arg 3)

> traceback()
11: .Fortran("regcf", as.integer(p), as.integer(p * p/2), bigQR$D, 
    bigQR$rbar, bigQR$thetab, bigQR$tol, beta = numeric(p), nreq = as.integer(nvar), 
    ier = integer(1), DUP = FALSE)
10: coef.bigqr(object$qr)
9: coef(object$qr)
8: coef.biglm(iwlm)
7: coef(iwlm)
6: bigglm.function(formula = formula, data = datafun, ...)
5: bigglm(formula = formula, data = datafun, ...)
4: bigglm(formula = formula, data = datafun, ...)

bigglm был в состоянии соответствовать меньшей модели с меньшим количеством условий взаимодействия. но bigglm не смог уместить ту же модель с небольшим набором данных (10000 строк).

Кто-нибудь сталкивался с этой проблемой раньше? Любой другой подход для запуска сложной логистической модели с большими данными?

3 ответа

Решение

Я сталкивался с этой проблемой много раз, и она всегда была вызвана тем фактом, что блоки, обработанные bigglm, не содержали все уровни в категориальной (факторной) переменной.

bigglm сокращает данные по чанкам, и размер чанка по умолчанию равен 5000. Если у вас есть, скажем, 5 уровней в вашей категориальной переменной, например (a,b,c,d,e) и в вашем первом чанке (от 1:5000) содержит только (a,b,c,d), но без "e" вы получите эту ошибку.

Что вы можете сделать, так это увеличить размер аргумента "chunksize" и / или хитро переупорядочить ваш фрейм данных, чтобы каждый чанк содержал ВСЕ уровни.

надеюсь, что это поможет (по крайней мере, кто-то)

Итак, мы смогли найти причину этой проблемы:

для одной категории в одном из терминов взаимодействия нет наблюдения. Функция "glm" была в состоянии выполнить и предоставить "NA" в качестве оценочного коэффициента, но "bigglm" это не нравится. "bigglm" смог запустить модель, если я отбросил этот термин взаимодействия.

Я сделаю больше исследований о том, как справиться с такой ситуацией.

Я встречал эту ошибку раньше, думал, что это от randomForest вместо biglm. Причиной может быть то, что функция не может обрабатывать символьные переменные, поэтому вам необходимо преобразовать символы в факторы. Надеюсь, это поможет вам.

Другие вопросы по тегам