2014-12-19 3 views
11

TL; DRR: Inkompatible Abmessungen Fehler vglm Funktion in VGAM


I Tobit-Regressionen mit dem VGAM Paket in R leite - Hier ist ein Spielzeug-Datensatz, die konsequent mir einen Fehler geben, dass ich habe nicht in der Lage gewesen zu diagnostizieren:

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 

Versuche

01.235.164 zu diagnostizieren

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

ich den Quellcode für lm.wfit gesehen habe und die Quelle des Fehlers finden:

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

ich folgende in dem Quellcode für vglm gefunden habe:

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

Die Methode ist standardmäßig auf vglm.fit eingestellt.

Ich habe immer noch nicht in der Lage gewesen zu finden, wo die Ausschlusskriterien use.i11 erstellt wird, was es tut und warum kommt es zu widersprüchlichen Dimensionen zwischen den Gewicht, Regressor und regressand.

Ich habe beobachtet, dass Rundung des minS und maxS bis zehn oder weniger Orte führt zu einem erfolgreichen Lauf, aber das liegt daran, dass maxS erhöht wird, um die erste Beobachtung nicht mehr rechtszensierte und minS erhöht wird, um die 2., 4. und 5. Beobachtungen werden nicht mehr zensiert. Beide ändern die Behandlung der Beobachtung in der Maximum-Likelihood-Funktion, so dass ich vermute, dass ich die Regression mit falschen Ergebnissen kontaminieren würde.

Kann jemand freundlicherweise helfen zu diagnostizieren, warum diese Art von Fehler auftritt?

+0

hast du die Werte wie folgt abgerundet: 'minS = 0,75; maxS = 1.83'? –

Antwort

5

Ich erhielt vom Entwickler des Pakets die Nachricht, dass dies tatsächlich ein Fehler war und der in dem vorveröffentlichten Paket here behoben wurde, das vermutlich in der nächsten Iteration auf den CRAN aktualisiert wird - oder wenn sein Buch ist freigegeben.