% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/get_B.R
\name{.get_B_gee_glm_woodbury}
\alias{.get_B_gee_glm_woodbury}
\title{Path 1b-Woodbury: Non-Gaussian GEE with Woodbury Acceleration}
\usage{
.get_B_gee_glm_woodbury(
  X,
  y,
  K,
  p_expansions,
  VhalfInv_perm,
  order_list,
  A,
  R_constraints,
  constraint_value_vectors,
  family,
  return_G_getB,
  iterate,
  tol,
  qp_Amat,
  qp_bvec,
  qp_meq,
  qp_score_function,
  observation_weights,
  Lambda,
  Lambda_block,
  unique_penalty_per_partition,
  L_partition_list,
  wb_decomp_init,
  wb_sqrt_init,
  glm_weight_function,
  schur_correction_function,
  need_dispersion_for_estimation,
  dispersion_function,
  VhalfInv,
  parallel_eigen,
  parallel_aga,
  parallel_matmult,
  cl,
  chunk_size,
  num_chunks,
  rem_chunks,
  ...
)
}
\arguments{
\item{X, y}{Lists of partition-specific design matrices and responses.}

\item{K, p_expansions}{Integer dimensions.}

\item{VhalfInv_perm}{\eqn{\mathbf{V}^{-1/2}} permuted to partition
ordering.}

\item{order_list, observation_weights}{Standard partition arguments.}

\item{A}{Constraint matrix (\eqn{P \times R}).}

\item{constraint_value_vectors}{Constraint RHS list encoding
\eqn{\mathbf{A}^{\top}\boldsymbol{\beta} = \mathbf{c}}.}

\item{family}{GLM family object.}

\item{return_G_getB}{Logical; return covariance components.}

\item{iterate}{Logical; if \code{TRUE}, iterate until convergence.}

\item{tol}{Convergence tolerance.}

\item{qp_Amat, qp_bvec, qp_meq}{QP constraint specification.}

\item{qp_score_function}{Score function for QP step.}

\item{Lambda, Lambda_block}{Shared and full penalty matrices.}

\item{unique_penalty_per_partition}{Logical.}

\item{L_partition_list}{Partition-specific penalty matrices.}

\item{wb_decomp_init}{Initial Woodbury decomposition from
\code{.woodbury_decompose_V} (used only to confirm that the
unweighted decomposition was valid; the weighted decomposition is
recomputed at each iteration).}

\item{wb_sqrt_init}{Initial half-sqrt components (unused; retained
for interface consistency with the Gaussian Woodbury path).}

\item{glm_weight_function}{Function computing GLM working weights.}

\item{schur_correction_function}{Function computing Schur corrections.}

\item{need_dispersion_for_estimation}{Logical.}

\item{dispersion_function}{Dispersion estimation function.}

\item{VhalfInv}{Inverse square root correlation matrix.}

\item{parallel_eigen, parallel_aga, parallel_matmult}{Logical flags.}

\item{cl, chunk_size, num_chunks, rem_chunks}{Parallel parameters.}

\item{...}{Passed to sub-functions.}
}
\value{
Same structure as \code{.get_B_gee_glm}.
}
\description{
Non-Gaussian correlated solve using the Woodbury factorization. At each
damped Newton step, the current weighted information matrix is split into
a block-diagonal part defining \eqn{\mathbf{G}_{\mathrm{on}}} and a
low-rank cross-partition part
\eqn{\mathbf{G}_{\mathrm{off}}^{-1} = \mathbf{E}\mathbf{J}\mathbf{E}^{\top}}.
The constrained step is then taken through
\code{.lagrangian_project_woodbury()}.
}
\details{
This function is standalone for the weighted Woodbury path: it carries
the iteration, repeatedly rebuilds the Woodbury factors at the current
working weights, and falls back to the dense correlated GLM solver if the
rank is too large or \eqn{\mathbf{F}} is not positive definite.
}
\keyword{internal}
