Overview:
In this project, we’ll analyze how study time and the school a
student attends affect their exam performance. The key is to understand
that some things (like study time) have a fixed influence on everyone,
while other things (like the school a student attends) have a random
influence because each school is different (teacher quality, school
environment, etc.).
REML helps us estimate how much random factors like the school a
student attends affect their scores. Meanwhile, BLUE gives us the best
estimate for how fixed factors like study time impact student
performance.
Step 1: Setup Environment and Load Libraries
# Load the necessary libraries
library(lme4) # For mixed-effects models
library(ggplot2) # For visualization
library(dplyr)
# Set a random seed for reproducibility
set.seed(123)
Step 2: Create Simple Data (We’re Making Up Data!)
We’ll create a simple dataset with 50 students across 5 schools.
We’ll also simulate how much each student studies and the influence of
the school they attend on their exam score.
# Number of students and schools
n_students <- 50
n_schools <- 5
# Simulate school assignments, study time (hours), and teacher quality
students <- data.frame(
student_id = 1:n_students,
school = factor(sample(1:n_schools, n_students, replace = TRUE)), # Assign students to schools
study_time = rnorm(n_students, mean = 5, sd = 2) # Random study times
)
# Each school has different 'teacher quality' (random effect)
school_quality <- rnorm(n_schools, mean = 0, sd = 3) # School quality differences
# Simulate exam scores (study time = fixed effect, school quality = random effect)
students$exam_score <- 60 + students$study_time * 5 +
school_quality[students$school] + # Teacher/school influence (random)
rnorm(n_students, mean = 0, sd = 5) # Noise/random errors
# View the first few rows
head(students)
NA
Step 3: Fit a Mixed-Effects Model (REML)
In this step, we use a mixed-effects model to account for both:
* The fixed effect of study time (affects everyone the same way).
* The random effect of school quality (each school impacts scores differently).
# Fit a mixed-effects model with REML
# Random effect: School (teacher quality or school-specific differences)
# Fixed effect: Study time (hours spent studying)
model_reml <- lmer(exam_score ~ study_time + (1 | school), data = students, REML = TRUE)
# Show the model summary
summary(model_reml)
Linear mixed model fit by REML ['lmerMod']
Formula: exam_score ~ study_time + (1 | school)
Data: students
REML criterion at convergence: 295.2
Scaled residuals:
Min 1Q Median 3Q Max
-2.0419 -0.7057 -0.1644 0.6271 2.4908
Random effects:
Groups Name Variance Std.Dev.
school (Intercept) 1.298 1.139
Residual 21.924 4.682
Number of obs: 50, groups: school, 5
Fixed effects:
Estimate Std. Error t value
(Intercept) 60.8136 2.1055 28.88
study_time 5.1485 0.3865 13.32
Correlation of Fixed Effects:
(Intr)
study_time -0.917
What the Model Tells Us:
* Fixed Effect (Study Time): The model estimates how much an extra hour of study improves exam scores for everyone (this is the fixed effect).
* Random Effect (School): The model also tells us how much the different schools (due to teacher quality, infrastructure, etc.) influence student scores (this is the random effect).
Step 4: Use BLUE to Calculate Fixed Effects
The Best Linear Unbiased Estimator (BLUE) gives us the best estimate
of the fixed effect of study time on exam scores. Let’s extract and
interpret that:
# Extract fixed effects (BLUE)
fixed_effects <- fixef(model_reml)
print(fixed_effects)
(Intercept) study_time
60.813645 5.148452
# Interpret the results:
# For every additional hour of study, exam scores increase by approximately 5 points.
Step 5: Visualize the Results
1. Exam Scores by School (Random Effect):
We can create a boxplot to show how exam scores differ between
schools, which represents the random effect of school quality.
# Boxplot: Exam scores by school
ggplot(students, aes(x = school, y = exam_score)) +
geom_boxplot() +
labs(title = "Exam Scores by School (Random Effect)", x = "School", y = "Exam Score")

NA
NA
2. Study Time vs. Exam Scores (Fixed Effect):
Let’s create a scatterplot to show the relationship between study
time and exam scores, representing the fixed effect.
# Scatterplot: Exam score vs study time
ggplot(students, aes(x = study_time, y = exam_score)) +
geom_point(alpha = 0.5) +
geom_smooth(method = "lm", color = "blue") +
labs(title = "Exam Scores vs Study Time (Fixed Effect)", x = "Study Time (hours)", y = "Exam Score")

Step 6: Model Diagnostics (For More Exploration)
We can check the residuals of the model and calculate the variance of
the random effect (how much school differences affect the scores).
# Plot residuals
plot(residuals(model_reml), main = "Residuals of Mixed-Effects Model")

# Calculate random effect variance (school quality differences)
random_effect_variance <- as.data.frame(VarCorr(model_reml))$vcov[2]
print(paste("Random Effect Variance (School):", round(random_effect_variance, 2)))
[1] "Random Effect Variance (School): 21.92"
Interpretation:
What We Learned:
Fixed Effect (Study Time): For every additional hour a student spends studying, their exam score improves by a certain number of points (estimated by the BLUE). This is the fixed effect because it applies to all students in the same way.
Random Effect (School): Different schools have different levels of teacher quality or other factors (like infrastructure). These differences explain some of the variation in students’ scores, as estimated by REML.
Visualizing the Results: The scatterplot shows how more study time improves exam scores, and the boxplot shows how scores vary across different schools, representing teacher or school quality.
Conclusion:
This project introduced the concepts of REML and BLUE in a way that
even a beginner can understand. By using a simple example of student
exam scores influenced by both study time (fixed effect) and school
quality (random effect), we can see how mixed-effects models help us
better understand variability in real-world situations.
LS0tCnRpdGxlOiAiIEFuYWx5emluZyBTdHVkZW50IEV4YW0gU2NvcmVzIFVzaW5nIFJFTUwgJiBCTFVFIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCiMjIE92ZXJ2aWV3OgpJbiB0aGlzIHByb2plY3QsIHdl4oCZbGwgYW5hbHl6ZSBob3cgc3R1ZHkgdGltZSBhbmQgdGhlIHNjaG9vbCBhIHN0dWRlbnQgYXR0ZW5kcyBhZmZlY3QgdGhlaXIgZXhhbSBwZXJmb3JtYW5jZS4gVGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIHRoYXQgc29tZSB0aGluZ3MgKGxpa2Ugc3R1ZHkgdGltZSkgaGF2ZSBhIGZpeGVkIGluZmx1ZW5jZSBvbiBldmVyeW9uZSwgd2hpbGUgb3RoZXIgdGhpbmdzIChsaWtlIHRoZSBzY2hvb2wgYSBzdHVkZW50IGF0dGVuZHMpIGhhdmUgYSByYW5kb20gaW5mbHVlbmNlIGJlY2F1c2UgZWFjaCBzY2hvb2wgaXMgZGlmZmVyZW50ICh0ZWFjaGVyIHF1YWxpdHksIHNjaG9vbCBlbnZpcm9ubWVudCwgZXRjLikuCgpSRU1MIGhlbHBzIHVzIGVzdGltYXRlIGhvdyBtdWNoIHJhbmRvbSBmYWN0b3JzIGxpa2UgdGhlIHNjaG9vbCBhIHN0dWRlbnQgYXR0ZW5kcyBhZmZlY3QgdGhlaXIgc2NvcmVzLiBNZWFud2hpbGUsIEJMVUUgZ2l2ZXMgdXMgdGhlIGJlc3QgZXN0aW1hdGUgZm9yIGhvdyBmaXhlZCBmYWN0b3JzIGxpa2Ugc3R1ZHkgdGltZSBpbXBhY3Qgc3R1ZGVudCBwZXJmb3JtYW5jZS4KCiMjIFN0ZXAgMTogU2V0dXAgRW52aXJvbm1lbnQgYW5kIExvYWQgTGlicmFyaWVzCgpgYGB7cn0KIyBMb2FkIHRoZSBuZWNlc3NhcnkgbGlicmFyaWVzCmxpYnJhcnkobG1lNCkgICMgRm9yIG1peGVkLWVmZmVjdHMgbW9kZWxzCmxpYnJhcnkoZ2dwbG90MikgICMgRm9yIHZpc3VhbGl6YXRpb24KbGlicmFyeShkcGx5cikKCiMgU2V0IGEgcmFuZG9tIHNlZWQgZm9yIHJlcHJvZHVjaWJpbGl0eQpzZXQuc2VlZCgxMjMpCgoKYGBgCgojIyBTdGVwIDI6IENyZWF0ZSBTaW1wbGUgRGF0YSAoV2XigJlyZSBNYWtpbmcgVXAgRGF0YSEpCgpXZeKAmWxsIGNyZWF0ZSBhIHNpbXBsZSBkYXRhc2V0IHdpdGggNTAgc3R1ZGVudHMgYWNyb3NzIDUgc2Nob29scy4gV2XigJlsbCBhbHNvIHNpbXVsYXRlIGhvdyBtdWNoIGVhY2ggc3R1ZGVudCBzdHVkaWVzIGFuZCB0aGUgaW5mbHVlbmNlIG9mIHRoZSBzY2hvb2wgdGhleSBhdHRlbmQgb24gdGhlaXIgZXhhbSBzY29yZS4KCmBgYHtyfQojIE51bWJlciBvZiBzdHVkZW50cyBhbmQgc2Nob29scwpuX3N0dWRlbnRzIDwtIDUwCm5fc2Nob29scyA8LSA1CgojIFNpbXVsYXRlIHNjaG9vbCBhc3NpZ25tZW50cywgc3R1ZHkgdGltZSAoaG91cnMpLCBhbmQgdGVhY2hlciBxdWFsaXR5CnN0dWRlbnRzIDwtIGRhdGEuZnJhbWUoCiAgc3R1ZGVudF9pZCA9IDE6bl9zdHVkZW50cywKICBzY2hvb2wgPSBmYWN0b3Ioc2FtcGxlKDE6bl9zY2hvb2xzLCBuX3N0dWRlbnRzLCByZXBsYWNlID0gVFJVRSkpLCAgIyBBc3NpZ24gc3R1ZGVudHMgdG8gc2Nob29scwogIHN0dWR5X3RpbWUgPSBybm9ybShuX3N0dWRlbnRzLCBtZWFuID0gNSwgc2QgPSAyKSAgIyBSYW5kb20gc3R1ZHkgdGltZXMKKQoKIyBFYWNoIHNjaG9vbCBoYXMgZGlmZmVyZW50ICd0ZWFjaGVyIHF1YWxpdHknIChyYW5kb20gZWZmZWN0KQpzY2hvb2xfcXVhbGl0eSA8LSBybm9ybShuX3NjaG9vbHMsIG1lYW4gPSAwLCBzZCA9IDMpICAjIFNjaG9vbCBxdWFsaXR5IGRpZmZlcmVuY2VzCgojIFNpbXVsYXRlIGV4YW0gc2NvcmVzIChzdHVkeSB0aW1lID0gZml4ZWQgZWZmZWN0LCBzY2hvb2wgcXVhbGl0eSA9IHJhbmRvbSBlZmZlY3QpCnN0dWRlbnRzJGV4YW1fc2NvcmUgPC0gNjAgKyBzdHVkZW50cyRzdHVkeV90aW1lICogNSArIAogICAgICAgICAgICAgICAgICAgICAgIHNjaG9vbF9xdWFsaXR5W3N0dWRlbnRzJHNjaG9vbF0gKyAgIyBUZWFjaGVyL3NjaG9vbCBpbmZsdWVuY2UgKHJhbmRvbSkKICAgICAgICAgICAgICAgICAgICAgICBybm9ybShuX3N0dWRlbnRzLCBtZWFuID0gMCwgc2QgPSA1KSAgIyBOb2lzZS9yYW5kb20gZXJyb3JzCgojIFZpZXcgdGhlIGZpcnN0IGZldyByb3dzCmhlYWQoc3R1ZGVudHMpCgpgYGAKCiMjIFN0ZXAgMzogRml0IGEgTWl4ZWQtRWZmZWN0cyBNb2RlbCAoUkVNTCkKCkluIHRoaXMgc3RlcCwgd2UgdXNlIGEgbWl4ZWQtZWZmZWN0cyBtb2RlbCB0byBhY2NvdW50IGZvciBib3RoOgoKICAgICogVGhlIGZpeGVkIGVmZmVjdCBvZiBzdHVkeSB0aW1lIChhZmZlY3RzIGV2ZXJ5b25lIHRoZSBzYW1lIHdheSkuCiAgICAqIFRoZSByYW5kb20gZWZmZWN0IG9mIHNjaG9vbCBxdWFsaXR5IChlYWNoIHNjaG9vbCBpbXBhY3RzIHNjb3JlcyBkaWZmZXJlbnRseSkuCgpgYGB7cn0KIyBGaXQgYSBtaXhlZC1lZmZlY3RzIG1vZGVsIHdpdGggUkVNTAojIFJhbmRvbSBlZmZlY3Q6IFNjaG9vbCAodGVhY2hlciBxdWFsaXR5IG9yIHNjaG9vbC1zcGVjaWZpYyBkaWZmZXJlbmNlcykKIyBGaXhlZCBlZmZlY3Q6IFN0dWR5IHRpbWUgKGhvdXJzIHNwZW50IHN0dWR5aW5nKQptb2RlbF9yZW1sIDwtIGxtZXIoZXhhbV9zY29yZSB+IHN0dWR5X3RpbWUgKyAoMSB8IHNjaG9vbCksIGRhdGEgPSBzdHVkZW50cywgUkVNTCA9IFRSVUUpCgojIFNob3cgdGhlIG1vZGVsIHN1bW1hcnkKc3VtbWFyeShtb2RlbF9yZW1sKQoKCmBgYAoKIyMgV2hhdCB0aGUgTW9kZWwgVGVsbHMgVXM6CgogICAgICogRml4ZWQgRWZmZWN0IChTdHVkeSBUaW1lKTogVGhlIG1vZGVsIGVzdGltYXRlcyBob3cgbXVjaCBhbiBleHRyYSBob3VyIG9mIHN0dWR5IGltcHJvdmVzIGV4YW0gc2NvcmVzIGZvciBldmVyeW9uZSAodGhpcyBpcyB0aGUgZml4ZWQgZWZmZWN0KS4KICAgIAogICAgKiBSYW5kb20gRWZmZWN0IChTY2hvb2wpOiBUaGUgbW9kZWwgYWxzbyB0ZWxscyB1cyBob3cgbXVjaCB0aGUgZGlmZmVyZW50IHNjaG9vbHMgKGR1ZSB0byB0ZWFjaGVyIHF1YWxpdHksIGluZnJhc3RydWN0dXJlLCBldGMuKSBpbmZsdWVuY2Ugc3R1ZGVudCBzY29yZXMgKHRoaXMgaXMgdGhlIHJhbmRvbSBlZmZlY3QpLgoKIyMgU3RlcCA0OiBVc2UgQkxVRSB0byBDYWxjdWxhdGUgRml4ZWQgRWZmZWN0cwoKVGhlIEJlc3QgTGluZWFyIFVuYmlhc2VkIEVzdGltYXRvciAoQkxVRSkgZ2l2ZXMgdXMgdGhlIGJlc3QgZXN0aW1hdGUgb2YgdGhlIGZpeGVkIGVmZmVjdCBvZiBzdHVkeSB0aW1lIG9uIGV4YW0gc2NvcmVzLiBMZXTigJlzIGV4dHJhY3QgYW5kIGludGVycHJldCB0aGF0OgoKYGBge3J9CgojIEV4dHJhY3QgZml4ZWQgZWZmZWN0cyAoQkxVRSkKZml4ZWRfZWZmZWN0cyA8LSBmaXhlZihtb2RlbF9yZW1sKQpwcmludChmaXhlZF9lZmZlY3RzKQoKIyBJbnRlcnByZXQgdGhlIHJlc3VsdHM6CiMgRm9yIGV2ZXJ5IGFkZGl0aW9uYWwgaG91ciBvZiBzdHVkeSwgZXhhbSBzY29yZXMgaW5jcmVhc2UgYnkgYXBwcm94aW1hdGVseSA1IHBvaW50cy4KCgpgYGAKCiMjIFN0ZXAgNTogVmlzdWFsaXplIHRoZSBSZXN1bHRzCiMjIyAxLiBFeGFtIFNjb3JlcyBieSBTY2hvb2wgKFJhbmRvbSBFZmZlY3QpOgoKV2UgY2FuIGNyZWF0ZSBhIGJveHBsb3QgdG8gc2hvdyBob3cgZXhhbSBzY29yZXMgZGlmZmVyIGJldHdlZW4gc2Nob29scywgd2hpY2ggcmVwcmVzZW50cyB0aGUgcmFuZG9tIGVmZmVjdCBvZiBzY2hvb2wgcXVhbGl0eS4KCmBgYHtyfQojIEJveHBsb3Q6IEV4YW0gc2NvcmVzIGJ5IHNjaG9vbApnZ3Bsb3Qoc3R1ZGVudHMsIGFlcyh4ID0gc2Nob29sLCB5ID0gZXhhbV9zY29yZSkpICsKICBnZW9tX2JveHBsb3QoKSArCiAgbGFicyh0aXRsZSA9ICJFeGFtIFNjb3JlcyBieSBTY2hvb2wgKFJhbmRvbSBFZmZlY3QpIiwgeCA9ICJTY2hvb2wiLCB5ID0gIkV4YW0gU2NvcmUiKQoKCmBgYAoKIyMjIDIuIFN0dWR5IFRpbWUgdnMuIEV4YW0gU2NvcmVzIChGaXhlZCBFZmZlY3QpOgoKTGV04oCZcyBjcmVhdGUgYSBzY2F0dGVycGxvdCB0byBzaG93IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBzdHVkeSB0aW1lIGFuZCBleGFtIHNjb3JlcywgcmVwcmVzZW50aW5nIHRoZSBmaXhlZCBlZmZlY3QuCgpgYGB7cn0KIyBTY2F0dGVycGxvdDogRXhhbSBzY29yZSB2cyBzdHVkeSB0aW1lCmdncGxvdChzdHVkZW50cywgYWVzKHggPSBzdHVkeV90aW1lLCB5ID0gZXhhbV9zY29yZSkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC41KSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmx1ZSIpICsKICBsYWJzKHRpdGxlID0gIkV4YW0gU2NvcmVzIHZzIFN0dWR5IFRpbWUgKEZpeGVkIEVmZmVjdCkiLCB4ID0gIlN0dWR5IFRpbWUgKGhvdXJzKSIsIHkgPSAiRXhhbSBTY29yZSIpCgpgYGAKCiMjIFN0ZXAgNjogTW9kZWwgRGlhZ25vc3RpY3MgKEZvciBNb3JlIEV4cGxvcmF0aW9uKQoKV2UgY2FuIGNoZWNrIHRoZSByZXNpZHVhbHMgb2YgdGhlIG1vZGVsIGFuZCBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlIG9mIHRoZSByYW5kb20gZWZmZWN0IChob3cgbXVjaCBzY2hvb2wgZGlmZmVyZW5jZXMgYWZmZWN0IHRoZSBzY29yZXMpLgoKYGBge3J9CiMgUGxvdCByZXNpZHVhbHMKcGxvdChyZXNpZHVhbHMobW9kZWxfcmVtbCksIG1haW4gPSAiUmVzaWR1YWxzIG9mIE1peGVkLUVmZmVjdHMgTW9kZWwiKQoKIyBDYWxjdWxhdGUgcmFuZG9tIGVmZmVjdCB2YXJpYW5jZSAoc2Nob29sIHF1YWxpdHkgZGlmZmVyZW5jZXMpCnJhbmRvbV9lZmZlY3RfdmFyaWFuY2UgPC0gYXMuZGF0YS5mcmFtZShWYXJDb3JyKG1vZGVsX3JlbWwpKSR2Y292WzJdCnByaW50KHBhc3RlKCJSYW5kb20gRWZmZWN0IFZhcmlhbmNlIChTY2hvb2wpOiIsIHJvdW5kKHJhbmRvbV9lZmZlY3RfdmFyaWFuY2UsIDIpKSkKCmBgYAojIyBJbnRlcnByZXRhdGlvbjoKIyMjIFdoYXQgV2UgTGVhcm5lZDoKCiAgICAgRml4ZWQgRWZmZWN0IChTdHVkeSBUaW1lKTogRm9yIGV2ZXJ5IGFkZGl0aW9uYWwgaG91ciBhIHN0dWRlbnQgc3BlbmRzIHN0dWR5aW5nLCB0aGVpciBleGFtIHNjb3JlIGltcHJvdmVzIGJ5IGEgY2VydGFpbiBudW1iZXIgb2YgcG9pbnRzIChlc3RpbWF0ZWQgYnkgdGhlIEJMVUUpLiBUaGlzIGlzIHRoZSBmaXhlZCBlZmZlY3QgYmVjYXVzZSBpdCBhcHBsaWVzIHRvIGFsbCBzdHVkZW50cyBpbiB0aGUgc2FtZSB3YXkuCiAgICAKICAgIFJhbmRvbSBFZmZlY3QgKFNjaG9vbCk6IERpZmZlcmVudCBzY2hvb2xzIGhhdmUgZGlmZmVyZW50IGxldmVscyBvZiB0ZWFjaGVyIHF1YWxpdHkgb3Igb3RoZXIgZmFjdG9ycyAobGlrZSBpbmZyYXN0cnVjdHVyZSkuIFRoZXNlIGRpZmZlcmVuY2VzIGV4cGxhaW4gc29tZSBvZiB0aGUgdmFyaWF0aW9uIGluIHN0dWRlbnRz4oCZIHNjb3JlcywgYXMgZXN0aW1hdGVkIGJ5IFJFTUwuCiAgICAKICAgIFZpc3VhbGl6aW5nIHRoZSBSZXN1bHRzOiBUaGUgc2NhdHRlcnBsb3Qgc2hvd3MgaG93IG1vcmUgc3R1ZHkgdGltZSBpbXByb3ZlcyBleGFtIHNjb3JlcywgYW5kIHRoZSBib3hwbG90IHNob3dzIGhvdyBzY29yZXMgdmFyeSBhY3Jvc3MgZGlmZmVyZW50IHNjaG9vbHMsIHJlcHJlc2VudGluZyB0ZWFjaGVyIG9yIHNjaG9vbCBxdWFsaXR5LgogICAgCiMjIENvbmNsdXNpb246CgpUaGlzIHByb2plY3QgaW50cm9kdWNlZCB0aGUgY29uY2VwdHMgb2YgUkVNTCBhbmQgQkxVRSBpbiBhIHdheSB0aGF0IGV2ZW4gYSBiZWdpbm5lciBjYW4gdW5kZXJzdGFuZC4gQnkgdXNpbmcgYSBzaW1wbGUgZXhhbXBsZSBvZiBzdHVkZW50IGV4YW0gc2NvcmVzIGluZmx1ZW5jZWQgYnkgYm90aCBzdHVkeSB0aW1lIChmaXhlZCBlZmZlY3QpIGFuZCBzY2hvb2wgcXVhbGl0eSAocmFuZG9tIGVmZmVjdCksIHdlIGNhbiBzZWUgaG93IG1peGVkLWVmZmVjdHMgbW9kZWxzIGhlbHAgdXMgYmV0dGVyIHVuZGVyc3RhbmQgdmFyaWFiaWxpdHkgaW4gcmVhbC13b3JsZCBzaXR1YXRpb25zLgoKCg==