Я хотел бы запустить групповую регрессию (модель с фиксированным эффектом) для группы лиц, которые однозначно идентифицируются по province
и city
в течение времени t
.
Код для создать фрейм данных и запустить регрессию
import numpy as np
import pandas as pd
from linearmodels import PanelOLS
data = {'y':[1,2,3,1,0,3],
'x1': [0,1,2,3,0,2],
'x2':[1,1,3,2,1,0],
't': ['2020-02-18', '2020-02-18', '2020-02-17', '2020-02-18', '2020-02-18', '2020-02-17'],
'province': ['A', 'A','A','B','B','B'],
'city': ['a','b','a','a','c','a']}
dataframe = pd.DataFrame (data, columns = ['y','x1', 'x2', 't', 'province', 'city'])
dataframe=dataframe.set_index(['t','province','city'], append=True)
mod = PanelOLS(dataframe.y, dataframe[['x1','x2']], entity_effects=True)
Но я получил ошибку, которая говорит: «Ввод данных в фрейме должен иметь MultiIndex с 2 уровнями.»
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-33-eb5264bfefc9> in <module>
1 dataframe=dataframe.set_index(['t','province','city'], append=True)
----> 2 mod = PanelOLS(dataframe.y, dataframe[['x1','x2']], entity_effects=True)
C:\ProgramData\Anaconda3\lib\site-packages\linearmodels\panel\model.py in __init__(self, dependent, exog, weights, entity_effects, time_effects, other_effects, singletons, drop_absorbed)
1038 drop_absorbed: bool = False,
1039 ) -> None:
-> 1040 super(PanelOLS, self).__init__(dependent, exog, weights=weights)
1041
1042 self._entity_effects = entity_effects
C:\ProgramData\Anaconda3\lib\site-packages\linearmodels\panel\model.py in __init__(self, dependent, exog, weights)
224 weights: Optional[PanelDataLike] = None,
225 ) -> None:
--> 226 self.dependent = PanelData(dependent, "Dep")
227 self.exog = PanelData(exog, "Exog")
228 self._original_shape = self.dependent.shape
C:\ProgramData\Anaconda3\lib\site-packages\linearmodels\panel\data.py in __init__(self, x, var_name, convert_dummies, drop_first, copy)
198 if len(x.index.levels) != 2:
199 raise ValueError(
--> 200 "DataFrame input must have a " "MultiIndex with 2 levels"
201 )
202 if isinstance(self._original, (DataFrame, PanelData, Series)):
ValueError: DataFrame input must have a MultiIndex with 2 levels
В качестве решения вместо того, чтобы делать
dataframe=dataframe.set_index(['t','province','city'], append=True)
Я делаю это
dataframe=dataframe.set_index(['t'], append=True)
Это позволит модели пройти go. Но я не знаю, почему. В этом случае я использую два столбца для идентификации группы. Что если мне понадобятся три столбца для идентификации моих групп ? Как python различает переменную ID и x ?