Рассчитать предельные эффекты пробит-модели с категориальными данными

Итак, данные моего примера выглядят так:

library(dplyr)
library(plm)
library(car)
library(margins)
test <- structure(list(period = c(1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 
5, 5, 5, 6, 6, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 
10, 1, 2, 2, 2, 3, 3, 3, 3, 5, 6, 6, 7, 7, 7, 7, 8, 8), indicator = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
1L)), row.names = c(NA, -50L), class = "data.frame")

На следующем шаге я создаю разные категории для periodvariable.

test$factor_period <-car::recode(test$period,"0:2='<2';3:5='3-5';6='6';7='7';8='8';9='9';10='10';11='11';12:44='>12'")

Сейчас я вычисляю пробит-модель.

model_time <- glm(indicator ~ factor_period, family = binomial(link = "probit"), data = test)

Все идет нормально. Теперь я пытаюсь определить предельное влияние factor_period на indicator в factor_period = "8" вот так:

res_time <- summary(margins(model = model_time, at = list(factor_period = "8"), data = test))

Это возвращает сообщение об ошибке:

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

Кажется, проблема заключается в категоризации данных period. Без atargurment команда marginsработает просто отлично... Кто-нибудь знает, как это исправить?


person Max S    schedule 03.12.2020    source источник


Ответы (1)


Решение. Изменяя уровень factor_period до 8, вы можете избежать команды at в marginsоператоре и, таким образом, рассчитать все предельные эффекты.

test$factor_period<-relevel(as.factor(test$factor_period), ref="8")
person Max S    schedule 03.12.2020