## ----echo=F-------------------------------------------------------------------
knitr::opts_chunk$set(
  message = FALSE,
  warning = FALSE,
  error = FALSE,
  tidy = FALSE,
  cache = FALSE
)

## -----------------------------------------------------------------------------
library(stats4)
set.seed(17822)
y <- rpois(n = 40, lambda = 10)

nLL <- function(lambda) -sum(stats::dpois(y, lambda, log = TRUE))
fit0 <- mle(nLL, start = list(lambda = 5), nobs = NROW(y))
summary(fit0)
logLik(fit0)

## -----------------------------------------------------------------------------
y1 <- y[1:20]
y2 <- y[21:27]
y3 <- y[28:40]

## -----------------------------------------------------------------------------
library(homomorpheR)

local_nll <- function(data, lambda) {
    -sum(stats::dpois(data, lambda, log = TRUE))
}

## -----------------------------------------------------------------------------
cc <- openfhe.R::fhe_context("CKKS",
                           multiplicative_depth = 1L,
                           scaling_mod_size     = 50L,
                           batch_size           = 8L)
keys <- openfhe.R::key_gen(cc)

## -----------------------------------------------------------------------------
worker1 <- make_worker("S1", data = y1, contribution_fn = local_nll)
worker2 <- make_worker("S2", data = y2, contribution_fn = local_nll)
worker3 <- make_worker("S3", data = y3, contribution_fn = local_nll)
master  <- make_ckks_master("Master", crypto_context = cc, keypair = keys)
set_workers(master, list(worker1, worker2, worker3))

## -----------------------------------------------------------------------------
fit1 <- mle(function(lambda) master_aggregate(master, lambda),
            start = list(lambda = 5))
summary(fit1)
logLik(fit1)

