Использование команды margins в R с квадратичным членом и взаимодействующими фиктивными переменными

Моя цель - создать маргинальные эффекты и график, аналогичный тому, что сделано в этом посте в разделе «маргинальные эффекты»: https://www.drbanderson.com/myresources/interpretinglogisticregressionpartii/

Поскольку я не могу предоставить фактическую модель или фактические данные (данные являются конфиденциальными), я приведу общий пример.

У меня есть следующая модель, созданная с помощью функции glm:

model = glm(y ~ as.factor(x1) + x2 + I(x2^2) + x3 + as.factor(x4):as.factor(x5), data = dataFrame,family="binomial")

x2 - это непрерывная переменная, которую я хочу вычислить по среднему значению другой непрерывной переменной, x3, и заранее заданным значениям для x1, x4 и x5. Для дальнейшего упрощения предположим, что x1 является категорией утра, дня или ночи (таким образом, создавая два коэффициента в логит-модели), x4 категоричен либо слева, либо справа, а x5 категоричен либо вверх, либо вниз (таким образом, x4: x5 выдает результаты коэффициентов для левого и верхнего, левого и нижнего, правого и верхнего, с правым и нижним исключенным взаимодействием).

Подобно тому, что сделано в посте, я запускаю следующий код:

x2.inc <- seq(min(dataFrame$x2), max(dataFrame$x2), by = .1) 

чтобы получить последовательность значений x2 для оценки предельного эффекта. Наконец, я пытаюсь запустить команду margins:

x2.margins.df <- as.data.frame(summary(margins(model, at = list(x2 = x2.inc, x3 = mean(dataFrame$x3), x1 = 'morning', x4 = 'left', x5 = 'right'))))

Однако при его запуске возникла следующая ошибка:

Error in attributes(.Data) <- c(attributes(.Data), attrib) : 
  'names' attribute [1] must be the same length as the vector [0]

Есть ли какие-либо мысли о том, как я могу успешно запустить команду полей, учитывая а) квадратичный характер x2 в моей модели и б) взаимодействие терминов в модели?

В качестве примечания: я знаю, что могу вычислить эти вещи вручную, если захочу. Однако, чтобы уменьшить количество кода и упростить воспроизводимость, я бы хотел, чтобы этот метод работал. Спасибо за помощь!


person Jeremy Losak    schedule 29.12.2019    source источник


Ответы (1)


В ридми margins говорится:

https://cran.r-project.org/web/packages/margins/readme/README.html

что он поддерживает logit модели. Так зачем реализовывать что-то вручную?

library("car")
library("plm")
data("LaborSupply", package = "plm")

model <- glm(disab ~ kids*age + kids*I(age^2), data = LaborSupply, family="binomial")
summary(margins(model))
person Marco    schedule 21.01.2020