data <- data.frame(
Siswa = 1:10,
X1_Kehadiran = c(60, 70, 75, 80, 80, 90, 95, 95, 100, 100),
X2_IQ = c(110, 120, 115, 130, 110, 120, 120, 125, 110, 120),
Y_Nilai_UAS = c(65, 70, 75, 75, 80, 80, 85, 95, 90, 98)
)
print(data)
## Siswa X1_Kehadiran X2_IQ Y_Nilai_UAS
## 1 1 60 110 65
## 2 2 70 120 70
## 3 3 75 115 75
## 4 4 80 130 75
## 5 5 80 110 80
## 6 6 90 120 80
## 7 7 95 120 85
## 8 8 95 125 95
## 9 9 100 110 90
## 10 10 100 120 98
Model regresi linier berganda: Ŷ = β₀ + β₁X₁ + β₂X₂
Estimasi koefisien menggunakan rumus OLS: β̂ = (X’X)⁻¹ X’Y
Y <- as.matrix(data$Y_Nilai_UAS)
X <- cbind(1, data$X1_Kehadiran, data$X2_IQ)
colnames(X) <- c("Intercept", "X1_Kehadiran", "X2_IQ")
# Perhitungan manual
XtX <- t(X) %*% X
XtY <- t(X) %*% Y
beta_manual <- solve(XtX) %*% XtY
cat("Hasil beta duga (manual):\n")
## Hasil beta duga (manual):
print(beta_manual)
## [,1]
## Intercept 23.0544545
## X1_Kehadiran 0.7372330
## X2_IQ -0.0343275
model <- lm(Y_Nilai_UAS ~ X1_Kehadiran + X2_IQ, data = data)
summary(model)
##
## Call:
## lm(formula = Y_Nilai_UAS ~ X1_Kehadiran + X2_IQ, 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_Kehadiran 0.73723 0.10918 6.752 0.000264 ***
## X2_IQ -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
Hasil koefisien yang diperoleh secara manual identik dengan hasil
fungsi lm(), yang artinya perhitungan manual sudah
sesuai.
b <- coef(model)
cat(sprintf("Ŷ = %.4f + %.4f·X1 + %.4f·X2\n", b[1], b[2], b[3]))
## Ŷ = 23.0545 + 0.7372·X1 + -0.0343·X2
Interpretasi: - Setiap kenaikan 1% tingkat kehadiran, nilai UAS diprediksi naik sekitar 0.7372 poin, dengan asumsi IQ tetap. - Setiap kenaikan 1 poin IQ, nilai UAS diprediksi turun sekitar 0.0343 poin, dengan asumsi kehadiran tetap. - Nilai intercept sebesar 23.0545 adalah nilai teoritis saat X1 dan X2 bernilai nol.
Hipotesis:
H₀ : β₁ = β₂ = 0 (kehadiran dan IQ tidak berpengaruh terhadap nilai UAS)
H₁ : minimal satu koefisien ≠ 0
anova(model)
## Analysis of Variance Table
##
## Response: Y_Nilai_UAS
## Df Sum Sq Mean Sq F value Pr(>F)
## X1_Kehadiran 1 899.43 899.43 47.6218 0.0002312 ***
## X2_IQ 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
Interpretasi: Dari output diperoleh p-value = 0.0007523 < 0.05, sehingga H₀ ditolak. Artinya, secara simultan tingkat kehadiran (X1) dan IQ (X2) berpengaruh signifikan terhadap nilai UAS pada taraf nyata 5%.
Hipotesis:
H₀ : βⱼ = 0
H₁ : βⱼ ≠ 0
summary(model)$coefficients
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 23.0544545 25.5716101 0.9015644 0.3972467061
## X1_Kehadiran 0.7372330 0.1091797 6.7524718 0.0002644133
## X2_IQ -0.0343275 0.2205125 -0.1556715 0.8806860631
Interpretasi: X1 (Kehadiran): p-value = 0.000264 < 0.05, Tolak H₀. Tingkat kehadiran berpengaruh signifikan secara parsial terhadap nilai UAS. X2 (IQ): p-value = 0.8807 > 0.05, Gagal Tolak H₀. IQ tidak berpengaruh signifikan secara parsial terhadap nilai UAS. Kesimpulannya variabel yang paling dominan memengaruhi nilai UAS secara individual adalah tingkat kehadiran.
r2 <- summary(model)$r.squared
r2_adj <- summary(model)$adj.r.squared
r2
## [1] 0.8719029
r2_adj
## [1] 0.8353038
Interpretasi: Nilai R² = 0.8719 menunjukkan bahwa model mampu menjelaskan 87.19% variasi nilai UAS melalui variabel kehadiran dan IQ. Sisanya sekitar 12.81% dipengaruhi oleh faktor lain yang tidak dimasukkan ke dalam model. Nilai Adjusted R² = 0.8353 menunjukkan model tetap baik walau mempertimbangkan jumlah variabel yang digunakan.
shapiro.test(residuals(model))
##
## Shapiro-Wilk normality test
##
## data: residuals(model)
## W = 0.95125, p-value = 0.6833
hist(residuals(model),
main = "Histogram Residual",
xlab = "Residual",
col = "pink",
border = "white")
Interpretasi: Uji Shapiro-Wilk menghasilkan p-value = 0.6833 > 0.05, sehingga gagal tolak H₀. Artinya residual model berdistribusi normal. Karena jumlah data hanya 10 observasi, bentuk histogram belum terlalu terlihat jelas, namun hasil uji statistik sudah cukup untuk membuktikan asumsi normalitas terpenuhi.
plot(fitted(model), residuals(model),
xlab = "Nilai Fitted",
ylab = "Residual",
main = "Plot Residual vs Fitted",
pch = 19, col = "deeppink")
abline(h = 0, lty = 2, col = "steelblue")
Interpretasi: Dari plot terlihat titik-titik menyebar secara acak dan tidak membentuk pola tertentu, sehingga dapat disimpulkan tidak ada masalah heteroskedastisitas, ragam residual bersifat homogen.
library(car)
vif(model)
## X1_Kehadiran X2_IQ
## 1.055571 1.055571
Interpretasi: Nilai VIF untuk X1 dan X2 sama-sama sekitar 1.056, jauh di bawah batas 10. Menunjukkan bahwa tidak ada korelasi yang kuat antara kehadiran dan IQ, sehingga tidak terdapat multikolinieritas dalam model.
Meskipun data bukan runtun waktu, uji ini tetap dilakukan sebagai pelengkap analisis.
library(lmtest)
dwtest(model)
##
## Durbin-Watson test
##
## data: model
## DW = 2.594, p-value = 0.8013
## alternative hypothesis: true autocorrelation is greater than 0
Interpretasi: Nilai DW = 2.594 mendekati angka 2, dan p-value = 0.8013 > 0.05, gagal tolak H₀. Artinya tidak terdapat autokorelasi pada residual.
Berdasarkan hasil analisis regresi linier berganda, diperoleh persamaan: Ŷ = 23.0545 + 0.7372·X1 - 0.0343·X2
Secara simultan, kehadiran dan IQ berpengaruh signifikan terhadap nilai UAS (karena p < 0.05). Namun secara parsial, hanya tingkat kehadiran yang berpengaruh signifikan pada α = 5%, sementara IQ tidak signifikan dalam model ini.
Model dapat menjelaskan 87.19% variasi nilai UAS (R² = 0.8719), dan seluruh asumsi klasik OLS terpenuhi seperti normalitas, homoskedastisitas, non-autokorelasi, dan non-multikolinieritas. Sehingga model ini valid dan layak digunakan.