# neurostatx.statistics.harmonization

*module*

[View source](https://github.com/gagnonanthony/NeuroStatX/blob/main/neurostatx/statistics/harmonization.py#L1-L1)

## neurostatx.statistics.harmonization.neuroCombat

*function*

```python
def neuroCombat(dat, covars, batch_col, categorical_cols=None, continuous_cols=None, eb=True, parametric=True, mean_only=False, ref_batch=None)
```

Remove scanner/site effects from multi-site imaging data with ComBat.

**Parameters**

- `dat` (`DataFrame or np.array`) — Imaging features of shape (features, samples).
- `covars` (`DataFrame`) — Covariates including the batch/scanner column.
- `batch_col` (`str`) — Name of the batch (scanner) column in ``covars``.
- `categorical_cols` (`list`) (default: `None`) — Categorical covariate names to preserve. Defaults to None.
- `continuous_cols` (`list`) (default: `None`) — Continuous covariate names to preserve. Defaults to None.
- `eb` (`bool`) (default: `True`) — If True, use Empirical Bayes. Defaults to True.
- `parametric` (`bool`) (default: `True`) — If True, use parametric adjustments. Defaults to True.
- `mean_only` (`bool`) (default: `False`) — If True, adjust means only (no scaling). Defaults to False.
- `ref_batch` (`str`) (default: `None`) — Batch used as the reference level. Defaults to None.

**Returns**

- `result` (`dict`) — Mapping with ``data`` (harmonized array), ``estimates``, and ``info``.

**Examples**

```pycon
>>> import pandas as pd
>>> import numpy as np
>>> from neurostatx.statistics.harmonization import neuroCombat
>>> dat = np.random.RandomState(0).rand(4, 6)
>>> covars = pd.DataFrame({"scanner": [1, 1, 1, 2, 2, 2],
...                        "age": [20, 30, 40, 25, 35, 45]})
>>> out = neuroCombat(dat, covars, batch_col="scanner",
...                   continuous_cols=["age"])
>>> out["data"].shape
(4, 6)
```

[View source](https://github.com/gagnonanthony/NeuroStatX/blob/main/neurostatx/statistics/harmonization.py#L17-L197)
