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("\nPersamaan regresi manual:\n")
## 
## 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
# MENGGUNAKAN FUNGSI LM
model_lm <- lm(Y ~ X1 + X2, data = data)
summary(model_lm)
## 
## 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
coef_lm <- coef(model_lm)
cat("\nPersamaan regresi dari lm():\n")
## 
## 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
cat("SSR =", SSR, "\n")
## SSR = 899.891
cat("SST =", SST, "\n")
## 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
cat("F tabel  =", F_tabel, "\n")
## F tabel  = 4.737414
cat("p-value  =", p_value_F, "\n")
## 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
# MENGGUNAKAN FUNGSI R
anova(model_lm)
## 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
summary(model_lm)$fstatistic
##    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
cat("\nt tabel =", t_tabel, "\n")
## 
## 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
# MENGGUNAKAN FUNGSI R
summary(model_lm)$coefficients
##               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.

# 4. Koefisien Determinasi
cat("R-squared =", summary(model_lm)$r.squared, "\n")
## R-squared = 0.8719029
cat("Adjusted R-squared =", summary(model_lm)$adj.r.squared, "\n")
## 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:

  1. Uji Normalitas (memastikan bahwa residual berdistribusi normal)
  2. Uji Multikolinearitas (tidak terdapat hubungan yang kuat antar variabel independen)
  3. Uji Heteroskedastisitas (varians residual bersifat konstan)
  4. Uji Autokorelasi (varians residual bersifat konstan)
# 5. Uji Asumsi Klasik
library(car)
## Loading required package: carData
library(lmtest)
## 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.

# b. Multikolinearitas 
vif(model_lm)
##       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.

# c. Heteroskedastisitas (Breusch-Pagan)
bptest(model_lm)
## 
##  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).

# d. Autokorelasi (Durbin-Watson)
dwtest(model_lm)
## 
##  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.