Я оцениваю довольно простую модель выбора Макфаддена, используя очень большой набор данных (101,6 миллиона единиц-альтернатив). Я могу точно оценить эту модель в Stata, используя команду asclogit
, но когда я пытаюсь использовать пакет mlogit
в R, я получаю следующую ошибку:
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
, становится ясно, что количество элементов в моей матрице дизайна слишком велико по сравнению с пределом 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()
, кажется, вызывается в методе mFormula
из mlogit
, когда создается model.matrix
и, вероятно, при проверке NA . Но я не могу сказать, есть ли способ передать LAPACK = TRUE
в mlogit
или есть способ пропустить проверку NA.
Я надеюсь @ YvesCroissant увидит это.
Как я уже говорил, я могу точно оценить эту модель в Stata, так что это не вопрос ресурсов. Моя лицензия Stata не переносима, поэтому я хотел бы использовать R.