| i {fixest} | R Documentation |
Treat a variable as a factor, or interacts a variable with another treated as a factor. Values to be dropped/kept from the factor can be easily set. Note that to interact fixed-effects, this function should not be used: instead use directly the syntax fe1^fe2.
i(var, f, f2, ref, drop, keep, drop2, keep2) interact(var, f, f2, ref, drop, keep, drop2, keep2)
var |
A vector to be interacted with |
f |
A vector (of any type) that will be treated as a factor. Must be of the same length as |
f2 |
A vector (of any type) that will be treated as a factor. Must be of the same length as |
ref |
A single value that belongs to the interacted variable ( |
drop |
A vector of regular expressions or integers (if |
keep |
A vector of regular expressions or integers (if |
drop2 |
A vector of regular expressions or integers (if |
keep2 |
A vector of regular expressions or integers (if |
To interact fixed-effects, this function should not be used: instead use directly the syntax fe1^fe2 in the fixed-effects part of the formula. Please see the details and examples in the help page of feols.
It returns a matrix with number of rows the length of var. The number of columns is equal to the number of cases contained in f minus the reference(s).
fixest estimationsIn fixest estimations, instead of using i(var, f, ref), you can instead use the following writing var::f(ref). Note that this way of doing interactions is not endorsed any more and will likely be deprecated in the future.
Laurent Berge
coefplot to plot interactions, feols for OLS estimation with multiple fixed-effects.
#
# Simple illustration
#
x = 1:10
y = rep(1:4, 3)[1:10]
# interaction
cbind(x, y, i(x, y, 1))
# without interaction
cbind(x, y, i(y, ref = 1))
# You can interact factors too
z = rep(c("a", "b", "c"), c(5, 3, 2))
data.frame(z, y, i(z, y))
#
# In fixest estimations
#
data(base_did)
# We interact the variable 'period' with the variable 'treat'
est_did = feols(y ~ x1 + i(treat, period, 5) | id + period, base_did)
# => special treatment in coefplot
coefplot(est_did)
# Using i() for factors
est_bis = feols(y ~ x1 + i(period, keep = 3:6) + i(treat, period, 5) | id, base_did)
coefplot(est_bis, only.inter = FALSE)
# => special treatment in etable
etable(est_bis, dict = c("6" = "six"))
#
# Interact two factors => f2
#
# To interact two factor, use the argument f2
data(airquality)
aq = airquality
aq$week = aq$Day %/% 7 + 1
# Interacting Month and week:
res_2F = feols(Ozone ~ Solar.R + i(Month, f2 = week), aq)
# Same but dropping the 5th Month and 1st week
res_2F_bis = feols(Ozone ~ Solar.R + i(Month, f2 = week, drop = 5, drop2 = 1), aq)
etable(res_2F, res_2F_bis)