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")