if (!require(pracma)) install.packages("pracma", dependencies = TRUE)
## Loading required package: pracma
library(pracma)

Age <- c(30.83, 58.67, 24.50, 27.83, 20.17)
Debt <- c(0.000, 4.460, 0.500, 1.540, 5.625)
YearsEmployed <- c(1.25, 3.04, 1.50, 3.75, 1.71)
Income <- c(0, 560, 824, 3, 0)
data_manual <- data.frame(Age, Debt, YearsEmployed, Income)

# Menghitung rata-rata
means <- colMeans(data_manual)

# Menghitung jumlah baris dan kolom
n <- nrow(data_manual)
p <- ncol(data_manual)

# Menghitung matriks varians-kovarians secara manual
cov_matrix_manual <- matrix(0, p, p)

for (i in 1:p) {
  for (j in 1:p) {
    cov_matrix_manual[i, j] <- sum((data_manual[, i] - means[i]) * (data_manual[, j] - means[j])) / (n - 1)
  }
}

cat("Variance-Covariance Matrix:\n")
## Variance-Covariance Matrix:
print(cov_matrix_manual)
##             [,1]        [,2]       [,3]        [,4]
## [1,]  231.361400    9.345663   6.999375   2046.9725
## [2,]    9.345663    6.187675   0.605225   -112.3137
## [3,]    6.999375    0.605225   1.182050    -42.7750
## [4,] 2046.972500 -112.313750 -42.775000 151957.8000
# Menghilangkan nilai NaN, NA, dan Inf
cov_matrix_manual[is.na(cov_matrix_manual) | is.nan(cov_matrix_manual) | is.infinite(cov_matrix_manual)] <- 0

# Menghitung eigenvalues dan eigenvectors menggunakan fungsi eigen()
eigen_result <- eigen(cov_matrix_manual)

# Menampilkan eigenvalues
lambda_manual <- eigen_result$values
cat("\nEigenvalues:\n")
## 
## Eigenvalues:
print(lambda_manual)
## [1] 1.519855e+05 2.046288e+02 5.515401e+00 8.810774e-01
# Menampilkan eigenvectors
eigenvectors_manual <- eigen_result$vectors
cat("\nEigenvectors:\n")
## 
## Eigenvectors:
print(eigenvectors_manual)
##               [,1]        [,2]         [,3]          [,4]
## [1,] -0.0134874524  0.99771613  0.055954477 -0.0353512228
## [2,]  0.0007381111  0.05468974 -0.997847290 -0.0361838792
## [3,]  0.0002807996  0.03730694 -0.034170588  0.9987194221
## [4,] -0.9999087283 -0.01340703 -0.001500938  0.0007305969
# Menghitung matriks korelasi
correlation_matrix_manual <- matrix(0, p, p)

for (i in 1:p) {
  for (j in 1:p) {
    if (cov_matrix_manual[i, i] != 0 && cov_matrix_manual[j, j] != 0) {
      correlation_matrix_manual[i, j] <- cov_matrix_manual[i, j] / (sqrt(cov_matrix_manual[i, i]) * sqrt(cov_matrix_manual[j, j]))
    } else {
      correlation_matrix_manual[i, j] <- 0
    }
  }
}

cat("\nCorrelation Matrix:\n")
## 
## Correlation Matrix:
print(correlation_matrix_manual)
##           [,1]       [,2]       [,3]       [,4]
## [1,] 1.0000000  0.2470022  0.4232489  0.3452272
## [2,] 0.2470022  1.0000000  0.2237872 -0.1158264
## [3,] 0.4232489  0.2237872  1.0000000 -0.1009278
## [4,] 0.3452272 -0.1158264 -0.1009278  1.0000000
nullspace_result <- nullspace(cov_matrix_manual)
cat("\nNull Space of the Variance-Covariance Matrix:\n")
## 
## Null Space of the Variance-Covariance Matrix:
print(nullspace_result)
## NULL