我试图对32万行数据(6个变量)进行逻辑回归。对数据样本(10000)的逐步模型选择给出了一个具有5个交互项的相当复杂的模型:Y~X1+ X2*X3+ X2*X4+ X2*X5+ X3*X6+ X4*X5。glm()函数可以用10000行数据来拟合这个模型,但不能与整个数据集(320,000)相匹配。
使用bigglm逐个从SQL server读取数据块会导致错误,我无法理解来自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行)来适应相同的模型。
以前有人遇到过这个问题吗?还有其他方法来运行复杂的大数据物流模型吗?
发布于 2014-12-23 00:06:00
我遇到过很多次这个问题,它总是由这样一个事实引起的:由大的块处理的块没有包含一个分类(因子)变量中的所有级别。
较大的块按块处理数据,块的默认大小为5000。如果您的分类变量中有5个级别,例如(a,b,c,d,e)和第一个块(从1:5000开始),则只包含(a,b,c,d),但没有"e“,您将得到此错误。
您可以做的是增加“块大小”参数的大小和/或巧妙地重新排序数据帧,以便每个块包含所有级别。
希望这能帮上忙(至少有人)
发布于 2014-06-20 17:45:58
好的,我们找到了这个问题的原因:
对于交互术语中的一个类别,没有观察到。"glm“函数能够运行,并提供"NA”作为估计系数,但“大”不喜欢它。如果我放弃这个交互术语,"bigglm“就能够运行这个模型。
我将做更多的研究如何处理这种情况。
发布于 2014-06-20 15:09:03
我以前遇到过这个错误,以为是来自randomForest而不是biglm。原因可能是函数无法处理字符变量,因此需要将字符转换为因素。希望这能帮到你。
https://stackoverflow.com/questions/24317418
复制相似问题