set.seed(10)
n <- 100
Seed digunakan agar data yang dibangkitkan bersifat konsisten. Jumlah data yang digunakan adalah 100 observasi.
Waktu_Belajar <- rnorm(n, mean = 3, sd = 1)
Waktu_Belajar <- pmin(pmax(Waktu_Belajar, 1), 5)
Latihan_Soal <- rnorm(n, mean = 50, sd = 20)
Latihan_Soal <- round(pmin(pmax(Latihan_Soal, 10), 100))
error <- rnorm(n, mean = 0, sd = 5)
Variabel dibangkitkan menggunakan distribusi normal untuk mencerminkan kondisi nyata. Nilai kemudian dibatasi agar sesuai dengan skenario penelitian.
Nilai <- 50 + 5*Waktu_Belajar + 0.3*Latihan_Soal + error
Nilai ujian dibentuk berdasarkan kombinasi waktu belajar, latihan soal, dan error sebagai faktor lain yang tidak diamati.
data <- data.frame(Waktu_Belajar, Latihan_Soal, Nilai)
head(data)
## Waktu_Belajar Latihan_Soal Nilai
## 1 3.018746 35 81.67130
## 2 2.815747 58 83.13312
## 3 1.628669 29 73.79472
## 4 2.400832 64 85.56440
## 5 3.294545 37 72.16864
## 6 3.389794 61 87.72808
Data digabungkan menjadi satu dataset untuk dianalisis lebih lanjut.
#Permodelan
model <- lm(Nilai ~ Waktu_Belajar + Latihan_Soal, data = data)
summary(model)
##
## Call:
## lm(formula = Nilai ~ Waktu_Belajar + Latihan_Soal, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -13.2380 -2.8317 0.3644 3.2923 11.7799
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 51.74791 2.06255 25.089 < 2e-16 ***
## Waktu_Belajar 5.00504 0.52941 9.454 2.03e-15 ***
## Latihan_Soal 0.26640 0.02546 10.463 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.871 on 97 degrees of freedom
## Multiple R-squared: 0.6597, Adjusted R-squared: 0.6527
## F-statistic: 94.01 on 2 and 97 DF, p-value: < 2.2e-16
Model regresi linear digunakan untuk mengetahui pengaruh variabel independen terhadap nilai ujian.
#Prediksi
data$Prediksi <- predict(model, data)
head(data)
## Waktu_Belajar Latihan_Soal Nilai Prediksi
## 1 3.018746 35 81.67130 76.18080
## 2 2.815747 58 83.13312 81.29196
## 3 1.628669 29 73.79472 67.62503
## 4 2.400832 64 85.56440 80.81369
## 5 3.294545 37 72.16864 78.09398
## 6 3.389794 61 87.72808 84.96428
Model digunakan untuk memprediksi nilai ujian berdasarkan variabel yang ada.
#Evaluasi model
data$Prediksi <- predict(model, data)
rmse <- sqrt(mean((data$Nilai - data$Prediksi)^2, na.rm = TRUE))
rmse
## [1] 4.79698
RMSE digunakan untuk mengukur tingkat kesalahan model
r2 <- summary(model)$r.squared
r2
## [1] 0.6596689
R-squared menunjukkan kemampuan model dalam menjelaskan variasi data
#Persamaan model
coef_model <- coef(model)
b0 <- coef_model[1]
b1 <- coef_model[2]
b2 <- coef_model[3]
cat("Y =", round(b0,2), "+", round(b1,2), "*X1 +", round(b2,2), "*X2\n")
## Y = 51.75 + 5.01 *X1 + 0.27 *X2
#Interpretasi
cat("- Tambahan 1 jam belajar menaikkan nilai sebesar", round(b1,2), "\n")
## - Tambahan 1 jam belajar menaikkan nilai sebesar 5.01
cat("- Tambahan 1 latihan soal menaikkan nilai sebesar", round(b2,2), "\n")
## - Tambahan 1 latihan soal menaikkan nilai sebesar 0.27
#Visualiasasi
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.3
data$Prediksi <- predict(model, data)
ggplot(data, aes(x = Nilai, y = Prediksi)) +
geom_point() +
labs(title = "Nilai Asli vs Prediksi",
x = "Nilai Asli",
y = "Nilai Prediksi")