Source code for sekupy.preprocessing.regression
from sekupy.mixin import LinearModelMixin
import numpy as np
import patsy
import logging
logger = logging.getLogger(__name__)
[docs]
class SampleResidualTransformer(LinearModelMixin):
def __init__(self, name='sample_residual', **kwargs):
super().__init__(name=name, **kwargs)
[docs]
def transform(self, ds, **model_kwargs):
if self.design_attr == 'all':
self.design_attr = [k for k in ds.sa.keys()]
data = {k: ds.sa[k].value for k in self.design_attr}
X = []
for k in self.design_attr:
x = np.asarray(patsy.dmatrix(k + ' - 1', data))
X.append(x)
X = np.hstack(X)
model = self.get_model(X, **model_kwargs)
Y = ds.samples
self.scores = model.fit(Y)
ds_ = ds.copy()
ds_.samples = self.scores.residuals
logger.info("Residuals from GLM with %s attributes" % (', '.join(self.design_attr)))
return super().transform(ds_)
[docs]
class FeatureResidualTransformer(LinearModelMixin):
def __init__(self, name='feature_residual', **kwargs):
super().__init__(name=name, **kwargs)
[docs]
def transform(self, ds, **model_kwargs):
if self.design_attr == 'all':
self.design_attr = [k for k in ds.fa.keys()]
data = {k: ds.fa[k].value for k in self.design_attr}
X = []
for k in self.design_attr:
x = np.asarray(patsy.dmatrix(k + ' - 1', data))
X.append(x)
X = np.hstack(X)
model = self.get_model(X, **model_kwargs)
Y = ds.samples.T
self.scores = model.fit(Y)
ds_ = ds.copy()
ds_.samples = self.scores.residuals.T
logger.info("Residuals from GLM with %s attributes" % (', '.join(self.design_attr)))
return super().transform(ds_)