The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Package {DPrivStats}


Type: Package
Title: Differentially Private Classical Statistical Inference
Version: 0.1.0
Description: Implements differentially private (DP) versions of common classical statistical procedures, including descriptive statistics (mean, variance, quantiles, histograms), hypothesis tests (t-test, chi-square, Kolmogorov-Smirnov, one-way ANOVA), and regression (closed-form DP linear regression and DP-SGD for generalized linear models). Provides Laplace and Gaussian mechanisms with analytic calibration, exponential mechanism for medians, privacy-aware confidence intervals that account for both sampling and privacy noise, and privacy budget accounting via basic, advanced, and Renyi differential privacy (RDP) composition. Designed for official statistics and privacy-preserving data analysis research.
License: MIT + file LICENSE
Encoding: UTF-8
Depends: R (≥ 4.0.0)
Imports: stats, MASS, Rcpp
Suggests: testthat (≥ 3.0.0), knitr, rmarkdown, ggplot2
LinkingTo: Rcpp
VignetteBuilder: knitr
Config/testthat/edition: 3
URL: https://github.com/MukulBijalwan/DPrivStats
BugReports: https://github.com/MukulBijalwan/DPrivStats/issues
LazyData: true
Config/roxygen2/version: 8.1.0
NeedsCompilation: yes
Packaged: 2026-08-26 05:58:50 UTC; Admin
Author: Mukul Bijalwan [aut, cre]
Maintainer: Mukul Bijalwan <mukulbijalwan555@gmail.com>
Repository: CRAN
Date/Publication: 2026-09-08 13:30:29 UTC

DPrivStats: Differentially Private Classical Inference

Description

Implements differentially private versions of common statistical procedures with privacy budget accounting and privacy-aware confidence intervals.

Author(s)

Maintainer: Mukul Bijalwan mukulbijalwan555@gmail.com

Authors:


Advanced composition

Description

Computes the advanced-composition bound for k homogeneous releases:

\varepsilon' = \sqrt{2 k \log(1/\delta')} \varepsilon + k \varepsilon (e^{\varepsilon} - 1).

Usage

advanced_composition_epsilon(prior_epsilons, new_epsilon, delta_prime = 1e-06)

Arguments

prior_epsilons

Numeric vector of epsilons already spent.

new_epsilon

Epsilon of the new release.

delta_prime

Target overall failure parameter \delta' in (0,1).

Value

Total epsilon under advanced composition.


Analytic Gaussian mechanism

Description

Releases f(x) plus Gaussian noise calibrated with the analytic Gaussian mechanism (Balle & Wang, 2018).

Usage

analytic_gaussian_mechanism(f, x, epsilon, delta, l2_sensitivity)

Arguments

f

Function computing the target statistic on data x.

x

The private dataset.

epsilon

Privacy parameter epsilon (> 0).

delta

Privacy parameter delta in (0, 1).

l2_sensitivity

L2 sensitivity of f.

Value

The privatized value of f(x) (scalar or vector).


Analytic Gaussian calibration (Balle & Wang, 2018)

Description

Solves for the smallest sigma satisfying the analytic Gaussian mechanism privacy guarantee:

\Phi(\Delta/(2\sigma) - \epsilon\sigma/\Delta) - e^{\epsilon}\Phi(-\Delta/(2\sigma) - \epsilon\sigma/\Delta) \le \delta

via bisection. Always at least as tight as the classic calibration.

Usage

analytic_gaussian_sigma(epsilon, delta, l2_sensitivity)

Arguments

epsilon

Privacy parameter epsilon (> 0).

delta

Privacy parameter delta in (0, 1).

l2_sensitivity

L2 sensitivity of f.

Value

Scalar noise standard deviation.

References

Balle, B., & Wang, Y. (2018). Improving the Gaussian Mechanism for Differential Privacy via Analytic Concentration of the Gaussian Distribution. NeurIPS 2018.

Examples

analytic_gaussian_sigma(1.0, 1e-6, 1.0)
gaussian_sigma(1.0, 1e-6, 1.0) # looser

Asymptotic Kolmogorov distribution survival function

Description

Computes P(D_n \sqrt{n} > t) under the Kolmogorov-Smirnov null via the series 2 \sum_{k\ge1} (-1)^{k-1} e^{-2 k^2 t^2}.

Usage

asymptotic_ks_pvalue(q)

Arguments

q

Numeric vector of scaled KS statistics (>= 0).

Value

Tail probabilities in [0, 1].


Basic (sequential) composition

Description

Basic (sequential) composition

Usage

basic_composition(epsilons, deltas = rep(0, length(epsilons)))

Arguments

epsilons

Numeric vector of per-release epsilons.

deltas

Numeric vector of per-release deltas.

Value

List with total epsilon and delta.


Check whether a release fits in the remaining budget

Description

Check whether a release fits in the remaining budget

Usage

can_spend(budget, epsilon, delta = 0)

Arguments

budget

A "privacy_budget" object.

epsilon

Proposed epsilon spend.

delta

Proposed delta spend (default 0).

Value

Logical; TRUE if the proposed release fits.


Per-sample gradient clipping

Description

Clips each row of a gradient matrix to a maximum L2 norm: \tilde g_i = g_i \min(1, C/\|g_i\|_2). Used by DP-SGD.

Usage

clip_gradients(grads, max_grad_norm)

Arguments

grads

Numeric matrix (n x p) of per-sample gradients.

max_grad_norm

Positive clipping constant C.

Value

List with clipped (the clipped gradients) and norms (original norms).

Examples

g <- matrix(rnorm(30), 10, 3)
clip_gradients(g, 1)$norms

Compare composition rules over a workflow

Description

Given a sequence of per-release epsilons, returns total privacy cost under basic, advanced, and RDP composition — useful for the research question of which rule dominates in practice.

Usage

compare_composition(epsilons, delta = 1e-06)

Arguments

epsilons

Numeric vector of per-release epsilons.

delta

Target delta in (0, 1).

Value

Data frame with one row per composition rule and total epsilon.

Examples

compare_composition(c(1, 0.5, 0.5, 0.25), 1e-6)

Compare utility of non-private and private fits

Description

Fits dp_lm at each epsilon on an epsilon grid and reports MSE of coefficients relative to the ordinary least squares fit.

Usage

compare_utility(
  formula,
  data,
  epsilon_grid,
  delta = 1e-06,
  bounds = NULL,
  n_reps = 10
)

Arguments

formula

Model formula.

data

Data frame.

epsilon_grid

Numeric vector of epsilon values to compare.

delta

Delta for Gaussian mechanism.

bounds

Bounds list passed to dp_lm.

n_reps

Number of repetitions per epsilon (default 10).

Value

Data frame with columns epsilon, rep, mse_coef, max_abs_error.

Examples


set.seed(1)
d <- data.frame(x = rnorm(200)); d$y <- 1 + d$x + rnorm(200)
compare_utility(y ~ x, d, c(0.5, 2), 1e-6, list(y = c(-15, 15)),
                n_reps = 3)


Confint interface for dp_lm objects

Description

Convenience wrapper calling dp_confint with default settings.

Usage

## S3 method for class 'dp_lm'
confint(object, parm, level = 0.95, method = "analytical", B = 200, ...)

Arguments

object

A dp_lm object.

parm

Coefficient indices or names (default all).

level

Confidence level (default 0.95).

method

One of "analytical", "parametric_bootstrap", "privacy_aware_bootstrap".

B

Number of bootstrap replicates for bootstrap methods.

...

Additional arguments (ignored).

Value

Numeric matrix with columns estimate, lower, upper.


Fast per-sample gradient clipping (C++)

Description

Clips rows of a gradient matrix to a maximum L2 norm; equivalent to clip_gradients but implemented in C++.

Usage

cpp_clip_gradients(grads, max_grad_norm)

Arguments

grads

Numeric matrix of per-sample gradients.

max_grad_norm

Positive clipping constant.

Value

Numeric matrix of clipped gradients.

Examples

g <- matrix(rnorm(30), 10, 3)
cpp_clip_gradients(g, 1)

Fast Laplace sampling (C++)

Description

Vectorized inverse-CDF Laplace sampler implemented in C++ via Rcpp. Equivalent to rlaplace but faster for large draws.

Usage

cpp_rlaplace(n, scale = 1)

Arguments

n

Number of draws.

scale

Scale parameter (positive).

Value

Numeric vector of length n.

Examples

cpp_rlaplace(5, 1.0)

DP one-way ANOVA F-test

Description

Privatizes group counts, means and variances (equal budget splits) and computes the one-way ANOVA F statistic from privatized summaries only.

Usage

dp_anova(formula, data, epsilon, bounds, delta = NULL)

Arguments

formula

Formula of the form response ~ group.

data

Data frame.

epsilon

Total privacy parameter epsilon (> 0).

bounds

Common bounds c(L, U) assumed known for both samples.

delta

Optional Gaussian-mechanism delta; if NULL Laplace is used.

Value

An object of class c("dp_htest", "htest").

Examples

dat <- data.frame(y = c(rnorm(60), rnorm(60, 1)),
                  g = factor(rep(c("A", "B"), each = 60)))
dp_anova(y ~ g, dat, 2.0, bounds = c(-5, 5))

DP chi-square test of independence

Description

Privatizes each cell of a contingency table with Laplace noise (sensitivity 1 per cell), truncates negative counts (post-processing), then computes the standard chi-square test on the privatized table.

Usage

dp_chisq_test(table, epsilon)

Arguments

table

A numeric matrix or table of non-negative counts.

epsilon

Privacy parameter epsilon (> 0).

Value

An object of class c("dp_htest", "htest") wrapping a standard chi-square test on the privatized table.

Examples

tab <- matrix(c(30, 20, 10, 40), nrow = 2)
dp_chisq_test(tab, 1.0)

Privacy-aware confidence intervals

Description

Confidence intervals for dp_lm coefficients that account for both sampling variability and privacy noise.

Usage

dp_confint(
  object,
  parm,
  level = 0.95,
  method = c("analytical", "parametric_bootstrap", "privacy_aware_bootstrap"),
  B = 200,
  ...
)

Arguments

object

A dp_lm object.

parm

Coefficient indices or names (default all).

level

Confidence level (default 0.95).

method

One of "analytical", "parametric_bootstrap", "privacy_aware_bootstrap".

B

Number of bootstrap replicates for bootstrap methods.

...

Additional arguments (ignored).

Details

Three methods:

"analytical"

Normal intervals using \sqrt{\text{diag}(\Sigma_{\text{sampling}}) + v_{\text{privacy}}}, where privacy noise variance is known exactly from the mechanism calibration.

"parametric_bootstrap"

Simulates \beta^* \sim N(\hat\beta_{\text{priv}}, \Sigma_{\text{sampling}}) and adds fresh privacy noise; returns percentile intervals.

"privacy_aware_bootstrap"

Resamples the data and refits the DP estimator on each resample with per-resample budget \epsilon / \sqrt{B} (advanced composition heuristic); returns percentile intervals. Most conservative but computationally heavy.

Value

Numeric matrix of class c("dp_confint", "matrix") with columns estimate, lower, upper.

Examples

set.seed(11)
d <- data.frame(x = rnorm(300))
d$y <- 1 + 2 * d$x + rnorm(300)
fit <- dp_lm(y ~ x, d, epsilon = 2.0, delta = 1e-6,
             bounds = list(y = c(-20, 20)))
dp_confint(fit)

DP-SGD for generalized linear models

Description

Fits a GLM with differentially private stochastic gradient descent: per-sample gradients are clipped to max_grad_norm, averaged, and Gaussian noise is added at each iteration. Privacy is accounted with the advanced-composition heuristic over n_iter iterations.

Usage

dp_glm(
  formula,
  data,
  family = stats::gaussian(),
  epsilon,
  delta,
  max_grad_norm = 1,
  n_iter = 1000,
  lr = 0.01,
  batch_size = NULL,
  bounds = NULL
)

Arguments

formula

Model formula.

data

Data frame.

family

A GLM family (e.g. binomial()).

epsilon

Privacy parameter epsilon (> 0).

delta

Privacy parameter delta in (0, 1); required.

max_grad_norm

Per-sample gradient clipping norm C (> 0).

n_iter

Number of SGD iterations.

lr

Learning rate.

batch_size

Mini-batch size (default full batch).

bounds

Named list: bounds$y = c(L_y, U_y) for the response (required); optional bounds$x_norm giving a priori bound C on row norms of the design matrix when the design itself is private.

Value

A list of class "dp_glm" with coefficients, epsilon, delta, and convergence details.

Examples

set.seed(12)
d <- data.frame(x = rnorm(400))
d$y <- rbinom(400, 1, plogis(0.5 * d$x))
fit <- dp_glm(y ~ x, d, binomial(), epsilon = 2.0, delta = 1e-6,
              bounds = list(y = c(0, 1)))
fit$coefficients

DP histogram

Description

Releases bin counts of a bounded variable using Laplace noise with sensitivity 1 per bin, followed by non-negativity post-processing and optional normalization to probabilities.

Usage

dp_histogram(x, epsilon, breaks = NULL, normalize = FALSE)

Arguments

x

Numeric vector (NAs ignored).

epsilon

Privacy parameter epsilon (> 0).

breaks

Numeric vector of cut points (monotone). Defaults to deciles of the observed data.

normalize

Logical; return relative frequencies instead of counts.

Value

An object of class dp_estimate with element estimate (named numeric vector of privatized bin counts/proportions).

Examples

set.seed(4)
fit <- dp_histogram(rnorm(500), 1.0, breaks = seq(-3, 3, by = 1))
fit$estimate

DP Kolmogorov-Smirnov test

Description

Releases the ECDFs of two bounded samples on a common grid under DP (ECDF sensitivity 1/n per sample; budget split evenly between the two samples) and computes the KS statistic from the privatized ECDFs.

Usage

dp_ks_test(
  x,
  y,
  epsilon,
  bounds = c(min(c(x, y), na.rm = TRUE), max(c(x, y), na.rm = TRUE)),
  n_grid = 100
)

Arguments

x, y

Numeric vectors (NAs ignored).

epsilon

Total privacy parameter epsilon (> 0).

bounds

Common bounds c(L, U) assumed known for both samples.

n_grid

Number of grid points for ECDF evaluation (default 100).

Value

An object of class c("dp_htest", "htest").

Examples

set.seed(8)
dp_ks_test(rnorm(150), rnorm(150, 1), 1.0, bounds = c(-6, 6))

Differentially private linear regression

Description

Fits OLS on clipped data and releases the coefficient vector under the Gaussian mechanism, calibrated to the L2 sensitivity of \hat\beta = (X^\top X)^{-1} X^\top y given response bounds bounds$y (and optionally a bound C on row norms of X; see dp_lm_sensitivity).

Usage

dp_lm(
  formula,
  data,
  epsilon,
  delta,
  bounds = NULL,
  assume_public_design = TRUE
)

Arguments

formula

Model formula.

data

Data frame.

epsilon

Privacy parameter epsilon (> 0).

delta

Privacy parameter delta in (0, 1); required.

bounds

Named list: bounds$y = c(L_y, U_y) for the response (required); optional bounds$x_norm giving a priori bound C on row norms of the design matrix when the design itself is private.

assume_public_design

Logical; see dp_lm_sensitivity.

Value

An object of class c("dp_lm", "lm") with privatized coefficients, residuals and fitted values computed from the private fit, plus elements epsilon, delta, noise_variance (privacy noise variance per coefficient), and sampling_vcov (the non-private sampling covariance estimate used by dp_confint).

Examples

set.seed(11)
d <- data.frame(x = rnorm(300), z = rnorm(300))
d$y <- 1 + 2 * d$x - d$z + rnorm(300)
fit <- dp_lm(y ~ x + z, d, epsilon = 2.0, delta = 1e-6,
             bounds = list(y = c(-30, 30)))
coef(fit)

Global L2 sensitivity of OLS coefficients

Description

Under the assumption that the design matrix X is public/fixed and the response is bounded (y_i \in [L_y, U_y]), neighbouring datasets differ in one response value only. With C = \max_i \|x_i\|_2 and D = U_y - L_y,

\Delta_2(\hat\beta) = C \cdot D / \lambda_{\min}(X^\top X).

Usage

dp_lm_sensitivity(
  X,
  y_bounds,
  x_norm_bound = NULL,
  assume_public_design = TRUE
)

Arguments

X

Numeric model matrix (n x p).

y_bounds

Bounds c(L_y, U_y) on the response.

x_norm_bound

Optional bound C = \max_i \|x_i\|_2. If NULL it is computed from X (use this when X is public). When the design is private, supply an a priori bound instead.

assume_public_design

Logical; if TRUE (default) the sensitivity accounts only for changes in y.

Details

If the design matrix itself is bounded per-row by x_norm_bound and treated as private, a conservative multiplicative factor of 3 is applied to account for simultaneous changes in X'X and X'y (documented heuristic; see vignette "regression-guide" for discussion).

Value

Scalar L2 sensitivity of the OLS coefficient vector.

Examples

X <- cbind(1, 1:10)
dp_lm_sensitivity(X, y_bounds = c(0, 10))

DP mean

Description

Differentially private sample mean of a bounded variable. Data are clipped to bounds before the statistic is computed.

Usage

dp_mean(
  x,
  epsilon,
  bounds = range(x, na.rm = TRUE),
  mechanism = c("laplace", "gaussian", "analytic_gaussian"),
  delta = NULL
)

Arguments

x

Numeric vector (NAs ignored).

epsilon

Privacy parameter epsilon (> 0).

bounds

Bounds c(L, U) assumed known; data are clipped to them. Defaults to the observed range (use a priori bounds in practice).

mechanism

One of "laplace", "gaussian", "analytic_gaussian".

delta

Required (in (0,1)) when a Gaussian mechanism is used.

Value

An object of class dp_estimate.

Examples

set.seed(1)
dp_mean(rnorm(500), 1.0, bounds = c(-5, 5))$estimate

DP median via the exponential mechanism

Description

Releases a differentially private estimate of the median using the exponential mechanism over a grid of candidate values, with score s(t; x) = -|\#\{i : x_i \le t\}| - n/2| which has L1 sensitivity 1.

Usage

dp_median(x, epsilon, bounds, n_bins = 1000)

Arguments

x

Numeric vector (may contain NAs, ignored).

epsilon

Privacy parameter epsilon (> 0).

bounds

Bounds c(L, U) assumed known for the data.

n_bins

Number of candidate grid points (default 1000).

Value

A list of class dp_estimate with element estimate.

Examples

set.seed(42)
fit <- dp_median(rnorm(200), 1.0, bounds = c(-5, 5))
fit$estimate

DP quantile via the exponential mechanism

Description

Releases arbitrary quantiles probs of a bounded variable using the exponential mechanism with score based on distance from the target order statistic. Each quantile receives budget \epsilon / |\text{probs}|.

Usage

dp_quantile(x, epsilon, bounds, probs = 0.5, n_bins = 1000)

Arguments

x

Numeric vector (may contain NAs, ignored).

epsilon

Privacy parameter epsilon (> 0).

bounds

Bounds c(L, U) assumed known for the data.

probs

Numeric vector of probabilities in (0, 1).

n_bins

Number of candidate grid points (default 1000).

Value

An object of class dp_estimate; estimate is a named vector with one entry per probability in probs.

Examples

set.seed(3)
dp_quantile(rnorm(200), 1.0, bounds = c(-5, 5), probs = c(.25, .5, .75))

DP two-sample t-test

Description

Differentially private two-sample t-test. The privacy budget is split evenly across the DP group counts, means and variances; the test statistic is computed entirely by post-processing of privatized quantities.

Usage

dp_t_test(
  x,
  y,
  epsilon,
  bounds = c(min(c(x, y), na.rm = TRUE), max(c(x, y), na.rm = TRUE)),
  alternative = c("two.sided", "less", "greater"),
  delta = NULL
)

Arguments

x, y

Numeric vectors (NAs ignored).

epsilon

Total privacy parameter epsilon (> 0).

bounds

Common bounds c(L, U) assumed known for both samples.

alternative

Character, "two.sided", "less" or "greater".

delta

Optional Gaussian-mechanism delta; if NULL Laplace is used.

Value

An object of class c("dp_htest", "htest") with elements statistic, estimate, std.error, p.value, alternative, and epsilon.

Examples

set.seed(7)
dp_t_test(rnorm(200), rnorm(200, 0.5), 1.0, bounds = c(-5, 5))

Utility diagnostics for DP estimators

Description

Computes bias, mean squared error, RMSE, and (optionally) CI coverage of a DP estimator relative to its non-private counterpart or a known truth, across Monte Carlo replicates.

Usage

dp_utility_diagnostics(estimates, truth, ci_matrix = NULL)

Arguments

estimates

Numeric vector of estimates from repeated runs.

truth

Scalar true value (or the non-private estimate).

ci_matrix

Optional B x 2 matrix of interval endpoints (lower, upper) aligned with estimates, for coverage.

Value

List with bias, mse, rmse and optional coverage.

Examples

ests <- replicate(100, dp_mean(rnorm(200), 1.0, c(-5, 5))$estimate)
dp_utility_diagnostics(ests, 0)

DP variance

Description

Differentially private variance of a bounded variable, released as the DP second moment minus the square of the DP mean under a split budget (\epsilon/2 each), with post-processing to ensure non-negativity.

Usage

dp_variance(
  x,
  epsilon,
  bounds = range(x, na.rm = TRUE),
  mechanism = c("laplace", "gaussian"),
  delta = NULL
)

Arguments

x

Numeric vector (NAs ignored).

epsilon

Privacy parameter epsilon (> 0).

bounds

Bounds c(L, U) assumed known; data are clipped to them. Defaults to the observed range (use a priori bounds in practice).

mechanism

One of "laplace", "gaussian", "analytic_gaussian".

delta

Privacy parameter for Gaussian mechanisms (if chosen).

Value

An object of class dp_estimate.

Examples

set.seed(2)
dp_variance(runif(300), 1.0, bounds = c(0, 1))$estimate

Empirical delta from simulated privacy losses

Description

Estimates the delta needed so that P(L > \epsilon) \le \delta given a sample of simulated losses.

Usage

empirical_delta_from_losses(losses, epsilon)

Arguments

losses

Numeric vector of simulated privacy losses.

epsilon

Privacy parameter threshold.

Value

Empirical tail probability.

Examples

empirical_delta_from_losses(simulate_gaussian_losses(1000, 5), 2.0)

Convert epsilon-DP to zCDP (RDP) parameter

Description

An (epsilon, 0)-DP mechanism satisfies (epsilon^2 / 2)-zCDP (Bun & Steinke, 2016).

Usage

epsilon_to_rdp(epsilon)

Arguments

epsilon

Pure-DP epsilon.

Value

zCDP rho parameter.


Census-like example microdata

Description

A synthetic census-style microdata set of 2000 individuals generated for use in examples and vignettes. Income is a linear function of education, age, hours worked, region, plus noise; it is not real personal data.

Usage

example_microdata

Format

A data frame with 2000 rows and 5 variables:

education

Years of education (integer, 0-20).

age

Age in years (integer, 18-80).

hours

Weekly working hours (numeric, 0-80).

region

Factor with levels North, South, East, West.

income

Annual income (numeric, non-negative).

Source

Simulated; see data-raw/generate_data.R.


Exponential mechanism sampler

Description

Samples a candidate from candidates with probability proportional to \exp(\epsilon \, s(c) / (2 \Delta s)), where \Delta s is the sensitivity of the score function.

Usage

exponential_mechanism(candidates, scores, epsilon, score_sensitivity = 1)

Arguments

candidates

Numeric vector of candidate outputs.

scores

Numeric vector of scores (higher is better).

epsilon

Privacy parameter epsilon (> 0).

score_sensitivity

L1 sensitivity of the score function.

Value

One sampled candidate.

Examples

exponential_mechanism(1:10, -(1:10 - 5)^2, 1.0, 1)

Gaussian mechanism

Description

Releases f(x) plus Gaussian noise using the classic \sigma = \Delta_2 \sqrt{2 \log(1.25/\delta)} / \epsilon calibration for (epsilon, delta)-DP.

Usage

gaussian_mechanism(f, x, epsilon, delta, l2_sensitivity)

Arguments

f

Function computing the target statistic on data x.

x

The private dataset.

epsilon

Privacy parameter epsilon (> 0).

delta

Privacy parameter delta in (0, 1).

l2_sensitivity

L2 sensitivity of f.

Value

The privatized value of f(x) (scalar or vector).

Examples

gaussian_mechanism(sum, c(1:100), 1.0, 1e-6, l2_sensitivity = 100)

Classic Gaussian noise scale

Description

Computes the standard deviation used by the classic Gaussian mechanism.

Usage

gaussian_sigma(epsilon, delta, l2_sensitivity)

Arguments

epsilon

Privacy parameter epsilon (> 0).

delta

Privacy parameter delta in (0, 1).

l2_sensitivity

L2 sensitivity of f.

Value

Scalar noise standard deviation.


Laplace mechanism

Description

Releases f(x) plus Laplace noise calibrated to the L1 sensitivity, providing pure epsilon-DP.

Usage

laplace_mechanism(f, x, epsilon, l1_sensitivity)

Arguments

f

Function computing the target statistic on data x.

x

The private dataset.

epsilon

Privacy parameter epsilon (> 0).

l1_sensitivity

L1 sensitivity of f.

Value

The privatized value of f(x) (scalar or vector).

Examples

laplace_mechanism(mean, c(1:100), 1.0, l1_sensitivity = 100 / 99)

Privacy loss random variables for the Laplace mechanism

Description

The privacy loss of one Laplace release with scale s is L = |d|/s with d \sim \mathrm{Laplace}(0, s), i.e. L \sim \mathrm{Exp}(\epsilon) when s = \Delta_1/\epsilon. These helpers expose its tail probabilities and quantiles for PLRV-based accounting and simulation studies.

Usage

laplace_plr_tail(t, epsilon)

laplace_plr_quantile(p, epsilon)

Arguments

t

Numeric vector of thresholds on the privacy loss.

epsilon

Privacy parameter (> 0).

p

Numeric vector of probabilities in [0, 1].

Value

Tail probabilities P(L > t) (laplace_plr_tail) or quantiles at probabilities p (laplace_plr_quantile).

Examples

laplace_plr_tail(3, 1.0) # exp(-3)

Create a privacy budget object

Description

An S3 object tracking cumulative privacy loss across multiple DP releases under basic, advanced, or Renyi DP (RDP) composition.

Usage

new_privacy_budget(
  epsilon,
  delta = 1e-06,
  composition = c("basic", "advanced", "rdp")
)

Arguments

epsilon

Total epsilon available (> 0).

delta

Total delta available (default 1e-6; must be in (0,1)).

composition

One of "basic", "advanced", "rdp".

Value

An object of class "privacy_budget".

Examples

b <- new_privacy_budget(3.0, 1e-6)
b <- spend(b, 1.0, description = "DP mean")
b$epsilon_spent

Print method for dp_confint objects

Description

Print method for dp_confint objects

Usage

## S3 method for class 'dp_confint'
print(x, digits = 4, ...)

Arguments

x

A dp_confint matrix.

digits

Number of digits to print.

...

Additional arguments (ignored).

Value

The object x, invisibly.


Print method for dp_estimate objects

Description

Print method for dp_estimate objects

Usage

## S3 method for class 'dp_estimate'
print(x, digits = 4, ...)

Arguments

x

A dp_estimate object.

digits

Number of digits to print.

...

Additional arguments (ignored).

Value

The object x, invisibly.


Print method for dp_glm objects

Description

Print method for dp_glm objects

Usage

## S3 method for class 'dp_glm'
print(x, ...)

Arguments

x

A dp_glm object.

...

Additional arguments (ignored).

Value

The object x, invisibly.


Print method for dp_htest objects

Description

Print method for dp_htest objects

Usage

## S3 method for class 'dp_htest'
print(x, digits = 4, ...)

Arguments

x

A dp_htest object.

digits

Number of digits to print.

...

Additional arguments (ignored).

Value

The object x, invisibly.


Print method for dp_lm objects

Description

Print method for dp_lm objects

Usage

## S3 method for class 'dp_lm'
print(x, ...)

Arguments

x

A dp_lm object.

...

Additional arguments (ignored).

Value

The object x, invisibly.


Print method for privacy_budget objects

Description

Print method for privacy_budget objects

Usage

## S3 method for class 'privacy_budget'
print(x, ...)

Arguments

x

A "privacy_budget" object.

...

Additional arguments (ignored).

Value

The object x, invisibly.


Print method for summary.dp_lm objects

Description

Print method for summary.dp_lm objects

Usage

## S3 method for class 'summary.dp_lm'
print(x, digits = 4, ...)

Arguments

x

A summary.dp_lm object.

digits

Number of digits to print.

...

Additional arguments (ignored).

Value

The object x, invisibly.


RDP composition

Description

Composes a sequence of pure-DP releases via the zCDP/RDP accumulator and converts the result back to (epsilon, delta)-DP. Typically much tighter than basic composition for many small releases.

Usage

rdp_composition(epsilons, delta = 1e-06)

Arguments

epsilons

Numeric vector of per-release epsilons.

delta

Target delta in (0, 1).

Value

List with elements rho and epsilon.

Examples

rdp_composition(rep(0.1, 20), 1e-6)$epsilon
basic_composition(rep(0.1, 20))$epsilon

Convert zCDP (RDP) parameter to (epsilon, delta)-DP

Description

Uses \varepsilon = \rho + \sqrt{2 \rho \log(1/\delta)}.

Usage

rdp_to_epsilon(rho, delta)

Arguments

rho

zCDP parameter (>= 0).

delta

Target delta in (0, 1).

Value

Equivalent epsilon.


Sample Laplace noise

Description

Draws n independent Laplace(0, scale) deviates using inverse-CDF sampling with base R's uniform generator.

Usage

rlaplace(n, location = 0, scale = 1)

Arguments

n

Number of draws.

location

Location parameter (default 0).

scale

Scale parameter; must be positive.

Value

Numeric vector of length n.

Examples

rlaplace(5, 0, 1)

Simulate synthetic microdata

Description

Generates a census-like dataset with correlated predictors used in examples and vignettes: income as a function of education, age, and hours worked.

Usage

simulate_data(n = 1000)

Arguments

n

Sample size (default 1000).

Value

A data frame with columns education (years, 0-20), age (18-80), hours (weekly hours, 0-80), income (annual income, >= 0), and region (factor).

Examples

head(simulate_data(5))

Simulate privacy losses of Gaussian releases

Description

Draws the realized privacy loss L = z^2/(2\sigma^2) + ... approximated by L = |z|/\sigma + 1/(2\sigma^2) for two neighbouring datasets under the Gaussian mechanism, useful for empirical delta estimation.

Usage

simulate_gaussian_losses(n, sigma)

Arguments

n

Number of draws.

sigma

Noise standard deviation.

Value

Numeric vector of simulated losses.

Examples

l <- simulate_gaussian_losses(1000, 5); mean(l)

Spend privacy budget

Description

Records one DP release against the budget and updates the cumulative privacy loss under the configured composition rule.

Usage

spend(budget, epsilon, delta = 0, description = "")

Arguments

budget

A "privacy_budget" object.

epsilon

Epsilon spent by this release (> 0).

delta

Delta spent by this release (default 0).

description

Optional text label.

Value

The updated "privacy_budget" object (invisibly also sets remaining_epsilon).

See Also

new_privacy_budget


Sensitivity of common bounded-data statistics

Description

Computes the L1/L2 sensitivities under bounded-DP (neighbouring datasets differ in one record, same size n) for a record x_i \in [L, U].

Usage

stat_sensitivities(bounds, n)

Arguments

bounds

Numeric vector c(L, U) giving the data bounds.

n

Sample size (positive integer).

Value

A list with elements l1 and l2, each a named numeric vector of sensitivities for "mean", "sum", "count", "variance" and "ecdf".

Examples

sens <- stat_sensitivities(c(0, 500000), 1000)
sens$l1["mean"]

Summarize a dp_lm fit

Description

Prints privatized coefficients with analytical privacy-aware standard errors and confidence intervals.

Usage

## S3 method for class 'dp_lm'
summary(object, level = 0.95, ...)

Arguments

object

A dp_lm object.

level

Confidence level (default 0.95).

...

Additional arguments (ignored).

Value

Invisibly, the list with coefficients table.


Validate confidence-interval coverage by Monte Carlo

Description

Repeatedly simulates data, fits dp_lm, builds privacy-aware CIs with dp_confint, and reports empirical coverage and mean interval width against the true generating coefficients.

Usage

validate_coverage(
  formula,
  true_betas,
  sigma = 1,
  data_gen = NULL,
  n = 500,
  n_sims = 200,
  epsilon = 1,
  delta = 1e-06,
  y_bounds = c(-50, 50),
  confint_method = "analytical",
  level = 0.95
)

Arguments

formula

Model formula matching true_betas names.

true_betas

Named numeric vector of true coefficients.

sigma

Error standard deviation of the simulated model.

data_gen

Function returning a data frame with columns needed by formula; defaults to a Gaussian design built from n.

n

Sample size per replicate (used by the default generator).

n_sims

Number of Monte Carlo replicates.

epsilon

Privacy parameter epsilon.

delta

Privacy parameter delta.

y_bounds

Response bounds passed to dp_lm.

confint_method

Method passed to dp_confint.

level

Confidence level.

Value

List with coverage_rate, mean_ci_width, target_coverage, n_sims.

Examples

set.seed(1)
validate_coverage(y ~ x, c(`(Intercept)` = 1, x = 2), sigma = 1,
                  n = 200, n_sims = 30, epsilon = 3, delta = 1e-6,
                  y_bounds = c(-15, 15))

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.