Regresi Linier Sederhana (Uji Hipotesis, Ukuran Kecocokan Model, dan Uji Asumsi)

DATA

Diberikan data tentang IQ dan tingkat kehadiran sepuluh siswa di kelas yang diperkirakan mempengaruhi nilai UAS.

  1. Buatlah persamaan regresi linier berganda ! (hitung beta duga secara manual di R dan bandingkan dengan fungsi lm)
  2. Lakukan Uji-F ! (interpretasikan hasilnya)
  3. Lakukan Uji-t ! (interpretasikan hasilnya)
  4. Berapa koefisien determinasinya? Interpretasi hasil ini !
  5. Lakukan uji asumsi dan jelaskan hasilnya
# Input Data
X1 <- c(60, 70, 75, 80, 80, 90, 95, 95, 100, 100)   # Tingkat Kehadiran
X2 <- c(110, 120, 115, 130, 110, 120, 120, 125, 110, 120)  # IQ
Y <- c(65, 70, 75, 75, 80, 80, 85, 95, 90, 98)  # Nilai Uas

n <- length(Y)
k <- 2

1. Regresi Linier Berganda

Model: Ŷ = β₀ + β₁X₁ + β₂X₂

Manual (Matriks)

X_matriks <- cbind(1, X1, X2)   # Matriks desain [1 | X1 | X2] 
beta_manual <- solve(t(X_matriks) %*% X_matriks) %*% t(X_matriks) %*% Y
print(beta_manual)
##          [,1]
##    23.0544545
## X1  0.7372330
## X2 -0.0343275

Interpretasi:

  • β̂₀ = 23.0544: Jika X₁ = 0 dan X₂ = 0, prediksi nilai UAS = 23.0544

  • β̂₁ = 0 .7372: Setiap kenaikan 1% kehadiran (X₁), maka nilai UAS naik 0.7372 nilai (dengan X₂ tetap atau 0)

  • β̂₂ = -0.0343: Setiap kenaikan 1 poin IQ (X₂), maka nilai UAS akan turun 0.0343 nilai (dengan X₁ tetap atau 0).

Fungsi R (lm)

data_nilai  <- data.frame(Y, X1, X2)
model_nilai <- lm(Y ~ X1 + X2, data = data_nilai)
summary(model_nilai)
## 
## Call:
## lm(formula = Y ~ X1 + X2, data = data_nilai)
## 
## 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

Didapatkan hasil manual sesuai dengan output fungsi lm. Ŷ = 23.0544 + 0.7372 X₁ − 0.0343 X₂`

Prediksi dan Residual

Y_prediksi <- X_matriks %*% beta_manual
print(Y_prediksi)
##           [,1]
##  [1,] 63.51241
##  [2,] 70.54147
##  [3,] 74.39927
##  [4,] 77.57052
##  [5,] 78.25707
##  [6,] 85.28613
##  [7,] 88.97229
##  [8,] 88.80065
##  [9,] 93.00173
## [10,] 92.65846
residual <- Y - Y_prediksi
print(residual)
##             [,1]
##  [1,]  1.4875890
##  [2,] -0.5414662
##  [3,]  0.6007312
##  [4,] -2.5705215
##  [5,]  1.7429286
##  [6,] -5.2861266
##  [7,] -3.9722917
##  [8,]  6.1993458
##  [9,] -3.0017318
## [10,]  5.3415432

Interpretasi:

Interpretasi Y Prediksi:

Model menghasilkan nilai prediksi yang cukup dekat dengan nilai aktual.

Contohnya:

  • Siswa 2: Y aktual = 70, Y prediksi = 70.54 → sangat mendekati

  • Siswa 8: Y aktual = 95, Y prediksi = 88.80 → selisih lebih besar

Interpretasi Residual:

  • Residual = Y aktual − Y prediksi Residual positif → Model menebak lebih rendah (underpredicts) dari nilai aktual

  • Residual negatif → model menebak lebih tinggi (overpredicts) dari nilai aktual

Residual terbesar:

  • Obs 8: +6.1993 → model paling underpredict

  • Obs 6: −5.2861 → model paling overpredict

Kesimpulan:

Residual tersebar di sekitar nol (tidak ada pola sistematis), yang menunjukkan model sudah cukup baik.

2. Koefisien Determinasi

Manual

## HITUNG SST, SSE, SSR
SST <- sum((Y - mean(Y))^2)
SSE <- sum(residual^2)
SSR <- SST - SSE

R2 <- SSR / SST
cat("R² =", R2, "\n")
## R² = 0.8719029

Fungsi R

koef_deter_R2 <- summary(model_nilai)$r.squared
cat("R Squared:", round(koef_deter_R2, 4), "\n")
## R Squared: 0.8719

Interpretasi:

Didapatkan R^2 0.8719, artinya 87.19% variasi nilai UAS dapat dijelaskan oleh Kehadiran dan IQ secara bersama-sama.

3. Uji F

Manual

MSR <- SSR / k
MSE <- SSE / (n - k - 1)

F_hit <- MSR / MSE
F_tab  <- qf(0.95, df1 = k, df2 = n - k - 1)

cat("F hitung:", F_hit, "\n")
## F hitung: 23.82303
cat("F tabel :", F_tab, "\n")
## F tabel : 4.737414

Fungsi R

F_hitung <- summary(model_nilai)$fstatistic[1]
F_tabel <- qf(0.95, df1 = 2, df2 = 7)
P_value <- pf(F_hitung, df1 = 2, df2 = 7, lower.tail = F)
cat("F Hitung:", F_hitung, "\n")
## F Hitung: 23.82303
cat("F Tabel α = 0.05:", F_tabel, "\n")
## F Tabel α = 0.05: 4.737414
cat("P Value F:", P_value, "\n")
## P Value F: 0.0007522929

Interpretasi:

Hipotesis:

  • H₀: β₁ = β₂ = 0 (tidak ada pengaruh)

  • H₁: minimal satu β ≠ 0

Kriteria Keputusan:

  • F hitung > F tabel: Tolak H₀ → model signifikan

  • F hitung ≤ F tabel: Gagal Tolak H₀ → model tidak signifikan

Keputusan:

F hitung (23.8230) > F tabel α=0.05 (4.7374),

Pada α = 5%, model secara simultan signifikan kehadiran dan IQ secara bersama-sama berpengaruh terhadap nilai UAS.

4. Uji T

Manual

var_b    <- MSE * solve(t(X_matriks) %*% X_matriks)
se_b     <- sqrt(diag(var_b))

t_hitung <- beta_manual / se_b
t_tabel  <- qt(0.975, df = n - k - 1)

cat("t hitung:", t_hitung, "\n")
## t hitung: 0.9015644 6.752472 -0.1556715
cat("t tabel :", t_tabel, "\n")
## t tabel : 2.364624

Fungsi R

T_hitung <- summary(model_nilai)$coefficients
print(T_hitung)
##               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
T_tabel <- qt(0.95, df = 7)
cat(" T tabel:", T_tabel, "\n")
##  T tabel: 1.894579

Interpretasi:

Hipotesis:

  • H₀: βᵢ = 0

  • H₁: βᵢ ≠ 0

Kriteria Keputusan:

  • |t hitung| > t tabel: Tolak H₀ → variabel signifikan

  • |t hitung| ≤ t tabel: Gagal Tolak H₀ → variabel tidak signifikan

Keputusan:

  • X₁ (Kehadiran):|t hitung| = |6.7525| = 6.7525) > t tabel (1.8946) → signifikan. Kehadiran berpengaruh nyata terhadap nilai UAS secara parsial.

  • X₂ (IQ): |t hitung| = |−0.1557| = 0.1557) < t tabel (1.8946) → tidak signifikan. Secara parsial, IQ tidak memberikan kontribusi signifikan pada model ini.

5. Uji Asumsi Klasik

Uji Normalitas

residuals_model <- residuals(model_nilai)
shapiro.test(residuals_model)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals_model
## W = 0.95125, p-value = 0.6833
plot(model_nilai, which = 2)

Interpretasi:

Hipotesis:

  • H₀ = Residual berdistribusi normal

  • H₁ = Residual tidak berdistribusi normal

Dasar Pengambilan Keputusan:

  • Jika p-value > 0.05 → Gagal tolak H₀

  • Jika p-value ≤ 0.05 → Tolak H₀l

Keputusan:

Nilai p-value = 0.6833 > 0.05, maka gagal tolak H₀. Artinya residual model regresi berdistribusi normal. Asumsi normalitas terpenuhi, sehingga hasil uji t dan uji F dapat dipercaya dan valid secara statistik.

Nilai W = 0.9512 mendekati 1, yang menunjukkan residual sangat mendekati distribusi normal sempurna.

Homoskedasitas

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_nilai)
## 
##  studentized Breusch-Pagan test
## 
## data:  model_nilai
## BP = 5.905, df = 2, p-value = 0.05221
plot(model_nilai, which = 1)

Interpretasi:

Hipotesis:

  • H₀ = Varians residual konstan (homoskedastis)

  • H₁ = Varians residual tidak konstan (heteroskedastis)

Dasar Pengambilan Keputusan: - Jika p-value > 0.05 → Gagal tolak H₀)

  • Jika p-value ≤ 0.05 → Tolak H₀

Keputusan:

Nilai p-value = 0.0522 > 0.05, maka gagal tolak H₀. Artinya varians dari residual bersifat konstan (homoskedastis) di seluruh nilai prediksi. Asumsi homoskedastisitas terpenuhi.

Uji Multikolinieritas

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_nilai)
##       X1       X2 
## 1.055571 1.055571

Interpretasi:

Hipotesis:

  • H₀ = Tidak terdapat multikolinearitas antar variabel bebas

  • H₁ = Terdapat multikolinearitas antar variabel bebas

Kriteria Keputusan VIF:

  • VIF < 10 → Tidak ada multikolinearitas (aman)

  • VIF 10 – 30 → Multikolinearitas sedang (perlu diwaspadai)

  • VIF > 30 → Multikolinearitas serius (model bermasalah)

Keputusan:

Nilai VIF untuk X₁ = 1.056 dan X₂ = 1.056, keduanya jauh di bawah batas toleransi 10. Artinya tidak terdapat multikolinearitas antar variabel kehadiran dan IQ.

Durbin Watson

library(lmtest)
dwtest(model_nilai)
## 
##  Durbin-Watson test
## 
## data:  model_nilai
## DW = 2.594, p-value = 0.8013
## alternative hypothesis: true autocorrelation is greater than 0

Interpretasi:

Hipotesis:

  • H₀ = Tidak terdapat autokorelasi pada residual (ρ = 0)

  • H₁ = Terdapat autokorelasi positif pada residual (ρ > 0)

Kriteria Keputusan Nilai DW:

  • DW mendekati 0 → Autokorelasi positif kuat (masalah serius)

  • DW mendekati 2 → Tidak ada autokorelasi (ideal)

  • DW mendekati 4 → Autokorelasi negatif kuat (masalah serius)

Keputusan:

Nilai DW = 2.594 dan p-value = 0.8013 > 0.05, maka gagal tolak H₀. Artinya tidak terdapat autokorelasi pada residual model regresi.

Kesimpulan Akhir

Seluruh uji asumsi klasik terpenuhi. Model regresi berganda Ŷ = 23.0544 + 0.7372 X₁ − 0.0343 X₂ memenuhi semua syarat BLUE (Best Linear Unbiased Estimator) sesuai teorema Gauss-Markov. Model ini valid, andal, dan layak digunakan untuk analisis maupun prediksi nilai UAS.


Kesimpulan

Model regresi berganda Ŷ = 23.0544 + 0.7372 X₁ − 0.0343 X₂ mampu menjelaskan 87.19%% variasi nilai UAS. Variabel kehadiran (X₁) terbukti berpengaruh signifikan secara parsial t value (6.7525) > t tabel (1.8946), sedangkan IQ (X₂) tidak signifikan secara parsial pada sampel kecil ini. Secara simultan, model signifikan pada α = 5%. Seluruh asumsi klasik terpenuhi, sehingga model dapat diterima.