nnet::multinom() 将编程的 as.formula() 传递给 emmeans::emmeans() 时抛出错误?
Error thrown with nnet::multinom() passing programmed as.formula() to emmeans::emmeans()?
可以从以下位置获取参考数据:https://gist.github.com/markhwhiteii/6ce74461a789ddc6d04044de73d99939
我可以通过多项逻辑模型的交互来通过硬编码获得 post 临时测试:
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
函数,因为我可以使用硬编码的 multinom
模型将 emmeans
中的粘贴公式获取到 运行 .这很奇怪,因为我已将此方法用于 lm
、glm
和 clm
模型。我查看了两个 model
对象的结构,它们似乎是相同的。重要的是,两者的 model$terms
是相同的。 emmeans
调用一个函数调用一个函数调用一个方法等,因此很难使用调试器找出错误发生的位置。
我想出了一个 hack 来解决这个问题。 multinom
将对象名称 formula
而不是公式本身存储到模型的 call
属性中:
iv <- "cond"
dv <- "outcome"
mod <- "party"
formula <- as.formula(paste(dv, "~", iv, "*", mod))
model <- multinom(formula, data)
model$call$formula
其中returns字符formula
.
然后我可以 re-create 错误:
> model$call$formula[[2]]
Error in model$call$formula[[2]] :
object of type 'symbol' is not subsettable
所以,我只是手动 wrote-over 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://gist.github.com/markhwhiteii/6ce74461a789ddc6d04044de73d99939
我可以通过多项逻辑模型的交互来通过硬编码获得 post 临时测试:
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
函数,因为我可以使用硬编码的 multinom
模型将 emmeans
中的粘贴公式获取到 运行 .这很奇怪,因为我已将此方法用于 lm
、glm
和 clm
模型。我查看了两个 model
对象的结构,它们似乎是相同的。重要的是,两者的 model$terms
是相同的。 emmeans
调用一个函数调用一个函数调用一个方法等,因此很难使用调试器找出错误发生的位置。
我想出了一个 hack 来解决这个问题。 multinom
将对象名称 formula
而不是公式本身存储到模型的 call
属性中:
iv <- "cond"
dv <- "outcome"
mod <- "party"
formula <- as.formula(paste(dv, "~", iv, "*", mod))
model <- multinom(formula, data)
model$call$formula
其中returns字符formula
.
然后我可以 re-create 错误:
> model$call$formula[[2]]
Error in model$call$formula[[2]] :
object of type 'symbol' is not subsettable
所以,我只是手动 wrote-over 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)))
而且有效。