首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R包:使用LAPACK而不是LINPACK

R包:使用LAPACK而不是LINPACK
EN

Stack Overflow用户
提问于 2019-06-13 18:13:51
回答 1查看 470关注 0票数 4

我正在使用一个非常大的数据集(1.016亿个单元-替代品)来估计一个相当简单的McFadden选择模型。我可以使用asclogit命令在Stata中很好地估计这个模型,但是当我试图在R中使用mlogit包时,我会得到以下错误:

代码语言:javascript
复制
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

如果我查看源代码 of qr.R,很明显,相对于2,147,483,647的LINPACK极限,设计矩阵中的元素数量太大了。但是,LAPACK不存在这样的限制(至少我可以判断)。

来自qr.R

代码语言:javascript
复制
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()似乎是在mlogitmFormula方法中调用的,在创建model.matrix时,并且可能在检查NAs中调用。但我无法判断是否有一种将LAPACK = TRUE传递给mlogit的方法,或者是否有一种跳过NA检查的方法。

我希望@YvesCroissant能看到这个。

正如我提到的,在Stata中,我可以很好地估计这个模型,所以这不是一个资源问题。但是,我的Stata许可证是不可移植的,这就是为什么我想使用R。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-13 21:27:32

由于Julius的评论和关于R中名称空间的这个职位,我找到了答案。我在库语句之后添加了以下代码:

代码语言:javascript
复制
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")

mymFormula.R是一个R脚本,我在该脚本中复制/粘贴了mlogit:::model.matrix.mFormula的内容,并在文件顶部的function调用之前添加了mymFormula <-

我通过在mlogit:::model.matrix.mFormula中键入trace(mlogit:::model.matrix.mFormula, edit=TRUE)来查看RStudio的内容。(感谢这个答案就如何做到这一点提供帮助。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56586369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档