R: Несовместимые размеры Ошибка функции vglm в VGAM

TL;DR


Я запускаю регрессии Tobit с пакетом VGAM в R. Вот игрушечный набор данных, который постоянно выдает мне ошибку, которую я не смог диагностировать:

library(data.table)
library(VGAM)

> sessionInfo()$otherPkgs
$VGAM
Package: VGAM
Version: 0.9-7
Date: 2015-03-06
... <ommitted> ...

reg_data <- structure(list(S = c(1.83271488441825, 0.75411550370994, 0.904938604451928, 
                                 0.75411550370994, 0.75411550370994), H = c(0.6429, 0.7788, 
                                                                            0.6292, 0.8892, 0.2035), W= c(1.52497, 1.1391, 1.59722, 
                                                                                                          1.8406, 1.01865)), .Names = c("S", "H", "W"), class = c("data.table", 
                                                                                                                                                                  "data.frame"), row.names = c(NA, -5L))

minS <- 0.75411550370994
maxS <- 1.83271488441825

m <- vglm(S ~ H, tobit(Upper = maxS, Lower = minS), weights = W, data = reg_data)
Error in lm.wfit(x = cbind(x[!use.i11, ]), y = y[!use.i11, ii], w = w[!use.i11,  : 
  incompatible dimensions

Попытки диагностики

С трассировкой:

> traceback()
6: stop("incompatible dimensions")
5: lm.wfit(x = cbind(x[!use.i11, ]), y = y[!use.i11, ii], w = w[!use.i11, 
       ii])
4: eval(expr, envir, enclos)
3: eval(slot(family, "initialize"))
2: vglm.fitter(x = x, y = y, w = w, offset = offset, Xm2 = Xm2, 
       Ym2 = Ym2, etastart = etastart, mustart = mustart, coefstart = coefstart, 
       family = family, control = control, constraints = constraints, 
       criterion = control$criterion, extra = extra, qr.arg = qr.arg, 
       Terms = mt, function.name = function.name, ...)
1: vglm(y ~ x, tobit(Upper = maxy, Lower = miny), weights = w, data = X)

Я просмотрел исходный код lm.wfit и нашел источник ошибки:

function (x, y, w, offset = NULL, method = "qr", tol = 1e-07, 
    singular.ok = TRUE, ...) 
{
  <ommitted...>
    if (NROW(y) != n | length(w) != n) 
        stop("incompatible dimensions")
  <ommitted...>
  }

В исходном коде для vglm я нашел следующее:

    vglm.fitter <- get(method)
    fit <- vglm.fitter(x = x, y = y, w = w, offset = offset, 
        Xm2 = Xm2, Ym2 = Ym2, etastart = etastart, mustart = mustart, 
        coefstart = coefstart, family = family, control = control, 
        constraints = constraints, criterion = control$criterion, 
        extra = extra, qr.arg = qr.arg, Terms = mt, function.name = function.name, 
        ...)

Где метод по умолчанию равен vglm.fit.

Я до сих пор не смог найти, где создается критерий исключения use.i11, что он делает и почему это приводит к конфликтующим измерениям между весами, регрессором и регрессом.

Я заметил, что округление minS и maxS до десяти или менее знаков приводит к успешному запуску, но это потому, что maxS увеличивается, поэтому 1-е наблюдение больше не цензурируется справа, а minS увеличивается, поэтому 2-е, 4-е и 5-е наблюдения не больше не подвергается цензуре. Оба изменяют обработку наблюдения в функции максимального правдоподобия, поэтому я подозреваю, что загрязню регрессию ложными результатами.

Может ли кто-нибудь помочь диагностировать, почему возникает этот тип ошибки?


person mlegge    schedule 19.12.2014    source источник
comment
вы округляли такие значения minS=0.75; maxS=1.83?   -  person Mamoun Benghezal    schedule 13.04.2015


Ответы (1)


Я получил сообщение от разработчика пакета, что это действительно ошибка, и она была исправлена ​​в предварительно выпущенном пакете здесь, который, предположительно, будет обновлен до CRAN в следующей итерации — или когда выйдет его книга.

person mlegge    schedule 17.04.2015