Rcpp is now imported. Previously compiled reducers failed in a fresh
session ("enterRNGScope not provided by package 'Rcpp'") and then aborted R.fmridataset and multidesign moved from Imports to Suggests (they are not
on CRAN); frame workflows check for them and fail informatively.options(fmrigds.threads),
FMRIGDS_THREADS, capped by OMP_THREAD_LIMIT).op_*,
add_op, gds_plan, digest_plan, provenance helpers), the *_eager
wrappers, and the plan() and space_voxels() aliases are no longer
exported. contrasts() gains a default method delegating to
stats::contrasts().\dontrun{}).alternative; two-sample
permutation tests always use the observed labelling, and both tests share
the (1 + #null >= obs) / (1 + n_null) convention.ols:voxelwise returns NA where fewer than p + 1 subjects remain instead
of reporting inference on zero residual degrees of freedom.df_coef:*): between-subject coefficients use N - rank(X_between).lmm:ri/lmm:ri_slope1 report real convergence; known-variance LMMs mark
non-positive-variance samples NA instead of aborting the run.meta:fe_reg honours min_subjects.map_to() and align() drop assays they do not propagate and re-derive
se/t/z/p, so downstream FDR no longer uses stale p-values.weights schemes now error instead of
silently running a different analysis.preview() and compute(block =) subset the space and row data to the
block; subset() works on realised GDS objects, sources and dense voxel
spaces; plan subjects()/contrasts() reflect subset and reduce steps.save_plan()/load_plan() round-trip vectors and map operators, verify the
stored digest, and refuse unserialisable custom functions..h5 stores auto-detect as the h5 adapter; adapter handles are
closed when probing fails.var, and expand ** recursively.axis=idx: for positions) and
leading-zero IDs are preserved.as_fmri_frame() regenerates stale projection metadata after reduce,
subset or reordering, and frame results comply with the current
fmridataset metadata contract.stability_replicates = 0 no longer crashes; exact_refit_n is honoured;
split stability and balance_contrasts are corrected; FE diagnostics use
the reducer's eligibility rules; report covariates show factor labels.interaction
Albers theme, restored theme activation in the fmristore article, and added
a post-build check that prevents article theme drift.fit_group() for bounded feature-block fitting directly from aligned
fmridataset estimate and sampling-variance assays.group_plan() objects and reducer-registry
frame kernels. Random-intercept known-variance and voxelwise OLS reducers now
share one bounded frame execution path, including explicit observation-ID
mapping after design-row omission and featurewise missing-data handling.fmri_frame objects
and added strict, reversible compatibility projections between complete
rectangular frames and the legacy feature by subject by contrast GDS cube.
Ragged or duplicate observation grids are rejected before assay reads.fmri_frame, and is
numerically checked against metafor::rma.mv().examine_group() as a terminal branch from subject-level plans. It
reports data validity, cross-fitted model surprise, deletion influence on
named estimands, and model-adjusted residual geometry without changing the
source analysis.tau2 random-effects screening and exact retained-subject refits.tr(W - W X (X' W X)^-1 X' W) and aligned R/C++ variance-validity rules.neuroim2,
neurotabs, and neurothresh development dependencies.write_nifti_assays() and write_out(format = "nifti") now preserve the
input spatial affine (spacing, origin, orientation) and write scl_slope = 1
for 3D outputs, instead of emitting an identity NeuroSpace. Exported group
maps are now geometrically correct without a manual re-stamp (#6).ols:voxelwise (and therefore one_sample()/group_ols()) now applies
per-sample listwise deletion for non-finite subjects: a single NaN subject
no longer poisons a voxel and an all-NaN subject no longer poisons the whole
map. Samples with too few finite observations are returned as NA, a new
n_obs assay reports the effective sample size, and a summary warning is
emitted when any sample is reduced (#7).one_sample() / group_ols(~ 1) now build the intercept-only design
automatically and no longer require col_data (#1).fixed/random/meta:*, or any weights = "1/var" reduction) now error with an actionable message when applied to a
beta-only GDS whose var assay is the synthetic unit-variance placeholder,
rather than silently producing meaningless group standard errors (#5).reduce() and the ols:voxelwise
topic), the single-contrast scope of gds_from_nifti_maps(), and the
filename pairing contract for nifti_source(beta=, se=) (#2, #3, #4).var = 1 assay with a warning, matching gds_from_neurovols() behavior for raw maps without uncertainty images.gds_from_nifti_maps() workflows and the recommendation to use ols:voxelwise rather than fixed/random-effects meta-analysis when the variance assay is synthetic.gds_from_nifti_maps() contrast relabeling for one-contrast raw-map layouts.gds_from_scalar_maps() / as_scalar_map_gds(), group_ols(), one_sample(), two_sample(), and write_nifti_assays() with a per-file manifest.fmrigds CLI into a plan-oriented interface with probe, plan, preview, run, and list commands.--save-plan / --load-plan, plus repeatable passthrough flags for adapter, reducer, post-hoc, and writer options.cli-workflows vignette covering the main command patterns and advanced control flags.lmm:ri and lmm:ri_slope1.lmm:ri_knownvar and lmm:ri_slope1_knownvar
reducers. They fit diag(var) + vc_resid * I + Z G Z', reject synthetic or
nonpositive variances, and are numerically checked against
metafor::rma.mv().theta_mode = "pooled" and theta_mode = "voxelwise" for shared- vs sample-specific variance parameters.contrast_data_cols, so contrast metadata can be extracted directly from tabular sources.lme4 parity, pooled/voxelwise equivalence for identical responses, and sample-specific theta recovery.lme4-backed restricted LMM parity tests plus a scheduled benchmark workflow.fmrigds name.gds(<data.frame>) now works via the tabular adapter (no temporary files needed).roi_col alias in tabular ingestion to treat ROI/parcel labels as the sample axis.list(beta=..., se=...), directories, or vectors; classification by filename patterns for beta vs se.as_plan.gds() so verbs like reduce()/posthoc() accept realized GDS directly.plan(x) for as_plan(x).as_gds() to accept 2-D inputs and standardized all assays to 3-D [sample × subject × contrast] shapes.var from se (and vice versa when required) in reducer/posthoc preflight.fdr:spatial) posthoc with group-wise Simes + weighted BH; documented usage and options.cov:<term_i>:<term_j>) while retaining attachments for metadata.subjects.gds_plan() and contrasts.gds_plan().nifti_source(beta=NULL, se=NULL) for explicit NIfTI list sources.Guidance for integrators (fmrireg):
gds(df, format="tabular", roi_col="roi") or as_gds(df, mapping=list(roi="roi", ...)) over temporary CSV writes.plan(gds_obj) or as_plan(gds_obj) to chain reduce()/posthoc() on realized results.gds-h5) with probe and block-read support so plans can lazily stream assays from disk.inst/schemas/hdf5.md and wired helpers for writing simple gds stores.compute() now supports sink = "h5" and write_out() queues, emitting provenance-aware gds-h5 stores (with tests)./gds/alignments, rehydrated at load time, and available via align(plan, "<name>").