您可以从以下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
调用一个函数,该函数调用调用方法等的函数,因此很难使用调试器确定错误发生在何处。
发布于 2018-02-23 12:26:56
我想出了个办法来绕过这件事。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)))
而且它是有效的。
https://stackoverflow.com/questions/48955107
复制