可以从以下网址获取以下引用的数据:https://gist.github.com/markhwhiteii/6ce74461a789ddc6d04044de73d99939
我可以通过多项逻辑模型的交互来通过硬编码来获得事后测试:
library(nnet)
library(emmeans)
model <- multinom(outcome ~ cond * party, data)
emmeans(model, ~ outcome + cond | party)
但是,我需要有一个包装函数。如果我有变量的输入,那么传递这些as.formula()
,然后我收到一个错误:
iv <- "cond"
dv <- "outcome"
mod <- "party"
formula <- as.formula(paste(dv, "~", iv, "*", mod))
model <- multinom(formula, data)
emmeans(model, as.formula(paste("~", dv, "+", iv, "|", mod)))
对emmeans
的调用会产生:
Error in object$call$formula[[2]] :
object of type 'symbol' is not subsettable
它似乎来自multinom
函数,因为我可以使用emmeans
中的粘贴公式与硬编码的multinom
模型一起运行。这很奇怪,因为我已经使用此方法来处理lm
,glm
和clm
模型。我查看了两个model
对象的结构,它们看起来完全相同。重要的是,两者的model$terms
是相同的。 emmeans
调用一个调用方法等函数的函数,因此很难用调试器找出错误发生的位置。
答案 0 :(得分:1)
我想出了解决这个问题的方法。 multinom
将对象名称formula
(而不是公式本身)存储到模型的call
属性中:
iv <- "cond"
dv <- "outcome"
mod <- "party"
formula <- as.formula(paste(dv, "~", iv, "*", mod))
model <- multinom(formula, data)
model$call$formula
返回字符formula
。
然后我可以用:
重新创建错误> model$call$formula[[2]]
Error in model$call$formula[[2]] :
object of type 'symbol' is not subsettable
所以,我只是手动写下了multinom
存储的内容:
iv <- "cond"
dv <- "outcome"
mod <- "party"
formula <- as.formula(paste(dv, "~", iv, "*", mod))
model <- multinom(formula, data)
model$call$formula <- formula
emmeans(model, as.formula(paste("~", dv, "+", iv, "|", mod)))
它有效。