Soal

Seorang peneliti ingin menganalisis faktor-faktor yang mempengaruhi nilai ujian mahasiswa (Y). Diduga bahwa nilai ujian dipengaruhi oleh:

Peneliti mengumpulkan data dari 10 mahasiswa sebagai berikut:

No Y X1 X2
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

Pertanyaan:

  1. Estimasikan model regresi linier berganda menggunakan metode OLS berbasis matriks dan interpretasikan hasilnya!
  2. Hitung Uji F dan uji t secara manual dan interpretasikan hasilnya!
  3. Hitung nilai R² dan Adjusted R² secara manual dan interpretasikan hasilnya!
  4. Bandingkan hasil no 1 s.d 3 dengan fungsi lm!
  5. Prediksikan nilai ujian mahasiswa jika jumlah jam belajar 1 jam/minggu namun kehadirannya 100%!

Penyelesaian

1. Model regresi linier berganda menggunakan metode OLS

Buat input datanya

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

# Menggabungkan menjadi data frame 
data_ujian <- data.frame(Y, X1, X2)

# Menentukan jumlah observasi (n) dan variabel independen (k)
n <- length(Y)
k <- 2

Hitung beta duga dengan rumus penduga parameter \(\beta\) adalah: \[\hat{\beta} = (X^T X)^{-1} X^T Y\]

# Membuat matriks Y
mat_Y <- matrix(Y, ncol = 1)

# Membuat matriks X (tambahkan kolom 1 untuk konstanta/intersep)
mat_X <- cbind(1, X1, X2)

# Menghitung estimasi Beta (b_hat)
# solve() digunakan untuk mencari invers matriks, t() untuk transpose, %*% untuk perkalian matriks
beta_hat <- solve(t(mat_X) %*% mat_X) %*% t(mat_X) %*% mat_Y

# Menampilkan hasil
rownames(beta_hat) <- c("Intercept", "X1", "X2")
print("Estimasi Koefisien (Beta):")
## [1] "Estimasi Koefisien (Beta):"
print(beta_hat)
##                 [,1]
## Intercept 16.1360113
## X1         1.1698379
## X2         0.7744891

Berdasarkan perhitungan, kita mendapatkan persamaan regresi estimasi: \[\hat{Y} = 14.808 + 1.259 X_1 + 0.771 X_2\] ## 2. Hitung Uji F (Simultan) dan Uji t (Parsial) secara Manual

# Nilai prediksi Y (Y_hat)
Y_hat <- mat_X %*% beta_hat

# Residual (Error)
e <- mat_Y - Y_hat

# Sum of Squares
Y_bar <- mean(Y)
SST <- sum((Y - Y_bar)^2)
SSE <- sum(e^2)
SSR <- SST - SSE

# Degrees of Freedom (Derajat Bebas)
df_reg <- k
df_err <- n - k - 1

# Mean Squares
MSR <- SSR / df_reg
MSE <- SSE / df_err

Uji F

Uji F menguji apakah seluruh variabel independen secara bersama-sama mempengaruhi variabel dependen. \[ F_{stat} = \frac{MSR}{MSE} \] Hipotesis:

\(H_0\): Tidak ada pengaruh signifikan secara simultan.

\(H_1\): Minimal ada satu variabel independen yang berpengaruh signifikan.

F_stat <- MSR / MSE
p_value_F <- pf(F_stat, df_reg, df_err, lower.tail = FALSE)

cat("Nilai F-Hitung:", F_stat, "\n")
## Nilai F-Hitung: 5172.116
cat("P-value Uji F:", p_value_F, "\n")
## P-value Uji F: 8.042129e-12

Interpretasi: Nilai p-value sangat kecil (\(8.042129 \times 10^{-12} < 0.05\)). Artinya, kita menolak H0. Kesimpulannya, jumlah jam belajar (\(X_1\)) dan tingkat kehadiran (\(X_2\)) secara bersama-sama (simultan) memiliki pengaruh yang signifikan terhadap nilai ujian (\(Y\)).

Uji-t

Uji t menguji apakah setiap variabel independen secara individu mempengaruhi variabel dependen. Untuk ini, kita butuh Standar Error dari masing-masing koefisien. \[ Var(\hat{\beta}) = MSE \cdot (X^T X)^{-1} \] \[ SE(\hat{\beta}) = \sqrt{diag(Var(\hat{\beta}))} \] \[ t_{stat} = \frac{\hat{\beta}}{SE(\hat{\beta})} \]

# Menghitung Matriks Varian-Kovarian
var_covar_matrix <- MSE * solve(t(mat_X) %*% mat_X)

# Mengambil akar kuadrat dari diagonal utama untuk mendapatkan Standard Error
se_beta <- sqrt(diag(var_covar_matrix))

# Menghitung t-hitung
t_stat <- beta_hat / se_beta

# Menghitung p-value untuk t-hitung (uji 2 arah)
p_value_t <- 2 * pt(abs(t_stat), df = df_err, lower.tail = FALSE)

# Membuat tabel ringkasan
hasil_t_test <- data.frame(
  Koefisien = beta_hat,
  Std_Error = se_beta,
  t_Hitung = t_stat,
  p_Value = p_value_t
)
print(hasil_t_test)
##            Koefisien  Std_Error  t_Hitung      p_Value
## Intercept 16.1360113 2.83677490  5.688154 7.444177e-04
## X1         1.1698379 0.27843551  4.201468 4.028204e-03
## X2         0.7744891 0.05571759 13.900261 2.357834e-06

Interpretasi: \(X_1\) (Jam Belajar): P-value adalah (\(4.028204\times 10^{-3} < 0.05\)) sehingga variabel \(X_1\) secara parsial signifikan. \(X_2\) (Kehadiran): P-value adalah (\(2.357834\times 10^{-6}\)). Karena p-value < 0.05, maka tingkat kehadiran berpengaruh secara signifikan terhadap nilai ujian.

3. nilai R² dan Adjusted R² secara manual

# R-squared
R_sq <- SSR / SST

# Adjusted R-squared
Adj_R_sq <- 1 - ((1 - R_sq) * (n - 1) / (n - k - 1))

cat("R-squared:", R_sq, "\n")
## R-squared: 0.9993238
cat("Adjusted R-squared:", Adj_R_sq, "\n")
## Adjusted R-squared: 0.9991305

Interpretasi: Nilai \(R^2\) = 0.9993238 berarti 99.93238% variasi (naik turunnya) Nilai Ujian mahasiswa dapat dijelaskan oleh kombinasi Jumlah Jam Belajar dan Tingkat Kehadiran. Sisanya 0.06762% dijelaskan oleh faktor lain di luar model.

Nilai Adjusted \(R^2\) = 0.9991305 atau 99.91305% adalah angka yang lebih akurat untuk menilai kelayakan model karena sudah memperhitungkan jumlah variabel yang digunakan.

4. Bandingkan dengan Fungsi lm()

# Menggunakan fungsi bawaan R
# Menggunakan fungsi lm
model_lm <- lm(Y ~ X1 + X2, data = data_ujian)
summary(model_lm)
## 
## Call:
## lm(formula = Y ~ X1 + X2, data = data_ujian)
## 
## 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

Hasilnya nilai intersep, koefisien \(x_1\), dan koefisien \(x_2\) dari model manual regresi linier berganda kedua metode akan sama, begitu juga dengan nilai R² dan Adjusted R².

5. Prediksi nilai ujian mahasiswa jika jumlah jam belajar 1 jam/minggu namun kehadirannya 100%.

Kita akan memasukkan nilai tersebut ke dalam persamaan regresi: \(\hat{Y} = \beta_0 + \beta_1(1) + \beta_2(100)\)

# Mendefinisikan observasi baru (X_baru) -> c(Intercept, X1, X2)
X_baru <- c(1, 1, 100)

# Melakukan prediksi
Y_prediksi <- sum(X_baru * beta_hat)

cat("Prediksi Nilai Ujian:", Y_prediksi, "\n")
## Prediksi Nilai Ujian: 94.75476

Berdasarkan model yang terbentuk, jika seorang mahasiswa belajar 1 jam/minggu namun kehadirannya 100%, maka prediksi nilai ujiannya adalah sebesar 94.75476.