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:
Pertanyaan yang dijawab:
lm().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)
knitr::kable(data_mahasiswa,
col.names = c("No", "Y (Nilai Ujian)", "X1 (Jam Belajar)", "X2 (Kehadiran %)"),
caption = "Tabel 1. Data 10 Mahasiswa",
align = "c")
| 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 |
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} \]
# 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
Persamaan regresi yang terbentuk:
\[ \hat{Y} = \hat{\beta}_0 + \hat{\beta}_1 X_1 + \hat{\beta}_2 X_2 \]
\[ 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) = SSE/(n-k-1) = %.4f / %d = %.6f\n", SSE, n-k-1, s2))
s^2 (MSE) = SSE/(n-k-1) = 0.5624 / 7 = 0.080338
Hipotesis:
\[ H_0: \beta_1 = \beta_2 = 0 \quad \text{vs} \quad H_1: \text{minimal satu } \beta_j \neq 0 \]
Statistik Uji:
\[ F_{hitung} = \frac{SS_R / k}{SS_E / (n-k-1)} = \frac{MS_R}{MS_E} \]
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 = SSR/k = %.4f / %d = %.4f\n", SSR, k, MSR))
MSR = SSR/k = 831.0376 / 2 = 415.5188
cat(sprintf("MSE = SSE/(n-k-1) = %.4f / %d = %.4f\n", SSE, n-k-1, MSE))
MSE = SSE/(n-k-1) = 0.5624 / 7 = 0.0803
cat(sprintf("F-hitung = %.4f\n", F_hit))
F-hitung = 5172.1158
cat(sprintf("p-value = %.6f\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.
Hipotesis untuk setiap \(\beta_j\):
\[ H_0: \beta_j = 0 \quad \text{vs} \quad H_1: \beta_j \neq 0 \]
Statistik Uji:
\[ t_{hitung,j} = \frac{\hat{\beta}_j}{\sqrt{s^2 \cdot c_{jj}}} \]
di mana \(c_{jj}\) adalah elemen diagonal ke-\(j\) dari \((\mathbf{X}^T\mathbf{X})^{-1}\), dan \(s^2 = \frac{SS_E}{n-k-1}\).
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")
)
knitr::kable(hasil_t, caption = "Tabel 2. Hasil Uji-t Manual", align = "c")
| 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:
\[ R^2 = \frac{SS_R}{SS_T} = 1 - \frac{SS_E}{SS_T} \]
\[ R^2_{adj} = 1 - \frac{SS_E / (n-k-1)}{SS_T / (n-1)} = 1 - (1 - R^2)\frac{n-1}{n-k-1} \]
R2 <- SSR / SST
R2_adj <- 1 - (SSE / (n - k - 1)) / (SST / (n - 1))
cat(sprintf("R^2 = SSR/SST = %.4f/%.4f = %.6f\n", SSR, SST, R2))
R^2 = SSR/SST = 831.0376/831.6000 = 0.999324
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:
lm()model_lm <- lm(Y ~ X1 + X2)
summary(model_lm)
Call:
lm(formula = Y ~ X1 + X2)
Residuals:
Min 1Q Median 3Q Max
-0.31078 -0.14588 -0.05074 0.04440 0.56237
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 16.13601 2.83677 5.688 0.000744 ***
X1 1.16984 0.27844 4.201 0.004028 **
X2 0.77449 0.05572 13.900 2.36e-06 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.2834 on 7 degrees of freedom
Multiple R-squared: 0.9993, Adjusted R-squared: 0.9991
F-statistic: 5172 on 2 and 7 DF, p-value: 8.042e-12
beta_lm <- coef(model_lm)
sm <- summary(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 = "-")
| 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(), membuktikan kebenaran implementasi formula OLS
berbasis matriks.
Pertanyaan: Prediksikan nilai ujian mahasiswa jika \(X_1 = 1\) jam/minggu dan \(X_2 = 100\%\).
\[ \hat{Y}_{baru} = \hat{\beta}_0 + \hat{\beta}_1 \cdot X_1^* + \hat{\beta}_2 \cdot X_2^* \]
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", X2_baru))
X2 (Kehadiran) = 100%
cat(sprintf("\nY_pred = %.6f + (%.6f × %d) + (%.6f × %d)\n",
beta[1], beta[2], X1_baru, beta[3], X2_baru))
Y_pred = 16.136011 + (1.169838 × 1) + (0.774489 × 100)
cat(sprintf("Y_pred = %.4f\n", Y_pred))
Y_pred = 94.7548
Interpretasi: Berdasarkan model regresi yang telah diestimasi, mahasiswa yang hanya belajar 1 jam/minggu namun memiliki kehadiran 100% diprediksi memperoleh nilai ujian sebesar \(\hat{Y} = 94.75\). Hasil ini menunjukkan bahwa tingkat kehadiran yang tinggi dapat mengompensasi minimnya jam belajar mandiri, meskipun nilai prediksi tetap bergantung pada kualitas model secara keseluruhan.
Berdasarkan seluruh analisis regresi linear berganda yang telah dilakukan, diperoleh kesimpulan:
Estimasi OLS: Koefisien \(\hat{\boldsymbol{\beta}}\) berhasil dihitung secara manual menggunakan formula matriks \(\hat{\boldsymbol{\beta}} = (\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{Y}\), menghasilkan persamaan regresi \(\hat{Y} = \hat{\beta}_0 + \hat{\beta}_1 X_1 + \hat{\beta}_2 X_2\).
Uji-F: \(F_{hitung} = 5172.1158\) dengan \(p\text{-value} = 8.042e-12\) \(< 0{,}05\). Variabel \(X_1\) dan \(X_2\) secara simultan berpengaruh signifikan terhadap nilai ujian.
Uji-t: Berdasarkan tabel hasil uji-t, dapat dilihat variabel mana yang secara parsial signifikan terhadap nilai ujian pada \(\alpha = 0{,}05\).
Koefisien Determinasi: \(R^2 = 0.9993\) menunjukkan bahwa 99.93% variasi nilai ujian dijelaskan oleh model. Nilai \(R^2_{adj} = 0.9991\) mengkonfirmasi daya prediksi model yang sangat baik.
Perbandingan dengan lm(): Semua
hasil manual identik dengan fungsi lm(), memvalidasi
kebenaran perhitungan.
Prediksi: Mahasiswa dengan jam belajar 1 jam/minggu dan kehadiran 100% diprediksi mendapat nilai ujian sebesar 94.75.