data <- data.frame(
IQ = c(110,120,115,130,110,120,120,125,110,120),
Kehadiran = c(60,70,75,80,80,90,95,95,100,100),
Nilai_UAS = c(65,70,75,75,80,80,85,95,90,98)
)
print(data)
## IQ Kehadiran Nilai_UAS
## 1 110 60 65
## 2 120 70 70
## 3 115 75 75
## 4 130 80 75
## 5 110 80 80
## 6 120 90 80
## 7 120 95 85
## 8 125 95 95
## 9 110 100 90
## 10 120 100 98
Y <- as.matrix(data$Nilai_UAS) # Variabel respon
X1 <- data$Kehadiran # Variabel bebas 1
X2 <- data$IQ # Variabel bebas 2
# Matriks (dengan intercept)
X <- cbind(1, X1, X2)
X
## X1 X2
## [1,] 1 60 110
## [2,] 1 70 120
## [3,] 1 75 115
## [4,] 1 80 130
## [5,] 1 80 110
## [6,] 1 90 120
## [7,] 1 95 120
## [8,] 1 95 125
## [9,] 1 100 110
## [10,] 1 100 120
# 1. Hitung X'X
XtX <- t(X) %*% X
XtX
## X1 X2
## 10 845 1180
## X1 845 73075 99900
## X2 1180 99900 139650
# 2. Hitung (X'X)^-1
XtX_inv <- solve(XtX)
XtX_inv
## X1 X2
## 34.62208967 -0.0188185492 -0.2790840870
## X1 -0.01881855 0.0006311333 -0.0002924764
## X2 -0.27908409 -0.0002924764 0.0025745622
# 3. Hitung X'Y
XtY <- t(X) %*% Y
XtY
## [,1]
## 813
## X1 69925
## X2 96060
# 4. Hitung beta duga
beta_duga <- XtX_inv %*% XtY
beta_duga
## [,1]
## 23.0544545
## X1 0.7372330
## X2 -0.0343275
cat("Hasil beta duga:\n")
## Hasil beta duga:
print(beta_duga)
## [,1]
## 23.0544545
## X1 0.7372330
## X2 -0.0343275
model <- lm(Nilai_UAS ~ Kehadiran + IQ, data = data)
summary(model)
##
## Call:
## lm(formula = Nilai_UAS ~ Kehadiran + 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
## Kehadiran 0.73723 0.10918 6.752 0.000264 ***
## 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
Interpretasi Perbandingan:
Nilai beta duga yang diperoleh secara manual sama dengan hasil dari fungsi lm(), sehingga dapat disimpulkan bahwa perhitungan yang dilakukan sudah benar.
b <- coef(model)
cat(sprintf("Ŷ = %.3f + %.3f·Kehadiran %+.3f·IQ\n", b[1], b[2], b[3]))
## Ŷ = 23.054 + 0.737·Kehadiran -0.034·IQ
Interpretasi:
Jika kehadiran meningkat 1 satuan, maka nilai UAS meningkat sekitar 0.737 dengan asumsi variabel lain tetap.
Koefisien IQ sebesar -0.034 menunjukkan bahwa secara matematis IQ memiliki pengaruh negatif terhadap nilai UAS. Namun, karena berdasarkan uji t nilai p-value > 0.05, pengaruh ini tidak signifikan secara statistik.
Nilai konstanta sebesar 23.054 menunjukkan nilai UAS ketika kehadiran dan IQ bernilai 0. Tapi kondisi ini tidak mungkin terjadi di dunia nyata, maka angka ini hanya bagian dari model perhitungan saja.
anova(model)
## Analysis of Variance Table
##
## Response: Nilai_UAS
## Df Sum Sq Mean Sq F value Pr(>F)
## Kehadiran 1 899.43 899.43 47.6218 0.0002312 ***
## 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 hasil uji F diperoleh p-value = 0.0007523 < 0.05, artinya variabel kehadiran dan IQ secara simultan berpengaruh signifikan terhadap nilai UAS. Jadi, model regresi yang dibuat sudah valid dan dapat digunakan untuk menjelaskan hubungan antara variabel.
summary(model)$coefficients
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 23.0544545 25.5716101 0.9015644 0.3972467061
## Kehadiran 0.7372330 0.1091797 6.7524718 0.0002644133
## IQ -0.0343275 0.2205125 -0.1556715 0.8806860631
Interpretasi:
Untuk variabel kehadiran, diperoleh nilai p-value = 0.000264 < 0.05, sehingga dapat disimpulkan bahwa kehadiran berpengaruh signifikan terhadap nilai UAS.
Untuk variabel IQ, diperoleh nilai p-value = 0.880686 > 0.05. sehingga dapat disimpulkan bahwa IQ tidak berpengaruh signifikan terhadap nilai UAS.
Dengan demikian, dapat disimpulkan bahwa hanya variabel kehadiran yang berpengaruh signifikan terhadap nilai UAS.
R2 <- summary(model)$r.squared
R2
## [1] 0.8719029
R2_adj <- summary(model)$adj.r.squared
R2_adj
## [1] 0.8353038
Interpretasi:
Dari hasil analisis diperoleh nilai R² = 0.8719 (87.19%), yang berarti sekitar 87.19% variasi nilai UAS dapat dijelaskan oleh variabel kehadiran dan IQ secara bersama-sama dalam model. Sisanya sebesar 12.81% dipengaruhi oleh faktor lain yang tidak dimasukkan dalam model, seperti cara belajar, motivasi, atau lingkungan belajar.
Sementara itu, nilai Adjusted R² = 0.8353 menunjukkan bahwa meskipun telah mempertimbangkan jumlah variabel prediktor yang digunakan, model tetap mampu menjelaskan sebagian besar variasi nilai UAS dengan baik.
## Normalitas
shapiro.test(residuals(model))
##
## Shapiro-Wilk normality test
##
## data: residuals(model)
## W = 0.95125, p-value = 0.6833
qqnorm(residuals(model))
qqline(residuals(model))
Interpretasi:
Hasil uji Shapiro-Wilk menunjukkan p-value = 0.6833 > 0.05, sehingga residual berdistribusi normal. Hal ini didukung oleh Q-Q Plot yang memperlihatkan titik-titik mengikuti garis diagonal. Dengan terpenuhinya asumsi normalitas, model regresi yang digunakan telah memenuhi syarat dan dapat diinterpretasikan secara valid.
## Heteroskedastisitas
# Hipotesis:
# H₀: Tidak terjadi heteroskedastisitas (varians residual konstan)
# H₁: Terjadi heteroskedastisitas (varians residual tidak konstan)
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.4.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.4.3
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
bptest(model)
##
## studentized Breusch-Pagan test
##
## data: model
## BP = 5.905, df = 2, p-value = 0.05221
Interpretasi: Berdasarkan uji Breusch-Pagan diperoleh nilai p-value = 0.05221 > 0.05, maka tidak cukup bukti untuk menolak H₀. Artinya, tidak terjadi heteroskedastisitas atau dengan kata lain asumsi homoskedastisitas terpenuhi.
## Multikolinearitas
library(car)
## Warning: package 'car' was built under R version 4.4.2
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.4.2
vif(model)
## Kehadiran IQ
## 1.055571 1.055571
Interpretasi:
Dari hasil yang diperoleh, nilai VIF untuk kehadiran dan IQ sama-sama sekitar 1.055. Nilai ini masih sangat kecil dan mendekati 1. Artinya, tidak ada hubungan yang kuat antara variabel kehadiran dan IQ. Jadi, keduanya tidak saling mempengaruhi secara berlebihan dalam model. Dengan begitu, model regresi ini tidak ada multikolinearitas dan masih aman untuk digunakan.
## Autokorelasi
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:
Dari hasil diperoleh nilai p-value = 0.8013 > 0.05 Artinya tidak terdapat autokorelasi pada residual. Kesalahan (error) antar data tidak saling berkaitan, sehingga model regresi sudah memenuhi asumsi ini.
Berdasarkan hasil analisis yang telah dilakukan, dapat disimpulkan bahwa model regresi yang digunakan sudah baik dan memenuhi seluruh asumsi klasik (normalitas, heteroskedastisitas, multikolinearitas, dan autokorelasi). Secara simultan, variabel kehadiran dan IQ berpengaruh signifikan terhadap nilai UAS (p-value = 0.00075). Namun secara parsial, hanya kehadiran yang berpengaruh signifikan (p-value = 0.00026), sedangkan IQ tidak (p-value = 0.8807).
Model ini mampu menjelaskan sekitar 87.19% variasi nilai UAS (R² = 0.8719), sehingga dapat dikatakan cukup baik. Oleh karena itu, kehadiran merupakan faktor yang paling dominan dan signifikan dalam mempengaruhi nilai UAS, sedangkan IQ belum terbukti berpengaruh secara signifikan.