What is the difference between region, year and region-year fixed effects? I found a paper on the effects of immigration on house prices, it uses fixed effects as a model. When looking at the results I found that the models use region fixed effects while some use year fixed effects but some use something called region-year fixed effects. what is the difference? and how can this be done in r?
here is a picture of the results(focus on the highlighted part)

To clarify my question, my concern is that how can the model be region and year fixed effects and be region-year fixed effects at the same time.
 A: The dataset under consideration is a dataset for $i=1,...,I$ municipalities for $t=1,...,T$ time periods. The model to be estimated is
$$ y_{it} = \mathbf x_{it}^\top \beta + \delta_t + \phi_r + \psi_{rt} + \epsilon_{it},$$
where $\delta_t$ is time fixed effect, $\phi_r$ is the region fixed effect and $\psi_{rt}$ is region-time. To estimate this model under the assumption that $\delta_t , \phi_r , \psi_{rt}$ are effects potentially correlated with $\mathbf x_{it}$, as is standard the case when econometricians use the term "fixed-effects" you use the estimation equation
$$ y_{it} = \mathbf x_{it}^\top \beta + \lambda_{rt} + \epsilon_{it},$$
to get consistent estimates of $\beta$. This is the same as including a (time $\times$ region) dummy and this is the same as including the interaction between the time and the region dummy, while leaving both the time and the region dummy themselves out.
If you introduce both time, region and time-region dummies you have perfect multicollinearity.
Estimation in R can be performed using lfe package or the lm() function if not many times and regions. Here is simulation code throwing NA's due to multicollinearity and a warning in lfe ...
Here is a simulation
library(data.table)
N <- 200
R <- 10
T <- 10

NN <- N*T 
dt <- data.table(id=rep(1:N,each=10),time=rep(1:T,N),x=rnorm(NN))
dt[,region:=sample(1:R,1),by=id]
dt[,region_eff:=rnorm(R)[region]]
dt[,time_eff:=rnorm(T)[time]]
dt[,time_region:=as.numeric(interaction(time,region))]
dt[,y:=2*x + time_eff + region_eff + time_region + rnorm(NN)]

lm(y~x+as.factor(time)+as.factor(region),data=dt)
lm(y~x+as.factor(time)+as.factor(region)+as.factor(time_region),data=dt)
lm(y~x+as.factor(time_region),data=dt)

library(lfe)
m1 <- felm(y~x|time+region,data=dt)
m2 <- felm(y~x|time+region+time_region,data=dt)
getfe(m2)

The reason why the lfe package only throws a warning is explained in the documentation.
A: You can include dummies (binary variables that are either 1 or 0) for each year, for each region, and also year times region interaction dummies in your model. So you might have a dummy for year 2019, another dummy for Northeast region, and then a dummy that is 1 for Northeastern region municipalities in 2019, and so on.
There are more computationally clever ways of doing that, but that's the basic idea.
