class_docstr: Impacts of data revisions and news on estimates of variables of interest
  
  Parameters
  ----------
  news_results : SimpleNamespace instance
      Results from `KalmanSmoother.news`.
  model : MLEResults
      The results object associated with the model from which the NewsResults
      was generated.
  updated : MLEResults
      The results object associated with the model containing the updated
      dataset.
  previous : MLEResults
      The results object associated with the model containing the previous
      dataset.
  impacted_variable : str, list, array, or slice, optional
      Observation variable label or slice of labels specifying particular
      impacted variables to display in output. The impacted variable(s)
      describe the variables that were *affected* by the news. If you do not
      know the labels for the variables, check the `endog_names` attribute of
      the model instance.
  tolerance : float, optional
      The numerical threshold for determining zero impact. Default is that
      any impact less than 1e-10 is assumed to be zero.
  row_labels : iterable
      Row labels (often dates) for the impacts of the revisions and news.
  
  Attributes
  ----------
  total_impacts : pd.DataFrame
      Updates to forecasts of impacted variables from both news and data
      revisions, E[y^i | post] - E[y^i | previous].
  update_impacts : pd.DataFrame
      Updates to forecasts of impacted variables from the news,
      E[y^i | post] - E[y^i | revisions] where y^i are the impacted variables
      of interest.
  revision_impacts : pd.DataFrame
      Updates to forecasts of impacted variables from all data revisions,
      E[y^i | revisions] - E[y^i | previous].
  news : pd.DataFrame
      The unexpected component of the updated data,
      E[y^u | post] - E[y^u | revisions] where y^u are the updated variables.
  weights : pd.DataFrame
      Weights describing the effect of news on variables of interest.
  revisions : pd.DataFrame
      The revisions between the current and previously observed data, for
      revisions for which detailed impacts were computed.
  revisions_all : pd.DataFrame
      The revisions between the current and previously observed data,
      y^r_{revised} - y^r_{previous} where y^r are the revised variables.
  revision_weights : pd.DataFrame
      Weights describing the effect of revisions on variables of interest,
      for revisions for which detailed impacts were computed.
  revision_weights_all : pd.DataFrame
      Weights describing the effect of revisions on variables of interest,
      with a new entry that includes NaNs for the revisions for which
      detailed impacts were not computed.
  update_forecasts : pd.DataFrame
      Forecasts based on the previous dataset of the variables that were
      updated, E[y^u | previous].
  update_realized : pd.DataFrame
      Actual observed data associated with the variables that were
      updated, y^u
  revisions_details_start : int
      Integer index of first period in which detailed revision impacts were
      computed.
  revision_detailed_impacts : pd.DataFrame
      Updates to forecasts of impacted variables from data revisions with
      detailed impacts, E[y^i | revisions] - E[y^i | grouped revisions].
  revision_grouped_impacts : pd.DataFrame
      Updates to forecasts of impacted variables from data revisions that
      were grouped together, E[y^i | grouped revisions] - E[y^i | previous].
  revised_prev : pd.DataFrame
      Previously observed data associated with the variables that were
      revised, for revisions for which detailed impacts were computed.
  revised_prev_all : pd.DataFrame
      Previously observed data associated with the variables that were
      revised, y^r_{previous}
  revised : pd.DataFrame
      Currently observed data associated with the variables that were
      revised, for revisions for which detailed impacts were computed.
  revised_all : pd.DataFrame
      Currently observed data associated with the variables that were
      revised, y^r_{revised}
  prev_impacted_forecasts : pd.DataFrame
      Previous forecast of the variables of interest, E[y^i | previous].
  post_impacted_forecasts : pd.DataFrame
      Forecast of the variables of interest after taking into account both
      revisions and updates, E[y^i | post].
  revisions_iloc : pd.DataFrame
      The integer locations of the data revisions in the dataset.
  revisions_ix : pd.DataFrame
      The label-based locations of the data revisions in the dataset.
  revisions_iloc_detailed : pd.DataFrame
      The integer locations of the data revisions in the dataset for which
      detailed impacts were computed.
  revisions_ix_detailed : pd.DataFrame
      The label-based locations of the data revisions in the dataset for
      which detailed impacts were computed.
  updates_iloc : pd.DataFrame
      The integer locations of the updated data points.
  updates_ix : pd.DataFrame
      The label-based locations of updated data points.
  state_index : array_like
      Index of state variables used to compute impacts.
  
  References
  ----------
  .. [1] Bańbura, Marta, and Michele Modugno.
         "Maximum likelihood estimation of factor models on datasets with
         arbitrary pattern of missing data."
         Journal of Applied Econometrics 29, no. 1 (2014): 133-160.
  .. [2] Bańbura, Marta, Domenico Giannone, and Lucrezia Reichlin.
         "Nowcasting."
         The Oxford Handbook of Economic Forecasting. July 8, 2011.
  .. [3] Bańbura, Marta, Domenico Giannone, Michele Modugno, and Lucrezia
         Reichlin.
         "Now-casting and the real-time data flow."
         In Handbook of economic forecasting, vol. 2, pp. 195-237.
         Elsevier, 2013.
class_docstr_tok: ["Impacts","of","data","revisions","and","news","on","estimates","of","variables","of","interest","Parameters","--","--","--","--","--","news_results",":","SimpleNamespace","instance","Results","from","`","KalmanSmoother.news","`",".","model",":","MLEResults","The","results","object","associated","with","the","model","from","which","the","NewsResults","was","generated",".","updated",":","MLEResults","The","results","object","associated","with","the","model","containing","the","updated","dataset",".","previous",":","MLEResults","The","results","object","associated","with","the","model","containing","the","previous","dataset",".","impacted_variable",":","str",",","list",",","array",",","or","slice",",","optional","Observation","variable","label","or","slice","of","labels","specifying","particular","impacted","variables","to","display","in","output",".","The","impacted","variable","(","s",")","describe","the","variables","that","were","*","affected","*","by","the","news",".","If","you","do","not","know","the","labels","for","the","variables",",","check","the","`","endog_names","`","attribute","of","the","model","instance",".","tolerance",":","float",",","optional","The","numerical","threshold","for","determining","zero","impact",".","Default","is","that","any","impact","less","than","1e-10","is","assumed","to","be","zero",".","row_labels",":","iterable","Row","labels","(","often","dates",")","for","the","impacts","of","the","revisions","and","news",".","Attributes","--","--","--","--","--","total_impacts",":","pd.DataFrame","Updates","to","forecasts","of","impacted","variables","from","both","news","and","data","revisions",",","E","[","y^i","|","post","]","-","E","[","y^i","|","previous","]",".","update_impacts",":","pd.DataFrame","Updates","to","forecasts","of","impacted","variables","from","the","news",",","E","[","y^i","|","post","]","-","E","[","y^i","|","revisions","]","where","y^i","are","the","impacted","variables","of","interest",".","revision_impacts",":","pd.DataFrame","Updates","to","forecasts","of","impacted","variables","from","all","data","revisions",",","E","[","y^i","|","revisions","]","-","E","[","y^i","|","previous","]",".","news",":","pd.DataFrame","The","unexpected","component","of","the","updated","data",",","E","[","y^u","|","post","]","-","E","[","y^u","|","revisions","]","where","y^u","are","the","updated","variables",".","weights",":","pd.DataFrame","Weights","describing","the","effect","of","news","on","variables","of","interest",".","revisions",":","pd.DataFrame","The","revisions","between","the","current","and","previously","observed","data",",","for","revisions","for","which","detailed","impacts","were","computed",".","revisions_all",":","pd.DataFrame","The","revisions","between","the","current","and","previously","observed","data",",","y^r_","{","revised","}","-","y^r_","{","previous","}","where","y^r","are","the","revised","variables",".","revision_weights",":","pd.DataFrame","Weights","describing","the","effect","of","revisions","on","variables","of","interest",",","for","revisions","for","which","detailed","impacts","were","computed",".","revision_weights_all",":","pd.DataFrame","Weights","describing","the","effect","of","revisions","on","variables","of","interest",",","with","a","new","entry","that","includes","NaNs","for","the","revisions","for","which","detailed","impacts","were","not","computed",".","update_forecasts",":","pd.DataFrame","Forecasts","based","on","the","previous","dataset","of","the","variables","that","were","updated",",","E","[","y^u","|","previous","]",".","update_realized",":","pd.DataFrame","Actual","observed","data","associated","with","the","variables","that","were","updated",",","y^u","revisions_details_start",":","int","Integer","index","of","first","period","in","which","detailed","revision","impacts","were","computed",".","revision_detailed_impacts",":","pd.DataFrame","Updates","to","forecasts","of","impacted","variables","from","data","revisions","with","detailed","impacts",",","E","[","y^i","|","revisions","]","-","E","[","y^i","|","grouped","revisions","]",".","revision_grouped_impacts",":","pd.DataFrame","Updates","to","forecasts","of","impacted","variables","from","data","revisions","that","were","grouped","together",",","E","[","y^i","|","grouped","revisions","]","-","E","[","y^i","|","previous","]",".","revised_prev",":","pd.DataFrame","Previously","observed","data","associated","with","the","variables","that","were","revised",",","for","revisions","for","which","detailed","impacts","were","computed",".","revised_prev_all",":","pd.DataFrame","Previously","observed","data","associated","with","the","variables","that","were","revised",",","y^r_","{","previous","}","revised",":","pd.DataFrame","Currently","observed","data","associated","with","the","variables","that","were","revised",",","for","revisions","for","which","detailed","impacts","were","computed",".","revised_all",":","pd.DataFrame","Currently","observed","data","associated","with","the","variables","that","were","revised",",","y^r_","{","revised","}","prev_impacted_forecasts",":","pd.DataFrame","Previous","forecast","of","the","variables","of","interest",",","E","[","y^i","|","previous","]",".","post_impacted_forecasts",":","pd.DataFrame","Forecast","of","the","variables","of","interest","after","taking","into","account","both","revisions","and","updates",",","E","[","y^i","|","post","]",".","revisions_iloc",":","pd.DataFrame","The","integer","locations","of","the","data","revisions","in","the","dataset",".","revisions_ix",":","pd.DataFrame","The","label-based","locations","of","the","data","revisions","in","the","dataset",".","revisions_iloc_detailed",":","pd.DataFrame","The","integer","locations","of","the","data","revisions","in","the","dataset","for","which","detailed","impacts","were","computed",".","revisions_ix_detailed",":","pd.DataFrame","The","label-based","locations","of","the","data","revisions","in","the","dataset","for","which","detailed","impacts","were","computed",".","updates_iloc",":","pd.DataFrame","The","integer","locations","of","the","updated","data","points",".","updates_ix",":","pd.DataFrame","The","label-based","locations","of","updated","data","points",".","state_index",":","array_like","Index","of","state","variables","used","to","compute","impacts",".","References","--","--","--","--","--","..","[","1","]","Ba\u0144bura",",","Marta",",","and","Michele","Modugno",".","``","Maximum","likelihood","estimation","of","factor","models","on","datasets","with","arbitrary","pattern","of","missing","data",".","''","Journal","of","Applied","Econometrics","29",",","no",".","1","(","2014",")",":","133-160",".","..","[","2","]","Ba\u0144bura",",","Marta",",","Domenico","Giannone",",","and","Lucrezia","Reichlin",".","``","Nowcasting",".","''","The","Oxford","Handbook","of","Economic","Forecasting",".","July","8",",","2011",".","..","[","3","]","Ba\u0144bura",",","Marta",",","Domenico","Giannone",",","Michele","Modugno",",","and","Lucrezia","Reichlin",".","``","Now-casting","and","the","real-time","data","flow",".","''","In","Handbook","of","economic","forecasting",",","vol",".","2",",","pp",".","195-237",".","Elsevier",",","2013","."]
docstr: Create summary table with detailed impacts from news; by date, variable
  
  Parameters
  ----------
  impact_date : int, str, datetime, list, array, or slice, optional
      Observation index label or slice of labels specifying particular
      impact periods to display. The impact date(s) describe the periods
      in which impacted variables were *affected* by the news. If this
      argument is given, the output table will only show this impact date
      or dates. Note that this argument is passed to the Pandas `loc`
      accessor, and so it should correspond to the labels of the model's
      index. If the model was created with data in a list or numpy array,
      then these labels will be zero-indexes observation integers.
  impacted_variable : str, list, array, or slice, optional
      Observation variable label or slice of labels specifying particular
      impacted variables to display. The impacted variable(s) describe
      the variables that were *affected* by the news. If you do not know
      the labels for the variables, check the `endog_names` attribute of
      the model instance.
  groupby : {impact date, impacted date}
      The primary variable for grouping results in the impacts table. The
      default is to group by update date.
  show_revisions_columns : bool, optional
      If set to False, the impacts table will not show the impacts from
      data revisions or the total impacts. Default is to show the
      revisions and totals columns if any revisions were made and
      otherwise to hide them.
  sparsify : bool, optional, default True
      Set to False for the table to include every one of the multiindex
      keys at each row.
  float_format : str, optional
      Formatter format string syntax for converting numbers to strings.
      Default is '%.2f'.
  
  Returns
  -------
  impacts_table : SimpleTable
      Table describing total impacts from both revisions and news. See
      the documentation for the `impacts` attribute for more details
      about the index and columns.
  
  See Also
  --------
  impacts
docstr_tok: ["Create","summary","table","with","detailed","impacts","from","news",";","by","date",",","variable","Parameters","--","--","--","--","--","impact_date",":","int",",","str",",","datetime",",","list",",","array",",","or","slice",",","optional","Observation","index","label","or","slice","of","labels","specifying","particular","impact","periods","to","display",".","The","impact","date","(","s",")","describe","the","periods","in","which","impacted","variables","were","*","affected","*","by","the","news",".","If","this","argument","is","given",",","the","output","table","will","only","show","this","impact","date","or","dates",".","Note","that","this","argument","is","passed","to","the","Pandas","`","loc","`","accessor",",","and","so","it","should","correspond","to","the","labels","of","the","model's","index",".","If","the","model","was","created","with","data","in","a","list","or","numpy","array",",","then","these","labels","will","be","zero-indexes","observation","integers",".","impacted_variable",":","str",",","list",",","array",",","or","slice",",","optional","Observation","variable","label","or","slice","of","labels","specifying","particular","impacted","variables","to","display",".","The","impacted","variable","(","s",")","describe","the","variables","that","were","*","affected","*","by","the","news",".","If","you","do","not","know","the","labels","for","the","variables",",","check","the","`","endog_names","`","attribute","of","the","model","instance",".","groupby",":","{","impact","date",",","impacted","date","}","The","primary","variable","for","grouping","results","in","the","impacts","table",".","The","default","is","to","group","by","update","date",".","show_revisions_columns",":","bool",",","optional","If","set","to","False",",","the","impacts","table","will","not","show","the","impacts","from","data","revisions","or","the","total","impacts",".","Default","is","to","show","the","revisions","and","totals","columns","if","any","revisions","were","made","and","otherwise","to","hide","them",".","sparsify",":","bool",",","optional",",","default","True","Set","to","False","for","the","table","to","include","every","one","of","the","multiindex","keys","at","each","row",".","float_format",":","str",",","optional","Formatter","format","string","syntax","for","converting","numbers","to","strings",".","Default","is","'","%",".2f","'",".","Returns","--","--","--","-","impacts_table",":","SimpleTable","Table","describing","total","impacts","from","both","revisions","and","news",".","See","the","documentation","for","the","`","impacts","`","attribute","for","more","details","about","the","index","and","columns",".","See","Also","--","--","--","--","impacts"]
code: def summary_impacts(
      self,
      impact_date=None,
      impacted_variable=None,
      groupby="impact date",
      show_revisions_columns=None,
      sparsify=True,
      float_format="%.2f",
  ):
      """
      Create summary table with detailed impacts from news; by date, variable
  
      Parameters
      ----------
      impact_date : int, str, datetime, list, array, or slice, optional
          Observation index label or slice of labels specifying particular
          impact periods to display. The impact date(s) describe the periods
          in which impacted variables were *affected* by the news. If this
          argument is given, the output table will only show this impact date
          or dates. Note that this argument is passed to the Pandas `loc`
          accessor, and so it should correspond to the labels of the model's
          index. If the model was created with data in a list or numpy array,
          then these labels will be zero-indexes observation integers.
      impacted_variable : str, list, array, or slice, optional
          Observation variable label or slice of labels specifying particular
          impacted variables to display. The impacted variable(s) describe
          the variables that were *affected* by the news. If you do not know
          the labels for the variables, check the `endog_names` attribute of
          the model instance.
      groupby : {impact date, impacted date}
          The primary variable for grouping results in the impacts table. The
          default is to group by update date.
      show_revisions_columns : bool, optional
          If set to False, the impacts table will not show the impacts from
          data revisions or the total impacts. Default is to show the
          revisions and totals columns if any revisions were made and
          otherwise to hide them.
      sparsify : bool, optional, default True
          Set to False for the table to include every one of the multiindex
          keys at each row.
      float_format : str, optional
          Formatter format string syntax for converting numbers to strings.
          Default is '%.2f'.
  
      Returns
      -------
      impacts_table : SimpleTable
          Table describing total impacts from both revisions and news. See
          the documentation for the `impacts` attribute for more details
          about the index and columns.
  
      See Also
      --------
      impacts
      """
      # Squeeze for univariate models
      if impacted_variable is None and self.k_endog == 1:
          impacted_variable = self.endog_names[0]
  
      # Default is to only show the revisions columns if there were any
      # revisions (otherwise it would just be a column of zeros)
      if show_revisions_columns is None:
          show_revisions_columns = self.n_revisions > 0
  
      # Select only the variables / dates of interest
      s = list(np.s_[:, :])
      if impact_date is not None:
          s[0] = np.s_[impact_date]
      if impacted_variable is not None:
          s[1] = np.s_[impacted_variable]
      s = tuple(s)
      impacts = self.impacts.loc[s, :]
  
      # Make the first index level the groupby level
      groupby = groupby.lower()
      if groupby in ["impacted variable", "impacted_variable"]:
          impacts.index = impacts.index.swaplevel(1, 0)
      elif groupby not in ["impact date", "impact_date"]:
          raise ValueError(
              "Invalid groupby for impacts table. Valid options"
              ' are "impact date" or "impacted variable".'
              f'Got "{groupby}".'
          )
      impacts = impacts.sort_index()
  
      # Drop the non-groupby level if there's only one value
      tmp_index = impacts.index.remove_unused_levels()
      k_vars = len(tmp_index.levels[1])
      removed_level = None
      if sparsify and k_vars == 1:
          name = tmp_index.names[1]
          value = tmp_index.levels[1][0]
          removed_level = f"{name} = {value}"
          impacts.index = tmp_index.droplevel(1)
          impacts = impacts.applymap(
              lambda num: "" if pd.isnull(num) else float_format % num
          )
          impacts = impacts.reset_index()
          impacts.iloc[:, 0] = impacts.iloc[:, 0].map(str)
      else:
          impacts = impacts.reset_index()
          impacts.iloc[:, :2] = impacts.iloc[:, :2].applymap(str)
          impacts.iloc[:, 2:] = impacts.iloc[:, 2:].applymap(
              lambda num: "" if pd.isnull(num) else float_format % num
          )
  
      # Sparsify the groupby column
      if sparsify and groupby in impacts:
          mask = impacts[groupby] == impacts[groupby].shift(1)
          tmp = impacts.loc[mask, groupby]
          if len(tmp) > 0:
              impacts.loc[mask, groupby] = ""
  
      # Drop revisions and totals columns if applicable
      if not show_revisions_columns:
          impacts.drop(
              ["impact of revisions", "total impact"],
              axis=1,
              inplace=True,
          )
  
      params_data = impacts.values
      params_header = impacts.columns.tolist()
      params_stubs = None
  
      title = "Impacts"
      if removed_level is not None:
          join = "on" if groupby == "date" else "for"
          title += f" {join} [{removed_level}]"
      impacts_table = SimpleTable(
          params_data,
          params_header,
          params_stubs,
          txt_fmt=fmt_params,
          title=title,
      )
  
      return impacts_table
  
imports: from statsmodels.compat.pandas import FUTURE_STACK
  import numpy
  import pandas
  from statsmodels.iolib.summary import Summary
  from statsmodels.iolib.table import SimpleTable
  from statsmodels.iolib.tableformatting import fmt_params
label_desc: Use image node_id 14 for calling the NewsResults obj's underlying member method code with example usage: obj.summary_impacts(impact_date, impacted_variable, groupby, show_revisions_columns, sparsify, float_format) and returns: impacts_table