Ошибка с nnet::multinom(), переданная запрограммированной как.formula() emmeans::emmeans()?
Можно получить данные, указанные ниже, по адресу: 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
вызывает функцию, которая вызывает функцию, которая вызывает метод и т. д., поэтому сложно определить, где происходит ошибка, с помощью отладчика.
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)))
И это работает.