Random effects are everywhere in survey data. Let's try to do appropriate modelling for them in R!
Understanding random effects models starts with Jared Knowles’ article Getting Started with Mixed Effect Models in R. Now, let’s get our hands dirty and generate some random data:
library(lme4)
library(data.table)
N=300
# Assign real coefficients
real_coefficients=list(
blue=10,
yellow=-10,
green=5,
speed=5,
intercept=50
)
# Colour is a property of the object
data=data.table(
colour=sample(c("blue","yellow","green"),N,replace=T),
speed=runif(N,1,50)
)
# And assigning innate preference for each colour
for(i in names(real_coefficients)){
data[colour==i, innate_preference:= real_coefficients[[i]]]
}
# Actual preference is sum of innate preference for colour, innate preference for speed and error
data[,preference:=
real_coefficients[["intercept"]]+
innate_preference+
(real_coefficients[["speed"]]*speed)+
rnorm(N)
]
# Review what we have
data
Let’s estimate a simple model
summary(lm(preference~colour+speed,data=data))
Compare its coefficients to real_coefficients
.
Let’s add random effect: measurement instrument (an intercept)
data$instrument=sample(c(-10,0,10),N,replace=T)
data[, new_preference:=preference+instrument]
# Explore results of model
model=lmer(new_preference~colour+speed + (1 | instrument), data = data)
summary(model)
coef(model)$instrument
Let’s add random effect: speed of measurement instrument (a slope)
data$instrument_speed=sample(c(-10,0,10),N,replace=T)
data[, new_preference:=preference+speed*instrument_speed+rnorm(N)]
# Explore results of model
model=lmer(new_preference~colour+speed + (speed | instrument_speed), data = data)
summary(model)
coef(model)$instrument_speed
That’s the end! Now we understand mixed effect models!