Умножение категориальной переменной на пустышку в регрессии - PullRequest
1 голос
/ 04 ноября 2019

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

. Я пробовал использовать фаст-фуд, но этоне работа. Я также пытался использовать метод кантри-1 и пытаться размножаться с женщинами, но безуспешно.

#first wrong
olss1= lm(pv1math ~ female + I(ggi*female) + factor(country) +  factor(year) + I(female * factor(country)), data = f1)
# second wrong
olss1= lm(pv1math ~ female + I(ggi*female) + factor(country) +  factor(year) + factor( female * country ), data = f1)

Сообщения об ошибках: я не могу умножить коэффициент на числовой

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Оператор * в формуле будет давать взаимодействия, а также члены более низкого порядка. Вот пример:

country <- c("A", "A", "A", "B", "B", "B")
female <- c(1, 1, 0, 1, 0, 1)
y <- 1:6

fm <- lm(y ~ country * female)
fm

, дающий:

Call:
lm(formula = y ~ country * female)

Coefficients:
    (Intercept)         countryB           female  countryB:female  
            3.0              2.0             -1.5              1.5  

Также мы можем проверить матрицу модели

model.matrix(fm)

, дающую

  (Intercept) countryB female countryB:female
1           1        0      1               0
2           1        0      1               0
3           1        0      0               0
4           1        1      1               1
5           1        1      0               0
6           1        1      1               1
attr(,"assign")
[1] 0 1 2 3
attr(,"contrasts")
attr(,"contrasts")$country
[1] "contr.treatment"
0 голосов
/ 04 ноября 2019

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

Сравнение:

lm(pv1math ~ ggi*female, data=dat)$coefficients
# (Intercept)         ggi      female  ggi:female 
#         ...         ...         ...         ... 

lm(pv1math ~ I(ggi*female), data=dat)$coefficients
# (Intercept) I(ggi * female) 
#         ...             ... 

I() полезнонапример, для полиномов, где age является популярным кандидатом: pv1math ~ age + I(age^2) + I(age^3), или для преобразования в двоичную форму зависимой переменной в GLM: glm(I(pv1math > 0.75) ~ ggi*female, family=binomial).

И - как @ G.Grothendieck уже написал - вам не нужно повторять переменные, которые уже присутствуют в термине взаимодействия (это просто избыточно), поэтому вы можете попробовать:

lm(pv1math ~ ggi*female + factor(year) + female*factor(country), data=f1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...