首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将``VGAM::累计‘包装成一个辅助函数(``object’问题)?

如何将``VGAM::累计‘包装成一个辅助函数(``object’问题)?
EN

Stack Overflow用户
提问于 2022-04-25 13:19:42
回答 1查看 8关注 0票数 0

当我执行以下代码来测试有序logit模型中的比例赔率假设时,它工作得很好:

代码语言:javascript
复制
data = transform(VGAM::pneumo, let=log(exposure.time))
formula = cbind(normal, mild, severe) ~ let

fit_po = VGAM::vglm(formula, family=VGAM::cumulative(parallel=TRUE, link='logitlink'), data=data)
fit_h0 = VGAM::vglm(formula, family=VGAM::cumulative(parallel=FALSE, link='logitlink'), data=data)
VGAM::lrtest(fit_po, fit_h0)

但是,当我尝试将它封装到帮助函数log_lr_po_assumption中时,

代码语言:javascript
复制
log_lr_po_assumption = function(formula, data, method='logitlink') {
    fit_po = VGAM::vglm(formula, family=VGAM::cumulative(parallel=TRUE, link=method), data=data)
    fit_h0 = VGAM::vglm(formula, family=VGAM::cumulative(parallel=FALSE, link=method), data=data)
    VGAM::lrtest(fit_po, fit_h0)
}
log_lr_po_assumption(formula, data)

它失败了,因为:

代码语言:javascript
复制
Error in get(fun.name) : object 'method' not found

为什么会这样呢?我如何创建一个可以工作的方便包装器?

EN

回答 1

Stack Overflow用户

发布于 2022-04-25 13:36:22

解决这一问题的一种方法是强制使用do.call (使用默认的quote=FALSE)进行急切的计算:

代码语言:javascript
复制
log_lr_po_assumption = function(formula, data, method='logitlink') {
    po_family = do.call(VGAM::cumulative, list(parallel=TRUE, link=method))
    np_family = do.call(VGAM::cumulative, list(parallel=FALSE, link=method))

    fit_po = VGAM::vglm(formula, family=po_family, data=data)
    fit_h0 = VGAM::vglm(formula, family=np_family, data=data)
    VGAM::lrtest(fit_po, fit_h0)
}

虽然我认为应该有一个更简单的解决方案..。

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

https://stackoverflow.com/questions/72000261

复制
相关文章

相似问题

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