code: def simulate(self):
      endog, exog, group, time = [], [], [], []
  
      for i in range(self.ngroups):
          gsize = np.random.randint(
              self.group_size_range[0], self.group_size_range[1]
          )
  
          group.append(
              [
                  i,
              ]
              * gsize
          )
  
          time1 = np.random.normal(size=(gsize, 2))
          time.append(time1)
  
          exog1 = np.random.normal(size=(gsize, len(self.params[0])))
          exog.append(exog1)
  
          # Probabilities for each outcome
          prob = [np.exp(np.dot(exog1, p)) for p in self.params]
          prob = np.vstack(prob).T
          prob /= prob.sum(1)[:, None]
  
          m = len(self.params)
          endog1 = []
          for k in range(gsize):
              pdist = stats.rv_discrete(values=(lrange(m), prob[k, :]))
              endog1.append(pdist.rvs())
  
          endog.append(np.asarray(endog1))
  
      self.exog = np.concatenate(exog, axis=0)
      self.endog = np.concatenate(endog).astype(np.int32)
      self.time = np.concatenate(time, axis=0)
      self.group = np.concatenate(group)
      self.offset = np.zeros(len(self.endog), dtype=np.float64)
  
imports: from statsmodels.compat.python import lrange
  import numpy
  from scipy import stats
  from statsmodels.genmod.generalized_estimating_equations import GEE, gee_setup_ordinal, gee_setup_nominal, gee_ordinal_starting_values, Multinomial
  from statsmodels.genmod.families import Binomial
  from statsmodels.genmod.cov_struct import GlobalOddsRatio
  from .gee_gaussian_simulation_check import GEE_simulator
label_desc: Use image node_id 4 for calling the nominal_simulator obj's underlying member method code with example usage: obj.simulate() without return types