class_docstr: Factor results class
  
  For result summary, scree/loading plots and factor rotations
  
  Parameters
  ----------
  factor : Factor
      Fitted Factor class
  
  Attributes
  ----------
  uniqueness : ndarray
      The uniqueness (variance of uncorrelated errors unique to
      each variable)
  communality : ndarray
      1 - uniqueness
  loadings : ndarray
      Each column is the loading vector for one factor
  loadings_no_rot : ndarray
      Unrotated loadings, not available under maximum likelihood
      analysis.
  eigenvals : ndarray
      The eigenvalues for a factor analysis obtained using
      principal components; not available under ML estimation.
  n_comp : int
      Number of components (factors)
  nbs : int
      Number of observations
  fa_method : str
      The method used to obtain the decomposition, either 'pa' for
      'principal axes' or 'ml' for maximum likelihood.
  df : int
      Degrees of freedom of the factor model.
  
  Notes
  -----
  Under ML estimation, the default rotation (used for `loadings`) is
  condition IC3 of Bai and Li (2012).  Under this rotation, the
  factor scores are iid and standardized.  If `G` is the canonical
  loadings and `U` is the vector of uniquenesses, then the
  covariance matrix implied by the factor analysis is `GG' +
  diag(U)`.
  
  Status: experimental, Some refactoring will be necessary when new
      features are added.
class_docstr_tok: ["Factor","results","class","For","result","summary",",","scree\/loading","plots","and","factor","rotations","Parameters","--","--","--","--","--","factor",":","Factor","Fitted","Factor","class","Attributes","--","--","--","--","--","uniqueness",":","ndarray","The","uniqueness","(","variance","of","uncorrelated","errors","unique","to","each","variable",")","communality",":","ndarray","1","-","uniqueness","loadings",":","ndarray","Each","column","is","the","loading","vector","for","one","factor","loadings_no_rot",":","ndarray","Unrotated","loadings",",","not","available","under","maximum","likelihood","analysis",".","eigenvals",":","ndarray","The","eigenvalues","for","a","factor","analysis","obtained","using","principal","components",";","not","available","under","ML","estimation",".","n_comp",":","int","Number","of","components","(","factors",")","nbs",":","int","Number","of","observations","fa_method",":","str","The","method","used","to","obtain","the","decomposition",",","either","'pa","'","for","'principal","axes","'","or","'ml","'","for","maximum","likelihood",".","df",":","int","Degrees","of","freedom","of","the","factor","model",".","Notes","--","--","-","Under","ML","estimation",",","the","default","rotation","(","used","for","`","loadings","`",")","is","condition","IC3","of","Bai","and","Li","(","2012",")",".","Under","this","rotation",",","the","factor","scores","are","iid","and","standardized",".","If","`","G","`","is","the","canonical","loadings","and","`","U","`","is","the","vector","of","uniquenesses",",","then","the","covariance","matrix","implied","by","the","factor","analysis","is","`","GG","'","+","diag","(","U",")","`",".","Status",":","experimental",",","Some","refactoring","will","be","necessary","when","new","features","are","added","."]
docstr: Apply rotation, inplace modification of this Results instance
  
  Parameters
  ----------
  method : str
      Rotation to be applied.  Allowed methods are varimax,
      quartimax, biquartimax, equamax, oblimin, parsimax,
      parsimony, biquartimin, promax.
  
  Returns
  -------
  None : nothing returned, modifications are inplace
  
  
  Notes
  -----
  Warning: 'varimax', 'quartimax' and 'oblimin' are verified against R or
  Stata. Some rotation methods such as promax do not produce the same
  results as the R or Stata default functions.
  
  See Also
  --------
  factor_rotation : subpackage that implements rotation methods
docstr_tok: ["Apply","rotation",",","inplace","modification","of","this","Results","instance","Parameters","--","--","--","--","--","method",":","str","Rotation","to","be","applied",".","Allowed","methods","are","varimax",",","quartimax",",","biquartimax",",","equamax",",","oblimin",",","parsimax",",","parsimony",",","biquartimin",",","promax",".","Returns","--","--","--","-","None",":","nothing","returned",",","modifications","are","inplace","Notes","--","--","-","Warning",":","'varimax","'",",","'quartimax","'","and","'oblimin","'","are","verified","against","R","or","Stata",".","Some","rotation","methods","such","as","promax","do","not","produce","the","same","results","as","the","R","or","Stata","default","functions",".","See","Also","--","--","--","--","factor_rotation",":","subpackage","that","implements","rotation","methods"]
code: def rotate(self, method):
      """
      Apply rotation, inplace modification of this Results instance
  
      Parameters
      ----------
      method : str
          Rotation to be applied.  Allowed methods are varimax,
          quartimax, biquartimax, equamax, oblimin, parsimax,
          parsimony, biquartimin, promax.
  
      Returns
      -------
      None : nothing returned, modifications are inplace
  
  
      Notes
      -----
      Warning: 'varimax', 'quartimax' and 'oblimin' are verified against R or
      Stata. Some rotation methods such as promax do not produce the same
      results as the R or Stata default functions.
  
      See Also
      --------
      factor_rotation : subpackage that implements rotation methods
      """
      self.rotation_method = method
      if method not in [
          "varimax",
          "quartimax",
          "biquartimax",
          "equamax",
          "oblimin",
          "parsimax",
          "parsimony",
          "biquartimin",
          "promax",
      ]:
          raise ValueError("Unknown rotation method %s" % (method))
  
      if method in [
          "varimax",
          "quartimax",
          "biquartimax",
          "equamax",
          "parsimax",
          "parsimony",
          "biquartimin",
      ]:
          self.loadings, T = rotate_factors(
              self.loadings_no_rot, method
          )
      elif method == "oblimin":
          self.loadings, T = rotate_factors(
              self.loadings_no_rot, "quartimin"
          )
      elif method == "promax":
          self.loadings, T = promax(self.loadings_no_rot)
      else:
          raise ValueError("rotation method not recognized")
  
      self.rotation_matrix = T
  
imports: import warnings
  import numpy
  from numpy.linalg import eigh, inv, norm, matrix_rank
  import pandas
  from scipy.optimize import minimize
  from statsmodels.tools.decorators import cache_readonly
  from statsmodels.base.model import Model
  from statsmodels.iolib import summary2
  from statsmodels.graphics.utils import _import_mpl
  from .factor_rotation import rotate_factors, promax
label_desc: Use image node_id 3 for calling the FactorResults obj's underlying member method code with example usage: obj.rotate(method) without return types