首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不兼容维数误差vglm函数在VGAM中的应用

不兼容维数误差vglm函数在VGAM中的应用
EN

Stack Overflow用户
提问于 2014-12-19 16:44:42
回答 1查看 2.4K关注 0票数 12

TL;博士

我正在使用R中的VGAM包运行Tobit回归--这是一个玩具数据集,它一直给我一个我无法诊断的错误:

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

试图诊断

有追溯力:

代码语言:javascript
复制
> 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的源代码并找到了错误的来源:

代码语言:javascript
复制
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的源代码中找到了以下内容

代码语言:javascript
复制
    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是在哪里创建的,它正在做什么,以及为什么它导致了权重、回归者和回归者之间的冲突维度。

我观察到,将minSmaxS舍入十位或更少的位置会导致成功运行,但这是因为maxS增加了,所以第一次观察不再被右审查,minS增加了,因此第二、第四和第五次观察不再被左截审查。两者都改变了观测的最大似然函数的处理,所以我怀疑我会用错误的结果来污染回归。

有人能帮助诊断为什么会发生这种错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-17 12:58:15

我从软件包的开发人员那里得到消息说,这确实是一个错误,并且已经修复在预发布的包here中,它可能会在下一次迭代中升级到CRAN,或者当他的书发布时。

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

https://stackoverflow.com/questions/27570327

复制
相关文章

相似问题

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