diff --git a/fitgrid/utils/__init__.py b/fitgrid/utils/__init__.py
index 404d977..2328b30 100644
--- a/fitgrid/utils/__init__.py
+++ b/fitgrid/utils/__init__.py
@@ -1,1 +1,1 @@
-from . import lmer
+from . import lm, lmer
diff --git a/fitgrid/utils/lm.py b/fitgrid/utils/lm.py
new file mode 100644
index 0000000..60ecd54
--- /dev/null
+++ b/fitgrid/utils/lm.py
@@ -0,0 +1,20 @@
+import pandas as pd
+import patsy
+from tqdm import tqdm
+from statsmodels.stats.outliers_influence import (
+    variance_inflation_factor as vif,
+)
+
+
+def get_vifs(epochs, RHS):
+    def get_single_vif(group, RHS):
+        dmatrix = patsy.dmatrix(formula_like=RHS, data=group)
+        vifs = {
+            name: vif(dmatrix, index)
+            for name, index in dmatrix.design_info.column_name_indexes.items()
+        }
+        return pd.Series(vifs)
+
+    tqdm.pandas(desc="Time")
+
+    return epochs._snapshots.progress_apply(get_single_vif, RHS=RHS)

add VIF calculator
diff --git a/tests/test_utils_lm.py b/tests/test_utils_lm.py
new file mode 100644
index 0000000..5df68a6
--- /dev/null
+++ b/tests/test_utils_lm.py
@@ -0,0 +1,8 @@
+from .context import fitgrid
+
+
+def test_smoke_get_vifs():
+
+    epochs = fitgrid.generate()
+    RHS = 'continuous + categorical'
+    fitgrid.utils.lm.get_vifs(epochs, RHS)

pip install -e .[dev]
parse_log_pytest
pytest
pytest
apt-get update apt-get install -y gcc git ssh-client
3.11
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
blosc2==3.2.1
certifi==2025.1.31
charset-normalizer==3.4.1
contourpy==1.3.1
cycler==0.12.1
-e git+https://github.com/kutaslab/fitgrid.git@a2bd1dbc2c0b118fe32880910a55b29a9bf2101b#egg=fitgrid
fonttools==4.56.0
idna==3.10
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
kiwisolver==1.4.8
matplotlib==3.10.1
msgpack==1.1.0
ndindex==1.9.2
numexpr==2.10.2
numpy==2.2.4
packaging @ file:///croot/packaging_1734472117206/work
pandas==2.2.3
patsy==1.0.1
pillow==11.1.0
platformdirs==4.3.7
pluggy @ file:///croot/pluggy_1733169602837/work
py-cpuinfo==9.0.0
pyparsing==3.2.3
pytest @ file:///croot/pytest_1738938843180/work
python-dateutil==2.9.0.post0
pytz==2025.2
requests==2.32.3
scipy==1.15.2
six==1.17.0
statsmodels==0.14.4
tables==3.10.2
tqdm==4.67.1
typing_extensions==4.13.0
tzdata==2025.2
urllib3==2.3.0

name: fitgrid
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - bzip2=1.0.8=h5eee18b_6
  - ca-certificates=2025.2.25=h06a4308_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - libuuid=1.41.5=h5eee18b_0
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - packaging=24.2=py311h06a4308_0
  - pip=25.0=py311h06a4308_0
  - pluggy=1.5.0=py311h06a4308_0
  - pytest=8.3.4=py311h06a4308_0
  - python=3.11.11=he870216_0
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py311h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.45.1=py311h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - blosc2==3.2.1
      - certifi==2025.1.31
      - charset-normalizer==3.4.1
      - contourpy==1.3.1
      - cycler==0.12.1
      - fonttools==4.56.0
      - idna==3.10
      - kiwisolver==1.4.8
      - matplotlib==3.10.1
      - msgpack==1.1.0
      - ndindex==1.9.2
      - numexpr==2.10.2
      - numpy==2.2.4
      - pandas==2.2.3
      - patsy==1.0.1
      - pillow==11.1.0
      - platformdirs==4.3.7
      - py-cpuinfo==9.0.0
      - pyparsing==3.2.3
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - requests==2.32.3
      - scipy==1.15.2
      - six==1.17.0
      - statsmodels==0.14.4
      - tables==3.10.2
      - tqdm==4.67.1
      - typing-extensions==4.13.0
      - tzdata==2025.2
      - urllib3==2.3.0
prefix: /opt/conda/envs/fitgrid

tests/test_utils_lm.py::test_smoke_get_vifs
fitgrid/utils/__init__.py fitgrid/utils/lm.py
fitgrid/utils/__init__.py fitgrid/utils/lm.py