Analisis ini bertujuan untuk mengetahui pengaruh jumlah jam belajar
(\(X_1\)) dan tingkat kehadiran (\(X_2\)) terhadap nilai ujian (\(Y\)) menggunakan regresi linier berganda
dengan pendekatan Ordinary Least Squares (OLS) secara manual, kemudian
divalidasi menggunakan fungsi 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)
data <- data.frame(Y, X1, X2)
data
## 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
n <- length(Y)
k <- 2
X <- cbind(1, X1, X2)
Y_mat <- matrix(Y, ncol = 1)
Model regresi linier berganda:
\[ Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \varepsilon \]
Estimasi parameter menggunakan:
\[ \hat{\beta} = (X^T X)^{-1} X^T Y \]
XtX <- t(X) %*% X
XtX_inv <- solve(XtX)
XtY <- t(X) %*% Y_mat
beta_hat <- XtX_inv %*% XtY
beta_hat
## [,1]
## 16.1360113
## X1 1.1698379
## X2 0.7744891
Model yang diperoleh:
\[ \hat{Y} = 16.136 + 1.170 X_1 + 0.774 X_2 \]
Kedua variabel memiliki pengaruh positif terhadap nilai ujian.
Y_hat <- X %*% beta_hat
residual <- Y_mat - Y_hat
Y_hat
## [,1]
## [1,] 64.94503
## [2,] 69.98732
## [3,] 75.02960
## [4,] 80.07188
## [5,] 85.11416
## [6,] 77.74841
## [7,] 72.31078
## [8,] 90.15645
## [9,] 87.43763
## [10,] 95.19873
residual
## [,1]
## [1,] 0.05496829
## [2,] 0.01268499
## [3,] -0.02959831
## [4,] -0.07188161
## [5,] -0.11416490
## [6,] 0.25158562
## [7,] -0.31078224
## [8,] -0.15644820
## [9,] 0.56236786
## [10,] -0.19873150
Nilai prediksi sangat mendekati nilai aktual, dan residual relatif kecil, menunjukkan model memiliki akurasi tinggi.
\[ SST = \sum (Y_i - \bar{Y})^2 \]
\[ SSR = \sum (\hat{Y}_i - \bar{Y})^2 \]
\[ SSE = \sum (Y_i - \hat{Y}_i)^2 \]
Y_mean <- mean(Y)
SST <- sum((Y - Y_mean)^2)
SSE <- sum(residual^2)
SSR <- sum((Y_hat - Y_mean)^2)
SST
## [1] 831.6
SSR
## [1] 831.0376
SSE
## [1] 0.5623679
\[ F = \frac{SSR/k}{SSE/(n-k-1)} \]
F_hit <- (SSR/k) / (SSE/(n-k-1))
F_hit
## [1] 5172.116
df1 <- k
df2 <- n - k - 1
alpha <- 0.05
p_value_F <- pf(F_hit, df1, df2, lower.tail = FALSE)
F_tabel <- qf(1 - alpha, df1, df2)
p_value_F
## [1] 8.042129e-12
F_tabel
## [1] 4.737414
Karena \(F_{hitung} > F_{tabel}\) dan \(p\)-value < 0.05, maka \(H_0\) ditolak. Artinya, variabel \(X_1\) dan \(X_2\) secara simultan berpengaruh signifikan terhadap \(Y\).
Varians error:
\[ \sigma^2 = \frac{SSE}{n-k-1} \]
Varians koefisien:
\[ \text{Var}(\hat{\beta}) = \sigma^2 (X^T X)^{-1} \]
sigma2 <- SSE/(n-k-1)
var_beta <- sigma2 * XtX_inv
se_beta <- sqrt(diag(var_beta))
se_beta
## X1 X2
## 2.83677490 0.27843551 0.05571759
t_hit <- beta_hat / se_beta
t_hit
## [,1]
## 5.688154
## X1 4.201468
## X2 13.900261
df_t <- n - k - 1
p_value_t <- 2 * pt(-abs(t_hit), df_t)
t_tabel <- qt(1 - alpha/2, df_t)
p_value_t
## [,1]
## 7.444177e-04
## X1 4.028204e-03
## X2 2.357834e-06
t_tabel
## [1] 2.364624
Dengan demikian, kehadiran merupakan variabel yang paling dominan.
\[ R^2 = \frac{SSR}{SST} \]
\[ \text{Adjusted } R^2 = 1 - \frac{SSE/(n-k-1)}{SST/(n-1)} \]
R2 <- SSR / SST
Adj_R2 <- 1 - (SSE/(n-k-1)) / (SST/(n-1))
R2
## [1] 0.9993238
Adj_R2
## [1] 0.9991305
Nilai \(R^2 = 0.9993\) menunjukkan bahwa 99.93% variasi nilai ujian dapat dijelaskan oleh model. Nilai Adjusted \(R^2\) yang mendekati 1 menunjukkan model sangat baik.
model <- lm(Y ~ X1 + X2)
summary(model)
##
## 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
Hasil dari fungsi lm() konsisten dengan hasil
perhitungan manual, sehingga model telah tervalidasi dengan baik.
Untuk \(X_1 = 1\) dan \(X_2 = 100\):
new_X <- matrix(c(1,1,100), nrow = 1)
Y_pred <- new_X %*% beta_hat
Y_pred
## [,1]
## [1,] 94.75476
Nilai prediksi sebesar 94.75 menunjukkan bahwa tingkat kehadiran yang tinggi memberikan kontribusi besar terhadap nilai ujian, meskipun jam belajar rendah.
lm().