Covariance Step
The covariance step computes standard errors, confidence intervals, and the correlation matrix of parameter estimates via the sandwich (R/S) estimator.
Enabling the covariance step
result = (
ModelBuilder()
...
.estimation(method="FOCE", interaction=True)
.covariance() # Enable with default R/S sandwich
.build()
.fit()
)
Or with explicit matrix choice:
.covariance(matrix="R") # R matrix only (inverse Hessian)
.covariance(matrix="SR") # Default: sandwich R/S estimator
Accessing results
cov = result.covariance_result
cov.se_theta # Standard errors of THETA, shape (n_theta,)
cov.se_omega_diag # Standard errors of diagonal OMEGA elements
cov.se_sigma_diag # Standard errors of diagonal SIGMA elements
cov.cov_matrix # Full covariance matrix of all free parameters
cov.cor_matrix # Correlation matrix
cov.condition_number # Condition number of R matrix
# 95% confidence intervals for THETA
import numpy as np
ci_low = result.theta_final - 1.96 * cov.se_theta
ci_high = result.theta_final + 1.96 * cov.se_theta
Output files
When running from a .ctl file the covariance step produces:
File |
Contents |
|---|---|
|
Covariance matrix (NONMEM 7.x format) |
|
Correlation matrix |
The R and S matrices
The sandwich estimator is:
Cov(θ) = R⁻¹ · S · R⁻¹
where:
R is the Hessian of the OFV with respect to free parameters (expected information matrix)
S is the cross-product of first derivatives (observed information matrix)
Both are computed by numerical finite differences in OpenPKPD.
Condition number
A high condition number (> 1000) indicates near-collinearity between parameters, typically caused by:
Overparameterisation (too many parameters for the data)
Correlation between THETA and OMEGA (model misspecification)
Starting values close to a boundary
Interpreting warnings
Warning |
Likely cause |
|---|---|
|
Convergence issue; OFV at a saddle point |
|
Near-collinear parameters |
|
Check parameter identifiability |