Repository: statsmodels/statsmodels

Issue:
TypeError when getting conf_int
#### Describe the bug
The following type error occurs when `conf_int` called on `pd.Series` with `MultiIndex`:
```
Traceback (most recent call last):
  File "/home/user/Projects/subfolder/my_project/test1.py", line 42, in <module>
    pred_ci = pred_res.conf_int(alpha=0.01)
  File "/home/user/Programs/anaconda3/envs/vision/lib/python3.7/site-packages/statsmodels/tsa/statespace/mlemodel.py", line 3707, in conf_int
    names = (['lower %s' % name for name in ynames] +
  File "/home/user/Programs/anaconda3/envs/vision/lib/python3.7/site-packages/statsmodels/tsa/statespace/mlemodel.py", line 3707, in <listcomp>
    names = (['lower %s' % name for name in ynames] +
TypeError: not all arguments converted during string formatting
```

#### Code Sample, a copy-pastable example if possible
data: [my_data_sample1.csv](https://drive.google.com/file/d/1bQhM9fLiE8UaE-I9Kys0HjH__UiEA9DW/view?usp=sharing)

```python
df = pd.read_csv("my_data_sample1.csv", header=[0, 1], index_col=0, parse_dates=True)
df = df.iloc[:500, :]

endog = df[("Sens", "1b")]

mod = sm.tsa.SARIMAX(endog, order=(1, 0, 0), trend='c')
res = mod.fit(disp=False)

pred_res = res.get_prediction(start=0, end=len(endog), full_results=True)
pred_means = pred_res.predicted_mean
pred_ci = pred_res.conf_int(alpha=0.01)
```

If the issue has not been resolved, please file it in the issue tracker.

#### Expected Output

No `TypeError`

#### Output of ``import statsmodels.api as sm; sm.show_versions()``
`
0.11.0dev0+592.gd4593c7c1`


Discussion:
Workaround is to not use a multiindex.

Resolving patch:
diff --git a/statsmodels/tsa/statespace/mlemodel.py b/statsmodels/tsa/statespace/mlemodel.py
--- a/statsmodels/tsa/statespace/mlemodel.py
+++ b/statsmodels/tsa/statespace/mlemodel.py
@@ -3704,8 +3704,8 @@ def conf_int(self, method='endpoint', alpha=0.05, **kwds):
             ynames = self.model.data.ynames
             if not type(ynames) == list:
                 ynames = [ynames]
-            names = (['lower %s' % name for name in ynames] +
-                     ['upper %s' % name for name in ynames])
+            names = (['lower {0}'.format(name) for name in ynames] +
+                     ['upper {0}'.format(name) for name in ynames])
             conf_int.columns = names
 
         return conf_int


Test patch:
diff --git a/statsmodels/tsa/statespace/tests/test_exponential_smoothing.py b/statsmodels/tsa/statespace/tests/test_exponential_smoothing.py
--- a/statsmodels/tsa/statespace/tests/test_exponential_smoothing.py
+++ b/statsmodels/tsa/statespace/tests/test_exponential_smoothing.py
@@ -804,6 +804,26 @@ def setup_class(cls):
         super().setup_class(mod, start_params=start_params, rtol=1e-4)
 
 
+class TestMultiIndex(CheckExponentialSmoothing):
+    @classmethod
+    def setup_class(cls):
+        oildata_copy = oildata.copy()
+        oildata_copy.name = ("oil", "data")
+        mod = ExponentialSmoothing(oildata_copy,
+                                   initialization_method='simple')
+        res = mod.filter([results_params['oil_fpp2']['alpha']])
+
+        super().setup_class('oil_fpp2', res)
+
+    def test_conf_int(self):
+        # Forecast confidence intervals
+        ci_95 = self.forecast.conf_int(alpha=0.05)
+        assert_allclose(ci_95["lower ('oil', 'data')"],
+                        results_predict['%s_lower' % self.name][self.nobs:])
+        assert_allclose(ci_95["upper ('oil', 'data')"],
+                        results_predict['%s_upper' % self.name][self.nobs:])
+
+
 def test_invalid():
     # Tests for invalid model specifications that raise ValueErrors
     with pytest.raises(