Большинство объектов lm
или glm
понимают *
в формуле как полное взаимодействие. Поэтому, когда вы добавляете его туда, lmList понимает dummy*(a + b)
, поскольку вы запрашиваете следующие ковариаты: dummy, a, b, dummy: a, dummy: b. Вместо этого создайте переменную, определенную как newvar = dummy * (a + b), и передайте ее в регрессию. На самом деле добавление lag1, lag2 и Interest_rate в ваш lmList излишне, потому что вы запрашиваете их с помощью *. Чтобы проиллюстрировать разницу:
require(lme4)
require(data.table)
df = data.table("income_rate" = rnorm(500),
"dummy" = rbinom(500, size = 1,prob = .5),
"interest_rate" = rnorm(500),
"firm" = rbinom(500, size =1 ,prob =.3),
"rand" = rbinom(500, size =1 , prob = .2))
df[, new_var := interest_rate*dummy]
lmList(income_rate ~ interest_rate*dummy | firm, df)
Call: lmList(formula = income_rate ~ interest_rate * dummy | firm, data = df)
Coefficients:
(Intercept) interest_rate dummy interest_rate:dummy
0 0.06110581 -0.005786927 -0.0873395 -0.06646967
1 -0.09507628 0.219900191 0.1439778 -0.20570454
lmList(income_rate ~ new_var | firm, df)
Call: lmList(formula = income_rate ~ new_var | firm, data = df)
Coefficients:
(Intercept) new_var
0 0.01645925 -0.07697772
1 -0.01323612 0.02462004
Таким образом, должно быть легко создать переменные, которые вы действительно хотите включить, и передать их в lmList
.