Pendahuluan
Laporan ini disusun untuk memenuhi tugas mandiri mata kuliah Pengantar Model Linear. Seorang peneliti ingin menganalisis faktor-faktor yang memengaruhi nilai ujian mahasiswa (Y), yang diduga dipengaruhi oleh jumlah jam belajar dan tingkat kehadiran.
Identifikasi Variabel:
- Variabel Dependen (\(Y\)): Nilai Ujian Mahasiswa
- Variabel Independen (\(X_1\)): Jumlah jam belajar (jam/minggu)
- Variabel Independen (\(X_2\)): Tingkat kehadiran (%)
Pertanyaan yang dijawab:
- Estimasikan model regresi linear berganda menggunakan OLS berbasis matriks dan interpretasikan hasilnya.
- Hitung Uji-F dan Uji-t secara manual dan interpretasikan hasilnya.
- Hitung \(R^2\) dan Adjusted \(R^2\) secara manual dan interpretasikan hasilnya.
- Bandingkan hasil no. 1 s.d. 3 dengan fungsi
lm(). - Prediksikan nilai ujian mahasiswa jika \(X_1 = 1\) jam/minggu dan \(X_2 = 100\%\).
Input Data
Berikut adalah data dari 10 mahasiswa yang digunakan dalam analisis:
Y <- c(65, 70, 75, 80, 85, 78, 72, 90, 88, 95)
X1 <- c(2, 3, 4, 5, 6, 5, 3, 7, 6, 8)
X2 <- c(60, 65, 70, 75, 80, 72, 68, 85, 83, 90)
n <- length(Y)
k <- 2
data_mahasiswa <- data.frame(No = 1:n, Y, X1, X2)
# Menampilkan tabel dengan kableExtra
knitr::kable(data_mahasiswa,
col.names = c("No", "Y (Nilai Ujian)", "X1 (Jam Belajar)", "X2 (Kehadiran %)"),
caption = "Tabel 1. Data 10 Mahasiswa",
align = "c") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = FALSE,
position = "center") %>%
row_spec(0, bold = TRUE, color = "white", background = "#2C3E50")
| No | Y (Nilai Ujian) | X1 (Jam Belajar) | X2 (Kehadiran %) |
|---|---|---|---|
| 1 | 65 | 2 | 60 |
| 2 | 70 | 3 | 65 |
| 3 | 75 | 4 | 70 |
| 4 | 80 | 5 | 75 |
| 5 | 85 | 6 | 80 |
| 6 | 78 | 5 | 72 |
| 7 | 72 | 3 | 68 |
| 8 | 90 | 7 | 85 |
| 9 | 88 | 6 | 83 |
| 10 | 95 | 8 | 90 |
Estimasi OLS Berbasis Matriks
Rumus
Model regresi linear berganda dalam notasi matriks:
\[ \mathbf{Y} = \mathbf{X}\boldsymbol{\beta} + \boldsymbol{\varepsilon} \]
Estimator OLS diperoleh dengan meminimalkan \(SSE = \boldsymbol{\varepsilon}^T\boldsymbol{\varepsilon}\), sehingga:
\[ \hat{\boldsymbol{\beta}} = (\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{Y} \]
di mana matriks desain \(\mathbf{X}\) berukuran \(n \times (k+1)\):
\[ \mathbf{X} = \begin{bmatrix} 1 & X_{11} & X_{21} \\ 1 & X_{12} & X_{22} \\ \vdots & \vdots & \vdots \\ 1 & X_{1n} & X_{2n} \end{bmatrix} \]
Perhitungan Manual
# Matriks desain X
X_mat <- cbind(1, X1, X2)
# Estimasi beta: (X'X)^{-1} X'Y
XtX <- t(X_mat) %*% X_mat
XtX_inv <- solve(XtX)
XtY <- t(X_mat) %*% Y
beta <- XtX_inv %*% XtY
rownames(beta) <- c("beta0 (Intercept)", "beta1 (X1 - Jam Belajar)", "beta2 (X2 - Kehadiran)")
cat("=== Estimasi Koefisien Beta (Manual OLS) ===\n")
=== Estimasi Koefisien Beta (Manual OLS) ===
print(round(beta, 6))
[,1]
beta0 (Intercept) 16.136011
beta1 (X1 - Jam Belajar) 1.169838
beta2 (X2 - Kehadiran) 0.774489
Interpretasi Model:
Persamaan regresi yang terbentuk adalah: \[ \hat{Y} = \hat{\beta}_0 + \hat{\beta}_1 X_1 + \hat{\beta}_2 X_2 \]
- \(\hat{\beta}_0\): Nilai dugaan \(Y\) ketika \(X_1 = 0\) dan \(X_2 = 0\).
- \(\hat{\beta}_1\): Setiap penambahan 1 jam belajar per minggu, nilai ujian diperkirakan naik sebesar \(\hat{\beta}_1\) poin (dengan asumsi \(X_2\) konstan).
- \(\hat{\beta}_2\): Setiap kenaikan 1% kehadiran, nilai ujian diperkirakan naik sebesar \(\hat{\beta}_2\) poin (dengan asumsi \(X_1\) konstan).
Uji-F dan Uji-t (Manual)
Komponen Sum of Squares
\[ SS_T = \sum_{i=1}^n (Y_i - \bar{Y})^2, \quad SS_R = \sum_{i=1}^n (\hat{Y}_i - \bar{Y})^2, \quad SS_E = \sum_{i=1}^n (Y_i - \hat{Y}_i)^2 \]
Y_hat <- X_mat %*% beta
Y_bar <- mean(Y)
SST <- sum((Y - Y_bar)^2)
SSE <- sum((Y - Y_hat)^2)
SSR <- SST - SSE
# Varians galat
s2 <- SSE / (n - k - 1)
cat(sprintf("SST = %.4f\nSSR = %.4f\nSSE = %.4f\n", SST, SSR, SSE))
SST = 831.6000
SSR = 831.0376
SSE = 0.5624
cat(sprintf("s^2 (MSE) = %.6f\n", s2))
s^2 (MSE) = 0.080338
Uji-F (Simultan)
Hipotesis: \[ H_0: \beta_1 = \beta_2 = 0 \quad \text{vs} \quad H_1: \text{minimal satu } \beta_j \neq 0 \]
MSR <- SSR / k
MSE <- SSE / (n - k - 1)
F_hit <- MSR / MSE
p_F <- pf(F_hit, k, n - k - 1, lower.tail = FALSE)
cat(sprintf("MSR = %.4f | MSE = %.4f\n", MSR, MSE))
MSR = 415.5188 | MSE = 0.0803
cat(sprintf("F-hitung = %.4f\n", F_hit))
F-hitung = 5172.1158
cat(sprintf("p-value = %.6f\n\n", p_F))
p-value = 0.000000
cat(if(p_F < 0.05) "➡️ Keputusan: TOLAK H0 (Model signifikan)\n" else "➡️ Keputusan: GAGAL TOLAK H0\n")
➡️ Keputusan: TOLAK H0 (Model signifikan)
Interpretasi Uji-F:
Nilai \(F_{hitung} = 5172.1158\) dengan \(p\text{-value} = 8.042e-12\). Karena \(p\text{-value} < \alpha = 0{,}05\), maka \(H_0\) ditolak. Variabel \(X_1\) dan \(X_2\) secara simultan berpengaruh signifikan terhadap nilai ujian mahasiswa.
Uji-t (Parsial)
Hipotesis untuk setiap \(\beta_j\): \[ H_0: \beta_j = 0 \quad \text{vs} \quad H_1: \beta_j \neq 0 \]
SE_beta <- sqrt(s2 * diag(XtX_inv))
t_hit <- beta / SE_beta
p_t <- 2 * pt(abs(t_hit), df = n - k - 1, lower.tail = FALSE)
hasil_t <- data.frame(
Koefisien = c("Intercept (β0)", "X1 - Jam Belajar (β1)", "X2 - Kehadiran (β2)"),
Beta = round(beta, 6),
SE = round(SE_beta, 6),
t_hitung = round(t_hit, 4),
p_value = round(p_t, 6),
Keputusan = ifelse(p_t < 0.05, "Tolak H0", "Gagal Tolak H0")
)
# Tabel Uji-t dengan kableExtra
knitr::kable(hasil_t, caption = "Tabel 2. Hasil Uji-t Manual", align = "c") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE,
position = "center") %>%
row_spec(0, bold = TRUE, color = "white", background = "#18BC9C") %>%
column_spec(6, bold = TRUE, color = ifelse(hasil_t$p_value < 0.05, "green", "red"))
| Koefisien | Beta | SE | t_hitung | p_value | Keputusan | |
|---|---|---|---|---|---|---|
| beta0 (Intercept) | Intercept (β0) | 16.136011 | 2.836775 | 5.6882 | 0.000744 | Tolak H0 |
| beta1 (X1 - Jam Belajar) | X1 - Jam Belajar (β1) | 1.169838 | 0.278436 | 4.2015 | 0.004028 | Tolak H0 |
| beta2 (X2 - Kehadiran) | X2 - Kehadiran (β2) | 0.774489 | 0.055718 | 13.9003 | 0.000002 | Tolak H0 |
Interpretasi Uji-t:
- \(X_1\) (Jam Belajar): \(p\text{-value} < 0{,}05\) → signifikan secara parsial. Jam belajar memberikan pengaruh nyata terhadap nilai ujian.
- \(X_2\) (Kehadiran): Sesuai nilai \(p\text{-value}\) pada tabel, jika nilainya \(< 0{,}05\) maka variabel ini berpengaruh signifikan secara parsial terhadap nilai ujian mahasiswa.
\(R^2\) dan Adjusted \(R^2\) (Manual)
R2 <- SSR / SST
R2_adj <- 1 - (SSE / (n - k - 1)) / (SST / (n - 1))
cat(sprintf("R^2 = %.4f (%.2f%%)\n", R2, R2*100))
R^2 = 0.9993 (99.93%)
cat(sprintf("R^2_adj = %.4f (%.2f%%)\n", R2_adj, R2_adj*100))
R^2_adj = 0.9991 (99.91%)
Interpretasi Determinasi:
- \(R^2 = 0.9993\): Sebesar 99.93% variasi nilai ujian mahasiswa dapat dijelaskan oleh variabel jam belajar (\(X_1\)) dan kehadiran (\(X_2\)) secara bersama-sama. Sisanya 0.07% dipengaruhi oleh faktor lain di luar model.
- \(R^2_{adj} = 0.9991\): Setelah dikoreksi terhadap jumlah variabel dan observasi, model tetap menunjukkan daya prediksi yang sangat tinggi.
Perbandingan dengan Fungsi lm()
model_lm <- lm(Y ~ X1 + X2)
sm <- summary(model_lm)
beta_lm <- coef(model_lm)
perbandingan <- data.frame(
Parameter = c("β0 (Intercept)", "β1 (X1)", "β2 (X2)"),
Beta_Manual = round(as.numeric(beta), 6),
Beta_lm = round(beta_lm, 6),
R2_Manual = c(round(R2, 6), NA, NA),
R2_lm = c(round(sm$r.squared, 6), NA, NA),
R2adj_Manual = c(round(R2_adj, 6), NA, NA),
R2adj_lm = c(round(sm$adj.r.squared, 6), NA, NA)
)
knitr::kable(perbandingan,
caption = "Tabel 3. Perbandingan Hasil Manual vs lm()",
align = "c",
na = "-") %>%
kable_styling(bootstrap_options = c("striped", "hover", "bordered"),
full_width = FALSE,
position = "center") %>%
row_spec(0, bold = TRUE, color = "white", background = "#34495E")
| Parameter | Beta_Manual | Beta_lm | R2_Manual | R2_lm | R2adj_Manual | R2adj_lm | |
|---|---|---|---|---|---|---|---|
| (Intercept) | β0 (Intercept) | 16.136011 | 16.136011 | 0.999324 | 0.999324 | 0.999131 | 0.999131 |
| X1 | β1 (X1) | 1.169838 | 1.169838 | NA | NA | NA | NA |
| X2 | β2 (X2) | 0.774489 | 0.774489 | NA | NA | NA | NA |
Interpretasi: Seluruh nilai koefisien \(\hat{\beta}\), \(R^2\), dan \(R^2_{adj}\) yang dihitung secara manual menghasilkan nilai yang identik dengan output fungsi
lm(). Ini membuktikan kebenaran implementasi formula OLS berbasis matriks secara matematis.
Prediksi Nilai Ujian
Skenario: Prediksikan nilai ujian mahasiswa jika \(X_1 = 1\) jam/minggu dan \(X_2 = 100\%\).
X1_baru <- 1
X2_baru <- 100
Y_pred <- beta[1] + beta[2] * X1_baru + beta[3] * X2_baru
cat(sprintf("X1 (Jam Belajar) = %d jam/minggu\n", X1_baru))
X1 (Jam Belajar) = 1 jam/minggu
cat(sprintf("X2 (Kehadiran) = %d%%\n\n", X2_baru))
X2 (Kehadiran) = 100%
cat(sprintf("Y_pred = %.4f\n", Y_pred))
Y_pred = 94.7548
Interpretasi Hasil Prediksi:
Berdasarkan model regresi yang telah diestimasi, mahasiswa yang hanya belajar 1 jam/minggu namun memiliki kehadiran 100% diprediksi memperoleh nilai ujian sebesar \(\hat{Y} \approx 94.75\). Hasil ini mengindikasikan bahwa tingkat kehadiran yang tinggi memiliki kompensasi positif terhadap minimnya jam belajar mandiri, dengan asumsi faktor lain tetap konstan.
Kesimpulan
Berdasarkan analisis regresi linear berganda yang telah dilakukan
untuk mengevaluasi faktor-faktor yang memengaruhi nilai ujian mahasiswa,
dapat disimpulkan bahwa pendekatan Ordinary Least Squares (OLS)
berbasis matriks berhasil diterapkan dengan sangat baik. Perhitungan
estimasi koefisien \(\hat{\boldsymbol{\beta}}\) yang dilakukan
secara manual menggunakan formula \((\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{Y}\)
terbukti akurat dan sepenuhnya identik ketika divalidasi dengan fungsi
bawaan R, yaitu lm(). Hal ini memvalidasi bahwa
implementasi matematis yang disusun sudah tepat.
Selanjutnya, melalui pengujian hipotesis secara simultan (Uji-F), diperoleh bukti statistik yang kuat (\(p\text{-value} < 0{,}05\)) bahwa jumlah jam belajar dan persentase kehadiran secara bersama-sama memberikan pengaruh yang signifikan terhadap capaian nilai ujian mahasiswa. Secara parsial (Uji-t), kontribusi masing-masing variabel independen juga dapat dievaluasi signifikansinya pada tingkat kepercayaan 95% (\(\alpha = 0{,}05\)).
Keandalan model regresi ini juga sangat kuat, yang dibuktikan oleh nilai Koefisien Determinasi (\(R^2\)). Model ini mampu menjelaskan 99.93% dari variasi data nilai ujian melalui faktor durasi jam belajar dan tingkat kehadiran. Daya prediksi yang tinggi ini juga dikonfirmasi oleh nilai \(R^2_{adj}\) yang stabil. Terakhir, pemanfaatan model ini dalam simulasi prediksi menunjukkan hasil yang menarik; seorang mahasiswa yang memiliki durasi belajar minim (1 jam/minggu) namun mempertahankan tingkat kehadiran yang sempurna (100%), diprediksikan masih mampu mendapatkan skor ujian sebesar 94.75. Hal ini mengindikasikan adanya kompensasi positif yang signifikan dari kedisiplinan kehadiran terhadap hasil evaluasi akhir.