Matriks

library(lpSolve)

# PREPARING DATA 
# Y6 = 15
x_data = c(4, 6, 7, 8, 10, 12)
y_data = c(8, 9, 12, 11, 14, 15)
n = length(x_data) # Jumlah data (6)

# FUNGSI OBJEKTIF
# Kita memiliki 8 variabel: a, b, z1, z2, z3, z4, z5, z6
# Ingin meminimumkan jumlah z (error mutlak)
# Koefisien untuk a dan b adalah 0, sedangkan untuk z1-z6 adalah 1
f.obj = c(0, 0, rep(1, n))

# MATRIKS CONSTRAINT 
# zi <= | Yi - a - bXi | dipecah menjadi dua pertidaksamaan:
# 1. Persamaan Atas: -a - bX - z <= -Y
# 2. Persamaan Bawah: a + bX - z <= Y

Martriks Atas dan Bawah (Constraint)

# Membangun 6 baris pertama (Persamaan Atas)
# Kolom a=-1, b=-X, z=-Identitas
mat_atas = cbind(rep(-1, n), -x_data, -diag(n))

# Membangun 6 baris terakhir (Persamaan Bawah)
# Kolom a=1, b=X, z=-Identitas
mat_bawah = cbind(rep(1, n), x_data, -diag(n))

# Menggabungkan keduanya menjadi Matriks A (12 x 8)
f.con = rbind(mat_atas, mat_bawah)

# ARAH & TANDA RUAS (RIGHT HAND SIDE/RHS)
# Semua tanda pertidaksamaan adalah <=
f.dir = rep("<=", 2 * n)

# Ruas kanan berisi nilai -Y (atas) dan Y (bawah)
f.rhs = c(-y_data, y_data)

Eksekusi Program

# EKSEKUSI
# Menjalankan algoritma Simplex melalui fungsi lp()
hasil = lp(direction = "min", 
            objective.in = f.obj, 
            const.mat = f.con, 
            const.dir = f.dir, 
            const.rhs = f.rhs)

Hasil

# OUTPUT 
# Menampilkan hasil solusi variabel keputusan
cat("Hasil Solusi (a, b, z1, z2, z3, z4,z5, z6):", hasil$solution, "\n\n")
## Hasil Solusi (a, b, z1, z2, z3, z4,z5, z6): 4.5 0.875 0 0.75 1.375 0.5 0.75 0
# Men#ampilkan interpretasi model regresi
cat("Model Regresi LAD yang terbentuk: Y =", hasil$solution[1], "+", hasil$solution[2], "X\n\n")
## Model Regresi LAD yang terbentuk: Y = 4.5 + 0.875 X
cat("Total Absolute Error =", hasil$objval, "\n")
## Total Absolute Error = 3.375