Pengantar Model Linier
Regresi Linier Berganda
Diberikan data mengenai IQ dan tingkat kehadiran sepuluh siswa dalam kelas yang diperkirakan mempengaruhi nilai UAS. Variabel yang digunakan adalah sebagi berikut:
- X1 = Tingkat kehadiran (%)
- X2 = IQ
- Y = Nilai UAS
Sebelum melakukan analisis, data terlebih dahulu di input ke dalam R sebagai langkah awal pengolahan data.
#input data
data <- data.frame(
siswa = 1:10,
X2 = c(110, 120, 115, 130, 110, 120, 120, 125, 110, 120), # IQ
X1 = c(60, 70, 75, 80, 80, 90, 95, 95, 100, 100), # Kehadiran
Y = c(65, 70, 75, 75, 80, 80, 85, 95, 90, 98) # Nilai UAS
)
data## siswa X2 X1 Y
## 1 1 110 60 65
## 2 2 120 70 70
## 3 3 115 75 75
## 4 4 130 80 75
## 5 5 110 80 80
## 6 6 120 90 80
## 7 7 120 95 85
## 8 8 125 95 95
## 9 9 110 100 90
## 10 10 120 100 98
Selanjutnya, dilakukan analisis untuk menjawab soal nomor 1, yaitu
membentuk persamaan regresi linear berganda dengan menghitung koefisien
regresi dugaan (\(\hat{\beta}\)) secara
manual menggunakan operasi matriks, yaitu: \[
\hat{\beta} = (X'X)^{-1}X'Y
\] Kemudian, hasil yang diperoleh dibandingkan dengan output dari
fungsi lm() pada R.
# 1. Membuat persamaan regresi linier berganda (hitung beta duga)
# SECARA MANUAL
#rumus matriks: beta = (X'X)^(-1) X'Y
X <- cbind(1, data$X1, data$X2) # tambahkan intersep
Y <- as.matrix(data$Y)
beta_manual <- solve(t(X) %*% X) %*% t(X) %*% Y
colnames(beta_manual) <- "Koefisien"
rownames(beta_manual) <- c("Intercept", "X1_Kehadiran", "X2_IQ")
beta_manual## Koefisien
## Intercept 23.0544545
## X1_Kehadiran 0.7372330
## X2_IQ -0.0343275
##
## Persamaan regresi manual:
cat("Y_hat =",
round(beta_manual[1,1], 6), "+",
round(beta_manual[2,1], 6), "* X1 +",
round(beta_manual[3,1], 6), "* X2\n")## Y_hat = 23.05445 + 0.737233 * X1 + -0.034327 * X2
##
## Call:
## lm(formula = Y ~ X1 + X2, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.2861 -2.8939 0.0296 1.6791 6.1993
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 23.05445 25.57161 0.902 0.397247
## X1 0.73723 0.10918 6.752 0.000264 ***
## X2 -0.03433 0.22051 -0.156 0.880686
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.346 on 7 degrees of freedom
## Multiple R-squared: 0.8719, Adjusted R-squared: 0.8353
## F-statistic: 23.82 on 2 and 7 DF, p-value: 0.0007523
##
## Persamaan regresi dari lm():
cat("Y_hat =",
round(coef_lm[1], 6), "+",
round(coef_lm[2], 6), "* X1 +",
round(coef_lm[3], 6), "* X2\n")## Y_hat = 23.05445 + 0.737233 * X1 + -0.034327 * X2
Interpretasi: Berdasarkan hasil perhitungan,
diperoleh bahwa nilai koefisien regresi yang dihitung secara manual
menggunakan operasi matriks dan menggunakan fungsi lm() di
R, memiliki nilai koefisien yang sama, yaitu \(\hat{\beta}_0 = 23.0545\), \(\hat{\beta}_1 = 0.7372\), dan \(\hat{\beta}_2 = -0.0343\). Hal ini
menunjukkan bahwa perhitungan manual yang dilakukan sudah sesuai dengan
metode yang digunakan oleh fungsi lm(). Persamaan regresi
linier berganda yang terbentuk adalah: \[
\hat{Y} = 23.0545 + 0.7372X_1 - 0.0343X_2
\] Dimana variabel kehadiran (X1) berpengaruh positif terhadap
nilai UAS (Y), sedangkan IQ (X2) berpengaruh negatif namun sangat
kecil.
Selanjutnya, dilakukan uji F untuk mengetahui apakah variabel tingkat kehadiran (X1) dan IQ (X2) secara simultan berpengaruh terhadap nilai UAS. Hipotesis yang digunakan adalah sebagai berikut:
- \(H_0\): \(\beta_1 = \beta_2 = 0\) (tidak ada pengaruh simultan)
- \(H_1\): minimal ada satu \(\beta \neq 0\) (ada pengaruh simultan)
# 2. Uji F
# SECARA MANUAL
Y_hat_manual <- X %*% beta_manual
e_manual <- Y - Y_hat_manual
n <- nrow(X)
k <- ncol(X) - 1 # jumlah variabel bebas
ybar <- mean(Y)
SSE <- sum(e_manual^2) # error sum of squares
SSR <- sum((Y_hat_manual - ybar)^2) # regression sum of squares
SST <- sum((Y - ybar)^2) # total sum of squares
cat("\nSSE =", SSE, "\n")##
## SSE = 132.209
## SSR = 899.891
## SST = 1032.1
F_hitung <- (SSR/k) / (SSE/(n-k-1))
F_tabel <- qf(0.95, df1 = k, df2 = n - k - 1)
p_value_F <- pf(F_hitung, df1 = k, df2 = n - k - 1, lower.tail = FALSE)
cat("F hitung =", F_hitung, "\n")## F hitung = 23.82303
## F tabel = 4.737414
## p-value = 0.0007522929
if (p_value_F < 0.05) {
cat("Keputusan: Tolak H0 -> model signifikan secara simultan\n")
} else {
cat("Keputusan: Gagal tolak H0 -> model tidak signifikan secara simultan\n")
}## Keputusan: Tolak H0 -> model signifikan secara simultan
## Analysis of Variance Table
##
## Response: Y
## Df Sum Sq Mean Sq F value Pr(>F)
## X1 1 899.43 899.43 47.6218 0.0002312 ***
## X2 1 0.46 0.46 0.0242 0.8806861
## Residuals 7 132.21 18.89
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## value numdf dendf
## 23.82303 2.00000 7.00000
Interpretasi: Berdasarkan hasil perhitungan uji F secara manual maupun dengan menggunakan fungsi R, didapatkan hasil bahwa nilai \(F_{hitung} > F_{tabel}\) serta p-value < 0.05, sehingga \(H_0\) ditolak. Artinya, variabel tingkat kehadiran dan IQ memiliki pengaruh signifikan terhadap nilai UAS secara bersamaan.
Setelah dilakukan uji F, selanjunya dilakukan uji t untuk mengetahui pengaruh masing-masing variabel independen, yait tingkat kehadiran (X1) dan IQ (X2), secara parsial terhadap nilai UAS. Hipotesis yang digunakan adalah sebagai berikut:
- Untuk X1 (Kehadiran):
- \(H_0: \beta_1 = 0\)
- \(H_1: \beta_1 \neq 0\)
- Untuk X2 (IQ):
- \(H_0: \beta_2 = 0\)
- \(H_1: \beta_2 \neq 0\)
# 3. Uji t
# SECARA MANUAL
XtX_inv <- solve(t(X) %*% X)
MSE <- SSE / (n - k - 1)
Var_beta <- as.numeric(MSE) * XtX_inv
SE_beta <- sqrt(diag(Var_beta))
t_hitung <- as.vector(beta_manual) / SE_beta
df_t <- n - k - 1
p_value_t <- 2 * pt(abs(t_hitung), df = df_t, lower.tail = FALSE)
t_tabel <- qt(0.975, df = df_t)
hasil_t_manual <- data.frame(
Koefisien = c("Intercept", "X1_Kehadiran", "X2_IQ"),
Beta = as.vector(beta_manual),
SE = SE_beta,
t_hitung = t_hitung,
p_value = p_value_t
)
print(hasil_t_manual)## Koefisien Beta SE t_hitung p_value
## 1 Intercept 23.0544545 25.5716101 0.9015644 0.3972467061
## 2 X1_Kehadiran 0.7372330 0.1091797 6.7524718 0.0002644133
## 3 X2_IQ -0.0343275 0.2205125 -0.1556715 0.8806860631
##
## t tabel = 2.364624
for (i in 1:length(t_hitung)) {
cat("\n", hasil_t_manual$Koefisien[i], ":\n", sep = "")
if (p_value_t[i] < 0.05) {
cat("Tolak H0 -> signifikan\n")
} else {
cat("Gagal tolak H0 -> tidak signifikan\n")
}
}##
## Intercept:
## Gagal tolak H0 -> tidak signifikan
##
## X1_Kehadiran:
## Tolak H0 -> signifikan
##
## X2_IQ:
## Gagal tolak H0 -> tidak signifikan
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 23.0544545 25.5716101 0.9015644 0.3972467061
## X1 0.7372330 0.1091797 6.7524718 0.0002644133
## X2 -0.0343275 0.2205125 -0.1556715 0.8806860631
Interpretasi: Berdasarkan hasil uji t yang dilakukan secara manual maupun dengan menggunakan fungsi R didapatkan hasil yang sama, yaitu bahwa variabel tingkat kehadiran berpengaruh signifikan (\(H_0\) ditolak) terhadap nilai UAS (p-value < 0.05), sedangkan variabel IQ tidak berpengaruh signifikan (\(H_0\) gagal ditolak) terhadap nilai UAS (p-value > 0.05).
Setelah uji t selesai, langkah berikutnya adalah menghitung koefisien determinasi (\(R^2\)) untuk mengetahui seberapa besar bagian dari variasi nilai UAS yang bisa dijelaskan oleh variabel tingkat kehadiran (X1) dan IQ (X2) dalam model regresi yang telah disusun.
## R-squared = 0.8719029
## Adjusted R-squared = 0.8353038
Interpretasi: Berdasarkan hasil perhitungan diperoleh nilai \(R^2\) sebesar 0.872, ini menunjukkan bahwa 87.2% variasi nilai UAS dapat dijelaskan oleh kehadiran dan IQ, sedangkan sisanya sebesar 12,8% dipengaruhi oleh faktor lain. Selain itu, nilai Adjusted \(R^2\) sebesar 0.835 menunjukkan bahwa model regresi cukup baik.
Setelah itu, dilakukann uji asumsi klasik untuk menilai apakah model regresi yang digunakan telah memenuhi asumsi-asumsi dasar. Uji yang dilakukan meliputi:
- Uji Normalitas (memastikan bahwa residual berdistribusi normal)
- Uji Multikolinearitas (tidak terdapat hubungan yang kuat antar variabel independen)
- Uji Heteroskedastisitas (varians residual bersifat konstan)
- Uji Autokorelasi (varians residual bersifat konstan)
## Loading required package: carData
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
# a. Normalitas residual (Shapiro-Wilk)
model_lm <- lm(Y ~ X1 + X2, data=data)
shapiro.test(residuals(model_lm))##
## Shapiro-Wilk normality test
##
## data: residuals(model_lm)
## W = 0.95125, p-value = 0.6833
Interpretasi: Hasil uji normalitas menggunakan Shapiro-Wilk, diperoleh nilai p-value > 0.05, sehingga \(H_0\) gagal ditolak. Artinya residual berdistribusi normal dan asumsi normalitas terpenuhi.
## X1 X2
## 1.055571 1.055571
Interpretasi: Hasil uji multikolinearitas menggunakan Variance Inflation Factor (VIF), diperoleh nilai VIF untuk X1 dan X2 sebesar 1.055571 (<10), sehingga tidak terdapat hubungan yang kuat antar variabel independen dalam model regresi.
##
## studentized Breusch-Pagan test
##
## data: model_lm
## BP = 5.905, df = 2, p-value = 0.05221
Interpretasi: Hasil uji heteroskedastisitas menggunakan Breusch-Pagan, diperoleh nilai p-value sebesar 0.05221 (>0.05), sehingga \(H_0\) gagal ditolak, artinya tidak terdapat heteroskedastisitas dalam model, sehingga varians residual dapat dianggap konstan (homoskedastisitas).
##
## Durbin-Watson test
##
## data: model_lm
## DW = 2.594, p-value = 0.8013
## alternative hypothesis: true autocorrelation is greater than 0
Interpretasi: Hasil uji autokorelasi menggunakan Durbin-Watson, diperoleh nilai p-value sebesar 0.8013 (>0.05), sehingga \(H_0\) gagal ditolak. Artinya tidak terdapat autokorelasi dalam model regresi dan residual bersifat independen.