Welcome to glmtools’s documentation!

import yaml
import numpy as np
import glmtools as glm


# Design config object contains methods for adding regressors, contrasts
# and ftests.
DC = glm.design.DesignConfig()
DC.add_regressor(name='Cond1',rtype='Categorical',codes=1)
DC.add_regressor(name='Cond2',rtype='Categorical',codes=2)
DC.add_regressor(name='Covariate', rtype='Parametric', datainfo='covariate', preproc='z')
DC.add_simple_contrasts()

for subj in range(1):
    # Make a fake dataset
    condition = np.tile( [1,2],4 )
    session = np.repeat([1,2,3,4],2)
    covariate = np.array([-3,-2,-1,0,0,1,2,3])

    # Some random data
    X = np.random.randn(8,)

    # The data object must contain a 'data' kwarg pointing to the array to
    # be analysed. Any other kwargs are considered to be meta-data and
    # pushed into a dict in data.info
    data = glm.data.TrialGLMData(data=X,
                                 category_list=condition,
                                 covariate=covariate,
                                 session=session)

    des = DC.design_from_datainfo(data.info)
    des.plot_summary()

    model = glm.fit.OLSModel(des,data)

Can also define DesignConfigs from yaml

_images/simple_design1.png
yml = """
NewDesign:
  regressors:
  - {name: Cond1, rtype: Categorical, codes: 1}
  - {name: Cond2, rtype: Categorical, codes: 2}
  contrasts:
  - {name: Cond1, values: 1 0}
  - {name: Cond2, values: 0 1}
"""

DC = glm.design.DesignConfig(yaml_text=yml)

For contrasts in complicated designs we can specify regressors via a dict

y2 = """
NewDesign:
  regressors:
  - {name: Cond1, rtype: Categorical, codes: 1}
  - {name: Cond2, rtype: Categorical, codes: 2}
  - {name: Session, rtype: MeanEffects, datainfo: session}
  contrasts:
  - {name: Cond1, values: {Cond1: 1}}
  - {name: Cond1, values: {Cond2: 1}}
  - {name: CondDiff, values: {Cond1: 1, Cond2: -1}}
"""

DC = glm.design.DesignConfig(yaml_text=y2)

This can extend to some more complicated designs

Y = np.random.randn(40,8)

sessions = np.tile(np.arange(10),4)
subjs = np.repeat(np.arange(4),10)
covariate = np.random.randn(40,)

group_data = glm.data.TrialGLMData(data=Y,
                                   sessions=sessions,
                                   subjs=subjs,
                                   covariate=covariate)


DC = glm.design.DesignConfig()
DC.add_regressor(name='Constant',rtype='Constant')
DC.add_regressor(name='Sessions',rtype='Parametric',datainfo='sessions',preproc='z')
DC.add_regressor(name='Covariate',rtype='Parametric',datainfo='covariate',preproc='z')
DC.add_regressor(name='Subj_{0}',rtype='MeanEffects',datainfo='subjs')

DC.add_contrast(name='GroupMean', values={'Constant':1})
DC.add_contrast(name='SessionEffect', values={'Sessions':1})
DC.add_contrast(name='CovariateEffect', values={'Covariate':1})

des = DC.design_from_datainfo(group_data.info)
des.plot_summary()
_images/simple_design2.png
yml = """
NewDesign:
  contrasts:
  - name: GroupMean
    values: {Constant: 1}
  - name: SessionEffect
    values: {Sessions: 1}
  - name: CovariateEffect
    values: {Covariate: 1}
  regressors:
  - {name: Constant, regressor: ConstantRegressor}
  - {datainfo: sessions, name: Sessions, preproc: z, regressor: ParametricRegressor}
  - {datainfo: covariate, name: Covariate, preproc: z, regressor: ParametricRegressor}
  - {datainfo: subjs, name: 'Subj_{0}', regressor: MeanEffectsRegressor}
"""
DC = glm.design.DesignConfig(yaml_text=yml)

Some permutation features

# Permutations
P = glm.permutations.MaxStatPermutation(design, data, 1,
                                        nperms,
                                        metric='tstats',
                                        perm_args=perm_args)

# 2d cluster permutations
perm_args = {'cluster_forming_threshold': 2.3, 'pooled_dims': (1, 2)}
CP = permutations.ClusterPermutation(design, data, cont,
                                     500,
                                     perm_args=perm_args,
                                     metric='tstats')
cluster_masks, cluster_stats = CP.get_sig_clusters(data, 99)

Using sklearn model fits

# glmtools OLS model
model = glm.fit.OLSModel(design,data)
# sklearn OLS model
skmodel1 = glm.fit.SKLModel(design,data)
# sklearn robust regression
skmodel2 = glm.fit.SKLModel(design,data,fit_args={'lm':'RANSACRegressor'})

Indices and tables