Я использую R для вычисления линейной регрессии на следующей модели, а также нахожу предельное влияние возраста на пиццу в определенных точках (20,30,40,50,55).
mod6.22c <- lm(pizza ~ age + income + age*income +
I((age*age)*income), data = piz4)
Проблема, с которой я сталкиваюсь, заключается в том, что при использовании команды margins R не видит термины взаимодействия, которые вставляются в lm с I ((возраст x возраст) x доход) .Команда margins будет давать точные усредненные маржинальные эффекты только тогда, когда члены взаимодействия имеют вид variable1 x variable1 .Я также не могу создать новую переменную в моей таблице table $ newvariable <- table $ variable1 ^ 2 </em>, потому что команда margins не идентифицирует newvariable как относящуюся к variable1 .
Это было хорошо до сих пор, когда мои термины взаимодействия были только квадратичным или xy-взаимодействием, но теперь я нахожусь в точке, где мне нужно вычислить среднее предельное влияниес условием взаимодействия ВОЗРАСТ ^ 2xINCOME , включенным в модель, но единственный способ, которым я могу получить сводный вывод lm, является правильным, используя I (age ^ 2 * (доход)) или создаваяновая переменная в моей таблице.Как указывалось ранее, команда margins не может прочитать I (age ^ 2 * (доход)), и если я создаю новую переменную, команда margins не распознает связанные переменные, а полученные средние предельные эффекты являются неверными.
Полученная ошибка:
> summary(margins(mod6.22c, at = list(age= c(20,30,40,50,55)),
variables = "income"))
Error in names(classes) <- clean_terms(names(classes)) :
'names' attribute [4] must be the same length as the vector [3]
Я заранее благодарен за любую помощь.
Сводка данных: Пицца - это ежегодные расходы на пиццу, женские, школьные и выпускные - фиктивные переменные, доход в тысячах долларов в год, возраст - годы.
> head(piz4)
pizza female hs college grad income age agesq
1 109 1 0 0 0 19.5 25 625
2 0 1 0 0 0 39.0 45 2025
3 0 1 0 0 0 15.6 20 400
4 108 1 0 0 0 26.0 28 784
5 220 1 1 0 0 19.5 25 625
6 189 1 1 0 0 39.0 35 1225
Использованные библиотеки:
library(data.table)
library(dplyr)
library(margins)
tldr
Это работает:
mod6.22 <- лм(пицца ~ возраст + доход + возраст * доход, данные = piz4) </p>
**summary(margins(mod6.22, at = list(age= c(20,30,40,50,55)), variables = "income"))**
factor age AME SE z p lower upper
income 20.0000 4.5151 1.5204 2.9697 0.0030 1.5352 7.4950
income 30.0000 3.2827 0.9049 3.6276 0.0003 1.5091 5.0563
income 40.0000 2.0503 0.4651 4.4087 0.0000 1.1388 2.9618
income 50.0000 0.8179 0.7100 1.1520 0.2493 -0.5736 2.2095
income 55.0000 0.2017 0.9909 0.2036 0.8387 -1.7403 2.1438
Это не работает:
mod6.22c <- лм (пицца~ возраст + доход + возраст * доход + я ((возраст * возраст) * доход), данные = piz4) </p>
**summary(margins(mod6.22c, at = list(age= c(20,30,40,50,55)), variables = "income"))**
Error in names(classes) <- clean_terms(names(classes)) :
'names' attribute [4] must be the same length as the vector [3]
Как получить поля для чтения моей переменной взаимодействия I((возраст * возраст) * доход)