我试图对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行)拟合相同的模型。
之前有没有人遇到这个问题?使用大数据运行复杂逻辑模型的任何其他方法?
答案 0 :(得分:12)
我多次遇到这个问题,并且总是由bigglm处理的块不包含分类(因子)变量中的所有级别这一事实引起的。
bigglm按块来处理数据,并且块的默认大小为5000.如果您的分类变量中有5个级别,例如(a,b,c,d,e)和你的第一个块(从1:5000)只包含(a,b,c,d),但没有“e”你会得到这个错误。
您可以做的是增加“chunksize”参数的大小和/或巧妙地重新排序数据帧,以便每个块包含所有级别。
希望这有助于(至少有人)
答案 1 :(得分:3)
好的,我们能够找到导致此问题的原因:
对于其中一个互动术语中的一个类别,没有观察到。 &#34; GLM&#34;功能能够运行并提供&#34; NA&#34;作为估计系数,但是&#34; bigglm&#34;不喜欢它。 &#34; bigglm&#34;如果我删除此交互术语,则能够运行该模型。
我会就如何应对这种情况做更多的研究。
答案 2 :(得分:0)
之前我遇到过这个错误,认为它来自randomForest而不是biglm。原因可能是函数无法处理字符变量,因此需要将字符转换为因子。希望这可以帮到你。