code: def lag_observations(observations, lag, stride=1):
      r
      obsnew = []
      for obs in observations:
          for shift in range(0, lag, stride):
              obs_lagged = (obs[shift:][::lag])
              if len(obs_lagged) > 1:
                  obsnew.append(obs_lagged)
      return obsnew
docs: r""" Create new trajectories that are subsampled at lag but shifted
  
      Given a trajectory (s0, s1, s2, s3, s4, ...) and lag 3, this function will generate 3 trajectories
      (s0, s3, s6, ...), (s1, s4, s7, ...) and (s2, s5, s8, ...). Use this function in order to parametrize a MLE
      at lag times larger than 1 without discarding data. Do not use this function for Bayesian estimators, where
      data must be given such that subsequent transitions are uncorrelated.
  
      Parameters
      ----------
      observations : list of int arrays
          observation trajectories
      lag : int
          lag time
      stride : int, default=1
          will return only one trajectory for every stride. Use this for Bayesian analysis.