code: def wls_prediction_std(res, exog=None, weights=None, alpha=0.05):
      """calculate standard deviation and confidence interval for prediction
  
      applies to WLS and OLS, not to general GLS,
      that is independently but not identically distributed observations
  
      Parameters
      ----------
      res : regression result instance
          results of WLS or OLS regression required attributes see notes
      exog : array_like (optional)
          exogenous variables for points to predict
      weights : scalar or array_like (optional)
          weights as defined for WLS (inverse of variance of observation)
      alpha : float (default: alpha = 0.05)
          confidence level for two-sided hypothesis
  
      Returns
      -------
      predstd : array_like, 1d
          standard error of prediction
          same length as rows of exog
      interval_l, interval_u : array_like
          lower und upper confidence bounds
  
      Notes
      -----
      The result instance needs to have at least the following
      res.model.predict() : predicted values or
      res.fittedvalues : values used in estimation
      res.cov_params() : covariance matrix of parameter estimates
  
      If exog is 1d, then it is interpreted as one observation,
      i.e. a row vector.
  
      testing status: not compared with other packages
  
      References
      ----------
  
      Greene p.111 for OLS, extended to WLS by analogy
  
      """
      # work around current bug:
      #    fit does not attach results to model, predict broken
      # res.model.results
  
      covb = res.cov_params()
      if exog is None:
          exog = res.model.exog
          predicted = res.fittedvalues
          if weights is None:
              weights = res.model.weights
      else:
          exog = np.atleast_2d(exog)
          if covb.shape[1] != exog.shape[1]:
              raise ValueError("wrong shape of exog")
          predicted = res.model.predict(res.params, exog)
          if weights is None:
              weights = 1.0
          else:
              weights = np.asarray(weights)
              if weights.size > 1 and len(weights) != exog.shape[0]:
                  raise ValueError(
                      "weights and exog do not have matching shape"
                  )
  
      # full covariance:
      # predvar = res3.mse_resid + np.diag(np.dot(X2,np.dot(covb,X2.T)))
      # predication variance only
      predvar = res.mse_resid / weights + (
          exog * np.dot(covb, exog.T).T
      ).sum(1)
      predstd = np.sqrt(predvar)
      tppf = stats.t.isf(alpha / 2.0, res.df_resid)
      interval_u = predicted + tppf * predstd
      interval_l = predicted - tppf * predstd
      return predstd, interval_l, interval_u
  
imports: import numpy
  from scipy import stats
label_desc: Use image node_id 2 for calling a global function with example usage: wls_prediction_std(res, exog, weights, alpha) and returns: predstd,  interval_l,  interval_u