Membaca data

data <- read.csv("D:/dataset.csv")
Y <- data$satellites
Y
##   [1]  8  0  9  0  4  0  0  0  0  0  0  0 11  0 14  8  1  1  0  5  4  3  1  2  3
##  [26]  0  3  5  0  0  4  0  0  8  5  0  0  6  0  6  3  5  6  5  9  4  6  4  3  3
##  [51]  5  5  6  4  5 15  3  3  0  0  0  5  3  5  1  8 10  0  0  3  7  1  0  6  0
##  [76]  0  3  4  0  5  0  0  0  4  0  3  0  0  0  0  5  0  0  0  0  1  0  1  1  1
## [101]  1  1  1  4  1  1  1  1  2  4  3  6  0  2  2  0 12  0  5  6  6  2  0  2  3
## [126]  0  3  4  2  6  6  0  4 10  7  0  5  5  6  6  7  3  3  0  0  8  4  4 10  9
## [151]  4  0  0  0  0  4  0  2  0  4  4  3  8  0  7  0  0  2  3  4  0  0  0

Fungsi log-likelihood untuk distribusi Poisson

log_likelihood <- function(lambda, Y) {
  n <- length(Y)
  sum(Y * log(lambda) - lambda - lfactorial(Y))  # Menggunakan lfactorial untuk stabilitas numerik
}

Gradient (turunan pertama dari log-likelihood)

gradient <- function(lambda, Y) {
  sum(Y) / lambda - length(Y)  # dL/d(lambda)
}

Hessian (turunan kedua dari log-likelihood)

hessian <- function(lambda, Y) {
  -sum(Y) / lambda^2  # d²L/d(lambda²)
}

Algoritma Newton-Raphson untuk estimasi lambda

newton_raphson <- function(Y, lambda_init = 1, tol = 1e-6, max_iter = 100) {
  lambda <- lambda_init
  iter_results <- data.frame(Iteration = integer(0), Lambda = numeric(0), Gradient = numeric(0), Hessian = numeric(0))
  
  for (k in 1:max_iter) {
    grad <- gradient(lambda, Y)
    hess <- hessian(lambda, Y)
    if (hess == 0) {
      cat("Hessian nol pada iterasi ke-", k, ". Algoritma dihentikan.\n")
      break
    }
    
    lambda_new <- lambda - grad / hess
    
    iter_results <- rbind(iter_results, data.frame(Iteration = k, Lambda = lambda_new, Gradient = grad, Hessian = hess))
    
    if (abs(lambda_new - lambda) < tol) {
      cat("Konvergen pada iterasi ke-", k, "\n")
      break
    }
    
    lambda <- lambda_new
  }
  
  return(list(estimated_lambda = lambda_new, iter_results = iter_results))
}

Jalankan algoritma Newton-Raphson

result <- newton_raphson(Y)
## Konvergen pada iterasi ke- 7

Tampilkan estimasi parameter lambda

cat("Estimasi parameter lambda:", result$estimated_lambda, "\n")
## Estimasi parameter lambda: 2.919075

Tampilkan hasil semua iterasi

cat("\nHasil Iterasi:\n")
## 
## Hasil Iterasi:
print(result$iter_results)
##   Iteration   Lambda     Gradient    Hessian
## 1         1 1.657426 3.320000e+02 -505.00000
## 2         2 2.373779 1.316894e+02 -183.83289
## 3         3 2.817212 3.974091e+01  -89.62118
## 4         4 2.915521 6.255263e+00  -63.62861
## 5         5 2.919071 2.109223e-01  -59.40995
## 6         6 2.919075 2.565319e-04  -59.26552
## 7         7 2.919075 3.803677e-10  -59.26535