Skip to contents

Computes the mode (most likely value) of the marginal distribution of \(K_J\).

Usage

mode_K_marginal(
  J,
  a,
  b,
  logS,
  M = .QUAD_NODES_DEFAULT,
  M_verify = NULL,
  abs_tol = 1e-10,
  rel_tol = 1e-08,
  strict = FALSE
)

Arguments

J

Integer; sample size.

a

Numeric; shape parameter of Gamma prior (> 0).

b

Numeric; rate parameter of Gamma prior (> 0).

logS

Matrix; pre-computed log-Stirling matrix.

M

Integer; number of quadrature nodes (default: 80).

M_verify

Optional independent order satisfying the package verification rule (at least max(2*M, M+40)).

abs_tol, rel_tol

Non-negative selected-versus-verification tolerances.

strict

Logical; require successful higher-order verification.

Value

Integer; the value \(k\) that maximizes \(P(K_J = k \mid a, b)\), carrying the PMF's "marginal_metadata" attribute.

Details

The mode is always >= 1 since \(P(K_J = 0) = 0\). When M_verify is supplied, the selected and verification modes must be identical for converged mode metadata. Disagreement is explicit and never causes substitution of the verification-order mode.

Examples

logS <- compute_log_stirling(50)
mode_K_marginal(50, 1.5, 0.5, logS)
#> [1] 6
#> attr(,"marginal_metadata")
#> attr(,"marginal_metadata")$schema_version
#> [1] 1
#> 
#> attr(,"marginal_metadata")$engine
#> [1] "gauss-laguerre-log-mixture"
#> 
#> attr(,"marginal_metadata")$status
#> [1] "approximate"
#> 
#> attr(,"marginal_metadata")$reason
#> [1] "fixed_order_unverified"
#> 
#> attr(,"marginal_metadata")$support
#> lower upper 
#>     1    50 
#> 
#> attr(,"marginal_metadata")$returned_support
#> lower upper 
#>     0    50 
#> 
#> attr(,"marginal_metadata")$normalization
#> attr(,"marginal_metadata")$normalization$log_constant
#> [1] 0
#> 
#> attr(,"marginal_metadata")$normalization$probability_sum
#> [1] 1
#> 
#> attr(,"marginal_metadata")$normalization$underflow_zero_count
#> [1] 0
#> 
#> attr(,"marginal_metadata")$normalization$pre_rescale_probability_sum
#> [1] 1
#> 
#> attr(,"marginal_metadata")$normalization$linear_rescale
#> [1] 0
#> 
#> 
#> attr(,"marginal_metadata")$truncation
#> attr(,"marginal_metadata")$truncation$truncated
#> [1] FALSE
#> 
#> attr(,"marginal_metadata")$truncation$requested_mass
#> [1] 1
#> 
#> attr(,"marginal_metadata")$truncation$achieved_mass
#> [1] 1
#> 
#> attr(,"marginal_metadata")$truncation$omitted_mass
#> [1] 0
#> 
#> 
#> attr(,"marginal_metadata")$verification
#> attr(,"marginal_metadata")$verification$performed
#> [1] FALSE
#> 
#> attr(,"marginal_metadata")$verification$passed
#> [1] NA
#> 
#> attr(,"marginal_metadata")$verification$M_selected
#> [1] 80
#> 
#> attr(,"marginal_metadata")$verification$M_verification_required
#> [1] 160
#> 
#> attr(,"marginal_metadata")$verification$verification_available
#> [1] TRUE
#> 
#> attr(,"marginal_metadata")$verification$M_verification
#> [1] NA
#> 
#> attr(,"marginal_metadata")$verification$l1_difference
#> [1] NA
#> 
#> attr(,"marginal_metadata")$verification$max_difference
#> [1] NA
#> 
#> attr(,"marginal_metadata")$verification$tolerance
#> [1] NA
#> 
#> attr(,"marginal_metadata")$verification$l1_passed
#> [1] NA
#> 
#> attr(,"marginal_metadata")$verification$moment_consistency
#> attr(,"marginal_metadata")$verification$moment_consistency$passed
#> [1] NA
#> 
#> attr(,"marginal_metadata")$verification$moment_consistency$selected
#> NULL
#> 
#> attr(,"marginal_metadata")$verification$moment_consistency$verification
#> NULL
#> 
#> 
#> attr(,"marginal_metadata")$verification$absolute_tolerance
#> [1] 1e-10
#> 
#> attr(,"marginal_metadata")$verification$relative_tolerance
#> [1] 1e-08
#> 
#> 
#> attr(,"marginal_metadata")$selected
#> attr(,"marginal_metadata")$selected$schema_version
#> [1] 1
#> 
#> attr(,"marginal_metadata")$selected$distribution
#> [1] "Gamma(shape, rate)"
#> 
#> attr(,"marginal_metadata")$selected$shape
#> [1] 1.5
#> 
#> attr(,"marginal_metadata")$selected$rate
#> [1] 0.5
#> 
#> attr(,"marginal_metadata")$selected$M_selected
#> [1] 80
#> 
#> attr(,"marginal_metadata")$selected$M_verification
#> [1] NA
#> 
#> attr(,"marginal_metadata")$selected$normalization
#> [1] "log-sum-exp"
#> 
#> attr(,"marginal_metadata")$selected$normalized_weight_sum
#> [1] 1
#> 
#> attr(,"marginal_metadata")$selected$node_rule
#> attr(,"marginal_metadata")$selected$node_rule$schema_version
#> [1] 1
#> 
#> attr(,"marginal_metadata")$selected$node_rule$engine
#> [1] "golub-welsch-dense-eigen"
#> 
#> attr(,"marginal_metadata")$selected$node_rule$M_selected
#> [1] 80
#> 
#> attr(,"marginal_metadata")$selected$node_rule$alpha_param
#> [1] 0.5
#> 
#> attr(,"marginal_metadata")$selected$node_rule$cache_key
#> [1] "M=80|alpha=0.5"
#> 
#> attr(,"marginal_metadata")$selected$node_rule$cache_hit
#> [1] TRUE
#> 
#> attr(,"marginal_metadata")$selected$node_rule$zero_normalized_weights
#> [1] 29
#> 
#> attr(,"marginal_metadata")$selected$node_rule$normalized_weight_sum
#> [1] 1
#> 
#> 
#> 
#> attr(,"marginal_metadata")$verification_rule
#> NULL
#> 
#> attr(,"marginal_metadata")$discrete_verification
#> attr(,"marginal_metadata")$discrete_verification$mode
#> attr(,"marginal_metadata")$discrete_verification$mode$performed
#> [1] FALSE
#> 
#> attr(,"marginal_metadata")$discrete_verification$mode$passed
#> [1] NA
#> 
#> attr(,"marginal_metadata")$discrete_verification$mode$probabilities
#> NULL
#> 
#> attr(,"marginal_metadata")$discrete_verification$mode$selected
#> [1] 6
#> 
#> attr(,"marginal_metadata")$discrete_verification$mode$verification
#> NULL
#> 
#> 
#>