Средние краевые эффекты в R со сложными терминами взаимодействия - PullRequest
0 голосов
/ 24 февраля 2019

Я использую 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((возраст * возраст) * доход)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...