regresiberganda <- function(X, y) {
  # Mencari X transpose
  Xtranspose <- t(X)
  
  # X transpose dikali X
  XX <- Xtranspose %*% X
  
  # X transpose dikali y
  Xy <- Xtranspose %*% y
  
  # invers dari X transpose dikali X
  XXinverse <- solve(XX)
  
  # mencari koefisien regresi
  beta_hat <- XXinverse %*% Xy
  
  # Mengembalikan nilai koefisien regresi
  return(beta_hat)
}

# Contoh pengaplikasian fungsi di atas
X <- cbind(1, c(2, 3, 4, 5))  # Matriks variabel bebas (X0 dan x1)
y <- c(25, 45, 65, 85)         # Vektor variabel tak bebas (y)
koefisien <- regresiberganda(X, y)
print(koefisien)
##      [,1]
## [1,]  -15
## [2,]   20
# Penggunaan Fungsi Jika Mengunakan Bilangan Acak
set.seed(123) 

n_obs <- 100  
n_vars <- 3 
X <- cbind(1, matrix(rnorm(n_obs * n_vars), nrow = n_obs))  

# Menghasilkan vektor koefisien acak untuk variabel independen
true_coefficients <- matrix(rnorm(n_vars + 1), ncol = 1)

# Membangun vektor variabel tak bebas y berdasarkan matriks X dan koefisien acak
y <- X %*% true_coefficients + rnorm(n_obs)

# Memanggil fungsi regresiberganda untuk menghitung koefisien regresi
koefisien <- regresiberganda(X, y)
print(koefisien)
##            [,1]
## [1,] -0.7137446
## [2,] -0.7850047
## [3,] -0.8780735
## [4,] -1.1584714