当我执行以下代码来测试有序logit模型中的比例赔率假设时,它工作得很好:
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中时,
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)它失败了,因为:
Error in get(fun.name) : object 'method' not found为什么会这样呢?我如何创建一个可以工作的方便包装器?
发布于 2022-04-25 13:36:22
解决这一问题的一种方法是强制使用do.call (使用默认的quote=FALSE)进行急切的计算:
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)
}虽然我认为应该有一个更简单的解决方案..。
https://stackoverflow.com/questions/72000261
复制相似问题