Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R: Incompatible Dimensions Error vglm function in VGAM

Tags:

r

glm

vgam

TL;DR


I am running Tobit regressions with the VGAM package in R -- Here is a toy dataset that is consistently giving me an error that I have not been able to diagnose:

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

Attempts to diagnose

With traceback:

> 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)

I have viewed the source code for lm.wfit and find the source of the error:

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...>
  }

I have found the following in the source code for 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, 
        ...)

Where the method is defaulted to vglm.fit.

I still have not been able to locate where the exclusion criteria use.i11 is created, what it is doing and why it results in conflicting dimensions between the weights, regressor and regressand.

I have observed that rounding the minS and maxS to ten or less places results in a successful run, but this is because maxS is increased so the 1st observation is no longer right censored and minS is increased so the 2nd, 4th and 5th observations are no longer left censored. Both alter the observation's treatment in the maximum likelihood function so I suspect I would be contaminating the regression with false results.

Can someone kindly help diagnose why this type of error occurs?

like image 293
mlegge Avatar asked Dec 19 '14 16:12

mlegge


1 Answers

I received word from the package's developer that this was indeed a bug and that is has been fixed in the pre-released package here, which will presumably be upgraded to the CRAN in the next iteration -- or when his book is released.

like image 99
mlegge Avatar answered Sep 30 '22 15:09

mlegge