R mlogit软件包:使用LAPACK代替LINPACK

时间:2019-06-13 18:13:51

标签: r mlogit

我正在使用一个非常大的数据集(1.016亿单位替代品)估算一个相当简单的McFadden选择模型。我可以使用asclogit命令在Stata中估计该模型很好,但是当我尝试在R中使用mlogit包时,出现以下错误:

region1 <- mlogit(chosen ~ mean_log.wage + mean_log.rent + bornNear + Dim.1 + regionFE | 0,
                  shape= "long", chid.var = "chid", alt.var = "alternatives", data = ready)

Error in qr.default(na.omit(X)) : too large a matrix for LINPACK
Calls: mlogit ... model.matrix -> model.matrix.mFormula -> qr -> qr.default

如果我查看qr.R的{​​{3}},很明显,相对于LINPACK的2,147,483,647限制,我的设计矩阵中的元素数量太大。但是,LAPACK没有这样的限制(至少可以告诉我)。

来自qr.R

qr.default <- function(x, tol = 1e-07, LAPACK = FALSE, ...)
{
    x <- as.matrix(x)
    if(is.complex(x))
        return(structure(.Internal(La_qr_cmplx(x)), class = "qr"))
    ## otherwise :
    if(LAPACK)
        return(structure(.Internal(La_qr(x)), useLAPACK = TRUE, class = "qr"))
    ## else "Linpack" case:
    p <- as.integer(ncol(x))
    if(is.na(p)) stop("invalid ncol(x)")
    n <- as.integer(nrow(x))
    if(is.na(n)) stop("invalid nrow(x)")
    if(1.0 * n * p > 2147483647) stop("too large a matrix for LINPACK")
    ...
在创建qr()时(可能是在source code时,在mFormula的{​​{1}}方法中似乎调用了

mlogit。但是我无法确定是否有将model.matrix传递给LAPACK = TRUE的方法,或者是否有跳过NA检查的方法。

我希望checking NAs会看到这个。

正如我提到的,我可以在Stata中估计该模型很好,因此这不是资源问题。我的Stata许可证不是便携式的,这就是为什么我要使用R。

1 个答案:

答案 0 :(得分:1)

多亏了Julius的评论和R中关于命名空间的this post,我才找到了答案。我在库语句之后添加了以下代码:

38 is DOWN

source("mymFormula.R") tmpfun <- get("model.matrix.mFormula", envir = asNamespace("mlogit")) environment(mymFormula) <- environment(tmpfun) attributes(mymFormula) <- attributes(tmpfun) # don't know if this is really needed assignInNamespace("model.matrix.mFormula", mymFormula, ns="mlogit") 是一个R脚本,我在其中复制/粘贴了mymFormula.R的内容,并在文件顶部的mlogit:::model.matrix.mFormula调用之前添加了mymFormula <-

我通过在RStudio中键入function来查看mlogit:::model.matrix.mFormula的内容。 (感谢this answer对此的帮助。)