Y <- c(65,70,75,80,85,78,72,90,88,95)
X1 <- c(2,3,4,5,6,5,3,7,6,8)
X2 <- c(60,65,70,75,80,72,68,85,83,90)
data <- data.frame(Y, X1, X2)
data
## Y X1 X2
## 1 65 2 60
## 2 70 3 65
## 3 75 4 70
## 4 80 5 75
## 5 85 6 80
## 6 78 5 72
## 7 72 3 68
## 8 90 7 85
## 9 88 6 83
## 10 95 8 90
Interpretasi: Data berisi nilai ujian (Y), jam belajar (X1), dan tingkat kehadiran (X2).
X <- cbind(1, X1, X2)
Y_mat <- matrix(Y, ncol = 1)
beta <- solve(t(X) %*% X) %*% t(X) %*% Y_mat
beta
## [,1]
## 16.1360113
## X1 1.1698379
## X2 0.7744891
Interpretasi:
Y_pred <- X %*% beta
residual <- Y_mat - Y_pred
Interpretasi: Residual adalah selisih antara nilai aktual dan hasil prediksi model.
SST <- sum((Y - mean(Y))^2)
SSE <- sum(residual^2)
SSR <- SST - SSE
R2 <- SSR / SST
n <- length(Y)
k <- 2
Adj_R2 <- 1 - ((SSE/(n-k-1)) / (SST/(n-1)))
R2
## [1] 0.9993238
Adj_R2
## [1] 0.9991305
Interpretasi:
F_hit <- (SSR/k) / (SSE/(n-k-1))
F_hit
## [1] 5172.116
Interpretasi: Jika F hitung besar, maka variabel X1 dan X2 secara bersama-sama berpengaruh terhadap Y.
sigma2 <- SSE / (n - k - 1)
var_beta <- sigma2 * solve(t(X) %*% X)
se_beta <- sqrt(diag(var_beta))
t_hit <- beta / se_beta
t_hit
## [,1]
## 5.688154
## X1 4.201468
## X2 13.900261
Interpretasi: Jika nilai t besar (dibanding t tabel), maka variabel tersebut berpengaruh signifikan.
model <- lm(Y ~ X1 + X2, data = data)
summary(model)
##
## Call:
## lm(formula = Y ~ X1 + X2, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.31078 -0.14588 -0.05074 0.04440 0.56237
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 16.13601 2.83677 5.688 0.000744 ***
## X1 1.16984 0.27844 4.201 0.004028 **
## X2 0.77449 0.05572 13.900 2.36e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2834 on 7 degrees of freedom
## Multiple R-squared: 0.9993, Adjusted R-squared: 0.9991
## F-statistic: 5172 on 2 and 7 DF, p-value: 8.042e-12
Interpretasi: Hasil dari fungsi lm() seharusnya mendekati hasil perhitungan manual.
predict(model, newdata = data.frame(X1=1, X2=100))
## 1
## 94.75476
Interpretasi: Ini adalah prediksi nilai ujian jika mahasiswa belajar 1 jam/minggu dan kehadiran 100%.