#r #margins #estimation
#r #поля #оценка
Вопрос:
У меня есть код, который использует команду margins в Stata, и я пытаюсь воспроизвести его в R, используя пакет «margins», найденный здесь и на cran.
Я продолжаю получать ошибку:
marg1<-margins(reg2)
Ошибка в именах (классах) <- clean_terms (имена (классы)) : атрибут ‘names’ [18] должен иметь ту же длину, что и вектор [16] «
Минимальный воспроизводимый пример показан ниже:
install.packages(margins)
library(margins)
mod1 <- lm(log(mpg) ~ vs cyl hp vs*hp I(vs*hp*hp) wt I(hp*hp), data = mtcars)
(marg1 <- margins(mod1))
summary(marg1)
Мне нужно, чтобы vs была фиктивной переменной, взаимодействующей как с квадратичным термином, так и с обычным взаимодействием.
Кто-нибудь знает, что я делаю неправильно, или есть ли способ обойти это?
Ответ №1:
Ваша спецификация модели немного сбивает с толку. Например, vs * hp вводит 3 переменные: i) vs, ii) hp и iii) взаимодействие vs и hp. В результате hp дважды появляется в приведенной вами формуле. Вы можете значительно упростить! Попробуйте это, например (я думаю, это то, что вы хотите):
mtcars$hp2 = mtcars$hp^2
mod1 <- lm(log(mpg) ~ cyl wt vs*hp vs*hp2, data = mtcars)
summary(mod1) # With this you can check that the model you specified is what you want
(marg1 <- margins(mod1)) # The error disappeared.
summary(marg1)
В общем, я бы рекомендовал вам избегать I() в спецификациях формул, поскольку это часто приводит к таким ошибкам, если не относиться к ним с достаточной осторожностью (хотя иногда этого избежать невозможно). Удачи!
Комментарии:
1. Я подумал об этом, моя проблема заключается в том, правильно ли вычисляются производные для предельных эффектов при создании переменной в квадрате. Спасибо за ответ, хотя!
2. Не совсем, ваш вопрос, похоже, касался того, как устранить ошибку. Если вы хотите обсудить, отличается ли полученная сводная статистика от полученной в Stata, поделитесь результатами, которые вы получили в Stata, чтобы мы могли провести сравнение.