docstr: 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
code: def affine_transformed(self, shift, scale_matrix):
      """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
  
      """
      # full rank method could also be in elliptical and called with super
      # after the rank check
      B = scale_matrix  # tmp variable as shorthand
      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)
  
imports: import numpy
  from scipy import special
  from statsmodels.sandbox.distributions.multivariate import mvstdtprob
  from .extras import mvnormcdf
label_desc: Use image node_id 6 for calling the MVT obj's underlying member method code with example usage: obj.affine_transformed(shift, scale_matrix) and returns: MVT