'return distribution of a full rank affine transform
for full rank scale_matrix only
Parameters
shift : array_like
shift of mean
scale_matrix : array_like
linear transformation matrix
Returns
mvt : instance of MVT
instance of multivariate t distribution given by affine
transformation
Notes
This checks for eigvals<=0, so there are possible problems for cases
with positive eigenvalues close to zero.
see: http://www.statlect.com/mcdstu1.htm
I\'m not sure about general case, non-full rank transformation are not
multivariate t distributed.
y = a + B x
where a is shift,
B is full rank scale matrix with same dimension as sigma'

def affine_transformed(self, shift, scale_matrix):

    B = scale_matrix
    if (not (B.shape == (self.nvars, self.nvars))):
        if (np.linalg.eigvals(B) <= 0).any():
            raise ValueError('affine    transform    has    to    be    full    rank')
    mean_new = (np.dot(B, self.mean) + shift)
    sigma_new = np.dot(np.dot(B, self.sigma), B.T)
    return MVT(mean_new, sigma_new, self.df)
