Code
#install.packages("MASS")
#install.packages("caret")
library(MASS)
library(caret)Loading required package: ggplot2
Warning: package 'ggplot2' was built under R version 4.3.1
Loading required package: lattice
Code
# Create the data
set.seed(42)
data <- data.frame(
study_hours = rnorm(100, mean = 5, sd = 2),
attendance = rnorm(100, mean = 80, sd = 10),
past_grades = rnorm(100, mean = 75, sd = 15),
grade = factor(sample(c("Fail", "Pass", "Good", "Excellent"), 100, replace = TRUE), ordered = TRUE)
)
# Split into training and test data
set.seed(42)
trainIndex <- createDataPartition(data$grade, p = .7, list = FALSE)
trainData <- data[trainIndex, ]
testData <- data[-trainIndex, ]
# Fit the model
model <- polr(grade ~ study_hours + attendance + past_grades, data = trainData, method = "logistic")
# Summary of the model
summary(model)
Re-fitting to get Hessian
Call:
polr(formula = grade ~ study_hours + attendance + past_grades,
data = trainData, method = "logistic")
Coefficients:
Value Std. Error t value
study_hours -0.100706 0.10773 -0.9348
attendance 0.003411 0.02697 0.1265
past_grades 0.007496 0.01353 0.5539
Intercepts:
Value Std. Error t value
Excellent|Fail -0.7294 2.3099 -0.3158
Fail|Good 0.3684 2.3033 0.1599
Good|Pass 1.4210 2.3180 0.6130
Residual Deviance: 198.2922
AIC: 210.2922
Code
# Predictions
predictions <- predict(model, testData)
# Calculate MAE
mae <- mean(abs(as.numeric(testData$grade) - as.numeric(predictions)))
print(paste("Mean Absolute Error: ", mae))[1] "Mean Absolute Error: 1.75"
Code
# Calculate MSE
mse <- mean((as.numeric(testData$grade) - as.numeric(predictions))^2)
print(paste("Mean Squared Error: ", mse))[1] "Mean Squared Error: 4.25"