Input Data

# definisikan 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) # Jumlah observasi
k <- 2         # Jumlah variabel independen

# Membentuk Matriks Y dan Matriks X (dengan tambahan kolom angka 1 untuk Intercept)
Y_mat <- matrix(Y, ncol = 1) 
X_mat <- cbind(1, X1, X2)

# Menampilkan Matriks X dan Y
head(X_mat)
##        X1 X2
## [1,] 1  2 60
## [2,] 1  3 65
## [3,] 1  4 70
## [4,] 1  5 75
## [5,] 1  6 80
## [6,] 1  5 72
head(Y_mat)
##      [,1]
## [1,]   65
## [2,]   70
## [3,]   75
## [4,]   80
## [5,]   85
## [6,]   78

Estimasi Model Regresi Linear Berganda dengan Metode OLS Berbasis Matriks

# Menghitung X transpose dikali X
XtX <- t(X_mat) %*% X_mat

# Menghitung invers dari (X'X)
XtX_inv <- solve(XtX)

# Menghitung X transpose dikali Y
XtY <- t(X_mat) %*% Y_mat

# Menghitung Beta
beta <- XtX_inv %*% XtY
rownames(beta) <- c("Intercept", "X1 (Jam Belajar)", "X2 (Kehadiran)")
print(beta)
##                        [,1]
## Intercept        16.1360113
## X1 (Jam Belajar)  1.1698379
## X2 (Kehadiran)    0.7744891

Interpretasi

Dari nilai matriks beta di atas, model estimasi regresi yang terbentuk adalah:

\[\hat{Y} = 16.136 + 1.170 X_1 + 0.774 X_2\]

  • Intercept (16.136): Jika seorang mahasiswa diasumsikan sama sekali tidak pernah belajar di luar kelas (X1 = 0 jam/minggu) dan tidak pernah hadir di kelas (X2 = 0%), maka estimasi nilai ujian (Y) mahasiswa tersebut adalah 16.136.

  • Koefisien X1 atau Jam Belajar (1.170): Dengan asumsi tingkat kehadiran (X2) dianggap konstan atau tidak berubah, setiap tambahan waktu belajar sebanyak 1 jam/minggu diprediksi akan meningkatkan nilai ujian mahasiswa sebesar 1.170 poin.

  • Koefisien X2 atau Kehadiran (0.774): Dengan asumsi jumlah jam belajar (X1) dianggap konstan atau tidak berubah, setiap peningkatan tingkat kehadiran sebesar 1% diprediksi akan meningkatkan nilai ujian mahasiswa sebesar 0.774 poin.

Uji-F dan Uji-t manual

# Menghitung nilai prediksi (Y_hat) dan Residual (e)
Y_hat <- X_mat %*% beta
e <- Y_mat - Y_hat

# Menghitung Sum of Squares
SST <- sum((Y_mat - mean(Y_mat))^2) # Total Sum of Squares
SSE <- sum(e^2)                     # Error Sum of Squares
SSR <- SST - SSE                    # Regression Sum of Squares

# Degrees of Freedom
df_R <- k            # k = 2
df_E <- n - k - 1    # 10 - 2 - 1 = 7

# Mean Squares
MSR <- SSR / df_R
MSE <- SSE / df_E

# UJI F
F_stat <- MSR / MSE
p_val_F <- 1 - pf(F_stat, df_R, df_E)

cat("Nilai F-Hitung:", F_stat, "\n")
## Nilai F-Hitung: 5172.116
cat("P-value Uji F:", p_val_F, "\n\n")
## P-value Uji F: 8.042123e-12
# UJI t
# Menghitung matriks varians-kovarians dari beta
Var_beta <- MSE * XtX_inv

# Standar error dari beta
se_beta <- sqrt(diag(Var_beta))

# Menghitung t-hitung
t_stat <- beta / se_beta

# Menghitung p-value untuk uji dua arah
p_val_t <- 2 * (1 - pt(abs(t_stat), df_E))

# Menggabungkan hasil uji t ke dalam tabel
t_test_results <- data.frame(
  Koefisien = beta,
  Std_Error = se_beta,
  t_Hitung = t_stat,
  p_Value = p_val_t
)
print(t_test_results)
##                   Koefisien  Std_Error  t_Hitung      p_Value
## Intercept        16.1360113 2.83677490  5.688154 7.444177e-04
## X1 (Jam Belajar)  1.1698379 0.27843551  4.201468 4.028204e-03
## X2 (Kehadiran)    0.7744891 0.05571759 13.900261 2.357834e-06

Interpretasi

Uji F

Uji F digunakan untuk melihat apakah semua variabel independen (\(X_1\) dan \(X_2\)) secara bersama-sama (simultan) memiliki pengaruh yang signifikan terhadap variabel dependen (\(Y\)).

Hipotesis:

  • \(H_0\): \(\beta_1 = \beta_2 = 0\) (Jam belajar dan tingkat kehadiran secara bersama-sama tidak berpengaruh signifikan terhadap nilai ujian).

  • \(H_1\): Minimal ada satu \(\beta \neq 0\) (Jam belajar dan tingkat kehadiran secara bersama-sama berpengaruh signifikan terhadap nilai ujian).

Nilai F-Hitung = 5172.116 dengan p-value = 8.042e-12 (sangat mendekati angka 0).

Karena nilai p-value jauh lebih kecil dari tingkat signifikansi 0.05 (atau 5%), maka tolak \(H_0\). Ini berarti jumlah jam belajar (\(X_1\)) dan tingkat kehadiran (\(X_2\)) secara bersama-sama memiliki pengaruh yang sangat signifikan terhadap nilai ujian mahasiswa (\(Y\)).

Uji T

Uji t digunakan untuk melihat apakah setiap variabel independen secara individu (parsial) memiliki pengaruh yang signifikan terhadap variabel dependen, dengan asumsi variabel lainnya konstan.

A. Variabel X1 (Jam Belajar)

Hipotesis:

  • \(H_0\): \(\beta_1 = 0\) (Jam belajar tidak berpengaruh signifikan terhadap nilai ujian).

  • \(H_1\): \(\beta_1 \neq 0\) (Jam belajar berpengaruh signifikan terhadap nilai ujian).

Nilai t-Hitung = 4.201 dengan p-value = 0.00403.

Karena p-value (0.00403) < 0.05, maka kita menolak \(H_0\). Secara parsial, jumlah jam belajar terbukti memiliki pengaruh positif dan signifikan terhadap nilai ujian mahasiswa.

B. Variabel X2 (Kehadiran)

Hipotesis:

  • \(H_0\): \(\beta_2 = 0\) (Tingkat kehadiran tidak berpengaruh signifikan terhadap nilai ujian).

  • \(H_1\): \(\beta_2 \neq 0\) (Tingkat kehadiran berpengaruh signifikan terhadap nilai ujian).

Nilai t-Hitung = 13.900 dengan p-value = 0.00000236 (2.357e-06).

Karena p-value (0.00000236) < 0.05, maka kita menolak \(H_0\). Secara parsial, tingkat kehadiran terbukti memiliki pengaruh positif dan sangat signifikan terhadap nilai ujian mahasiswa.

Nilai R square dan Adjusted R square

# R-squared
R_sq <- SSR / SST

# Adjusted R-squared
Adj_R_sq <- 1 - ( (SSE / df_E) / (SST / (n - 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

Berdasarkan output Nilai R square dan Adjusted R square, model regresi memiliki tingkat kecocokan (Goodness of Fit) yang luar biasa tinggi, hampir mendekati sempurna.

  • R-squared (\(R^2\)) = 0.9993238 (atau 99.93%) Artinya, sebesar 99.93% variasi (naik-turunnya) nilai ujian mahasiswa (\(Y\)) dapat dijelaskan oleh variasi jumlah jam belajar (\(X_1\)) dan tingkat kehadiran (\(X_2\)) secara bersama-sama. Sisanya yang sangat kecil, yaitu sebesar 0.07% (100% - 99.93%), dijelaskan oleh faktor-faktor lain di luar model regresi ini.

  • Adjusted R-squared = 0.9991305 (atau 99.91%) Karena model ini adalah regresi linier berganda (memiliki lebih dari satu variabel independen), nilai Adjusted \(R^2\) adalah indikator yang lebih tepat untuk digunakan daripada \(R^2\) biasa. Nilai ini telah disesuaikan dengan jumlah variabel prediktor dan ukuran sampel.

    Sebesar 99.91% variasi nilai ujian mahasiswa mampu dijelaskan oleh model setelah disesuaikan dengan derajat kebebasannya. Nilai yang sangat berdekatan dengan \(R^2\) biasa ini menunjukkan bahwa variabel yang dimasukkan ke dalam model (\(X_1\) dan \(X_2\)) memang sangat relevan dan secara nyata berkontribusi dalam memprediksi nilai ujian.

Perbandingan dengan Hasil lm()

# Membuat model menggunakan 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

Secara keseluruhan, hasil perhitungan manual terbukti 100% akurat dan sama persis dengan output fungsi lm(). Nilai koefisien, nilai t-hitung, p-value, R-squared, dan Adjusted R-squared semuanya identik antara perhitungan manual dan output lm(). Ini menunjukkan bahwa metode OLS berbasis matriks yang kita gunakan untuk menghitung estimasi regresi linear berganda secara manual telah dilakukan dengan benar dan menghasilkan hasil yang konsisten dengan metode standar yang digunakan dalam analisis regresi di R.

Prediksi Nilai Ujian

# Input data baru
X_baru <- matrix(c(1, 1, 100), nrow = 1)

# Menghitung prediksi Y
Prediksi_Y <- X_baru %*% beta
cat("Prediksi Nilai Ujian:", Prediksi_Y[1,1], "\n")
## Prediksi Nilai Ujian: 94.75476
data_baru <- data.frame(X1 = 1, X2 = 100)
predict(model_lm, newdata = data_baru)
##        1 
## 94.75476

Bagian kode ini bertujuan untuk memprediksi nilai ujian mahasiswa (\(Y\)) di masa depan berdasarkan skenario atau data yang belum ada di observasi awal, menggunakan model regresi yang telah dibentuk. Yaitu, memprediksi nilai ujian seorang mahasiswa jika diketahui ia hanya belajar selama 1 jam/minggu (\(X_1 = 1\)) tetapi memiliki tingkat kehadiran sempurna sebesar 100% (\(X_2 = 100\)).

Baik menggunakan perhitungan perkalian matriks secara manual (X_baru %*% beta) maupun menggunakan fungsi bawaan R predict(), keduanya menghasilkan angka yang sama persis, yaitu 94.75476. Ini menunjukkan bahwa model regresi yang telah dibentuk dapat digunakan untuk memprediksi nilai ujian mahasiswa berdasarkan kombinasi jam belajar dan tingkat kehadiran yang diberikan. Prediksi ini memberikan gambaran bahwa meskipun mahasiswa tersebut hanya belajar selama 1 jam/minggu, tingkat kehadiran yang sangat tinggi (100%) dapat tetap menghasilkan nilai ujian yang sangat baik, yaitu sekitar 94.75.

Berdasarkan model regresi linier berganda yang telah dibuat, jika ada seorang mahasiswa yang belajar hanya 1 jam per minggu namun selalu hadir di setiap perkuliahan (kehadiran 100%), maka estimasi atau tebakan terbaik untuk nilai ujiannya adalah sekitar 94.75.

Langkah ini juga kembali memvalidasi bahwa perhitungan manual matriks Anda sudah sangat tepat karena menghasilkan nilai prediksi yang identik dengan algoritma standar dari fungsi lm() di RStudio. Selain itu, dari prediksi ini kita bisa melihat bahwa dalam model, tingkat kehadiran yang maksimal (100%) memberikan dorongan yang sangat kuat terhadap nilai akhir, meskipun jam belajarnya sangat minim (1 jam).