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:

Pertanyaan yang dijawab:

  1. Estimasikan model regresi linear berganda menggunakan OLS berbasis matriks dan interpretasikan hasilnya.
  2. Hitung Uji-F dan Uji-t secara manual dan interpretasikan hasilnya.
  3. Hitung \(R^2\) dan Adjusted \(R^2\) secara manual dan interpretasikan hasilnya.
  4. Bandingkan hasil no. 1 s.d. 3 dengan fungsi lm().
  5. Prediksikan nilai ujian mahasiswa jika \(X_1 = 1\) jam/minggu dan \(X_2 = 100\%\).

Input Data

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")
Tabel 1. Data 10 Mahasiswa
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

Persamaan regresi yang terbentuk:

\[ \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 \(X_2\) konstan).
  • \(\hat{\beta}_2\): Setiap kenaikan 1% kehadiran, nilai ujian diperkirakan naik sebesar \(\hat{\beta}_2\) poin (dengan \(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) = 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

Uji-F (Simultan)

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.


Uji-t (Parsial)

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")
Tabel 2. Hasil Uji-t Manual
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): Lihat p-value di tabel — jika \(p\text{-value} < 0{,}05\) maka berpengaruh signifikan secara parsial terhadap nilai ujian mahasiswa.

\(R^2\) dan Adjusted \(R^2\) (Manual)

Rumus

\[ 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} \]

Perhitungan

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:

  • \(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)
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 = "-")
Tabel 3. Perbandingan Hasil Manual vs lm()
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.


Prediksi Nilai Ujian

Pertanyaan: Prediksikan nilai ujian mahasiswa jika \(X_1 = 1\) jam/minggu dan \(X_2 = 100\%\).

Rumus Prediksi

\[ \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.


Kesimpulan

Berdasarkan seluruh analisis regresi linear berganda yang telah dilakukan, diperoleh kesimpulan:

  1. 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\).

  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.

  3. Uji-t: Berdasarkan tabel hasil uji-t, dapat dilihat variabel mana yang secara parsial signifikan terhadap nilai ujian pada \(\alpha = 0{,}05\).

  4. 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.

  5. Perbandingan dengan lm(): Semua hasil manual identik dengan fungsi lm(), memvalidasi kebenaran perhitungan.

  6. Prediksi: Mahasiswa dengan jam belajar 1 jam/minggu dan kehadiran 100% diprediksi mendapat nilai ujian sebesar 94.75.