#---------------------------------------------------------------
#1.Estimasi Model Regresi Linear Menggunakan OLS
#---------------------------------------------------------------
Y  <- as.matrix(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)
n <- length(Y)

#Matriks Design
X <- cbind(1, X1, X2) #Intercept + Variabel Independen
print (X)
##         X1 X2
##  [1,] 1  2 60
##  [2,] 1  3 65
##  [3,] 1  4 70
##  [4,] 1  5 75
##  [5,] 1  6 80
##  [6,] 1  5 72
##  [7,] 1  3 68
##  [8,] 1  7 85
##  [9,] 1  6 83
## [10,] 1  8 90
#Perhitungan Manual
XtX <- t(X) %*% X
XtX_inv <- solve(XtX)
XtY <- t(X) %*% Y
beta_manual <- XtX_inv %*% XtY #(X'X)^-1 X'Y

#Prediksi dan Resdiual
Y_hat <- X %*% beta_manual #Y duga
residuals <- Y - Y_hat 

#Interpretasi : Dari perhitungan diatas didapatkan 
#B0 = 16.136 , B1 = 1.170(X1), B2 = 0.774 (X2)
#Dapat disusun bentuk modelnya Y = 16.136 + 1.170 X1 + 0.774 X2


#---------------------------------------------------------------
#2. Uji F dan Uji T secara manual
#---------------------------------------------------------------
#A. UJI F
mean_y <- mean(Y)
SST <- sum((Y - mean_y)^2) #SST = JKT
SSR <- sum((Y_hat - mean_y)^2) #SSR = JKR
SSE <- sum((Y - Y_hat)^2) #SSE = JKE = JKG

df_reg <- ncol(X) -1
df_err <- n - ncol(X)
df_tot <- n - 1

MSR <- SSR / df_reg
MSE <- SSE / df_err

F_value <- MSR/MSE
print(F_value)
## [1] 5172.116
p_value_F <- pf(F_value, df_reg, df_err, lower.tail = FALSE)
print(p_value_F)
## [1] 8.042129e-12
#Interpretasi: F-Hitung = 5172.116 dengan P-Value = 8.04 × 10⁻¹²
#Karena P-Value < 0.05, Maka Tolak Ho
#Artinya secara simultan (bersama-sama) variabel X1 dan X2
#Berpengaruh signifikan terhadap nilai ujian (Y)


#B. UJI T
sigma2 <- MSE ## Varians error
var_beta <- MSE * solve(t(X) %*% X) # Varians koefisien
se_beta <- sqrt(diag(var_beta)) # Standard error

#T-hitung
beta_vector <- as.vector(beta_manual) #Mengubah numerik menjadi vector
t_hit <- beta_vector / se_beta
print(t_hit)
##                  X1        X2 
##  5.688154  4.201468 13.900261
#Interpretasi: Pada Uji Parsial Semua Variabel  Berpengaruh Signifikan Terhadap Respon

#--------------------------------------------------------------
#3. Hitung nilai R² dan Adjusted R² secara manual!
#--------------------------------------------------------------
#Menghitung R^2 Square
R2 <- SSR/SST
print(R2)
## [1] 0.9993238
#Interpretasi: Nilai koefisien determinasi (R²) yang diperoleh sebesar 0,9993 
#Menunjukkan bahwa sebesar 99,93% variasi nilai ujian mahasiswa 
#Dapat dijelaskan oleh variabel jumlah jam belajar dan tingkat kehadiran.


#Menghitung Adj R Square
k <- ncol(X) - 1
Adj_R2 <- 1 - ((SSE/(n - k - 1)) / (SST/(n - 1)))
print(Adj_R2)
## [1] 0.9991305
#Interpretasi: Nilai Adjusted R² sebesar 0,9991 menunjukkan bahwa setelah memperhitungkan jumlah variabel dalam model, sebesar 99,91% variasi nilai ujian mahasiswa 
#Dapat dijelaskan oleh variabel jumlah jam belajar dan tingkat kehadiran.

#-------------------------------------------------------------
#4. Bandingkan dengan function lm
#-------------------------------------------------------------
model <- lm(Y ~ X1 + X2)
summary(model)
## 
## Call:
## lm(formula = Y ~ X1 + X2)
## 
## 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 perkomponennya sama dengan perhitungan manual
#--------------------------------------------------------------
#5. Prediksikan nilai ujian mahasiswa jika jumlah jam belajar 1 jam/minggu namun kehadirannya 100%?
#---------------------------------------------------------------
newdata <- data.frame(X1 = 1, X2 = 100)
predict(model, newdata)
##        1 
## 94.75476
#Interpretasi: #Jika seorang mahasiswa belajar selama 1 jam per minggu dan memiliki tingkat kehadiran 100%, 
#Maka nilai ujian yang diprediksi adalah sekitar 94,75.

Interpretasi Keseluruhan

Berdasarkan hasil analisis regresi linear berganda, diperoleh model:

              𝑌= 16.136 + 1.170X1 + 0.774X2

yang menunjukkan bahwa variabel jumlah jam belajar (X1) dan tingkat kehadiran (X2) memiliki pengaruh positif terhadap nilai ujian mahasiswa. Setiap peningkatan satu jam belajar akan meningkatkan nilai ujian sebesar 1,17 poin, sedangkan setiap kenaikan 1% kehadiran akan meningkatkan nilai ujian sebesar 0,77 poin.

Secara simultan, hasil uji F menunjukkan bahwa model regresi signifikan dengan nilai F hitung sebesar 5172,116 dan p-value yang sangat kecil (< 0,05), sehingga dapat disimpulkan bahwa kedua variabel independen secara bersama-sama berpengaruh signifikan terhadap nilai ujian. Secara parsial, hasil uji t juga menunjukkan bahwa masing-masing variabel memiliki pengaruh signifikan, dengan variabel kehadiran (X2) sebagai faktor yang paling dominan karena memiliki nilai t hitung terbesar.

Nilai koefisien determinasi (R²) sebesar 0,9993 dan Adjusted R² sebesar 0,9991 menunjukkan bahwa hampir seluruh variasi nilai ujian (lebih dari 99%) dapat dijelaskan oleh model. Hal ini diperkuat dengan nilai residual yang sangat kecil, yang mengindikasikan bahwa model memiliki tingkat kesalahan prediksi yang sangat rendah dan kemampuan yang sangat baik dalam merepresentasikan data.

Selain itu, hasil perhitungan manual yang dilakukan konsisten dengan hasil yang diperoleh menggunakan fungsi lm() pada R, sehingga dapat disimpulkan bahwa proses estimasi telah dilakukan dengan benar.

Berdasarkan model yang diperoleh, prediksi menunjukkan bahwa mahasiswa dengan jumlah jam belajar 1 jam per minggu dan tingkat kehadiran 100% diperkirakan memperoleh nilai ujian sebesar 94,75. Hal ini menegaskan bahwa kehadiran memiliki peran yang sangat penting dalam meningkatkan hasil belajar mahasiswa.