Модель работает с 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 строк).

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


person ybeybe    schedule 19.06.2014    source источник


Ответы (3)


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

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

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

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

person Jaroslaw Piskorski    schedule 23.12.2014
comment
Есть какие-нибудь подсказки о простом способе умного переупорядочивания? - person Jon M; 15.01.2015

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

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

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

person ybeybe    schedule 20.06.2014
comment
вы могли бы просто попробовать data=na.omit(qlQuery(myconn,train_dat)) - person Ben Bolker; 20.06.2014
comment
Спасибо, Бен. Я пробовал, не работает. Так как na.omit удаляет все НП из моих данных. но в моих данных проблема не в NA. Проблема в том, что bigglm не может оценить коэффициент для одной категории. Например, X1 имеет три уровня (1,2,3), X2 имеет два уровня (1,2). но нет наблюдения с атрибутами X1-2 и X2-2. поэтому оценка для этого атрибута будет NA. это нормально, но почему-то bigglm вообще не запускался. - person ybeybe; 20.06.2014
comment
это называется дефицитом ранга - - Я не знаю, как с этим справиться в bigglm, но, по крайней мере, вы знаете, по какому ключевому слову искать. - person Ben Bolker; 20.06.2014
comment
небольшой поиск не вызывает явных дискуссий. Это может быть сложно - возможно, даже стоит связаться с biglm сопровождающими. - person Ben Bolker; 20.06.2014
comment
Спасибо, Бен! Я опубликую здесь еще раз, если свяжусь с сопровождающими. - person ybeybe; 20.06.2014

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

person Yoki    schedule 20.06.2014
comment
вероятно, это должен быть комментарий, а не ответ. - person Ben Bolker; 20.06.2014
comment
Спасибо, Йоки. У меня есть все переменные числа или множители, без символа. но ваш ответ действительно помог нам найти причину этой проблемы (см. ниже). Спасибо еще раз. - person ybeybe; 20.06.2014