【问题标题】:categorical variable panel ols分类变量面板 ols
【发布时间】:2019-12-31 10:21:55
【问题描述】:

对于我的 PanelOLS,我喜欢包含分类变量。 这是我的模型:

import statsmodels.api as sm

exog_vars = ['x1', 'x2', 'x3']
exog = sm.add_constant(df[exog_vars])
mod = PanelOLS(df.y, exog, entity_effects=True, time_effects=True)
result = mod.fit(cov_type='clustered', cluster_entity=True)

分类变量是一个行业的数字。这个数字存储在我的数据框中(df['x4'])。 你知道如何包含分类变量吗?或者您是否需要更多信息来回答问题。

我的数据框:

我试过了:

df['x4'] = pd.Categorical(gesamt.x4)

mod = PanelOLS(gesamt.CAR, exog, other_effects=df['x4'], entity_effects=True, time_effects=True)

发生以下错误:

raise ValueError('At most two effects supported.')

ValueError: 最多支持两种效果。

【问题讨论】:

  • x1x2x3 是数字吗?
  • 是的,所有列都是数字

标签: pandas statsmodels panel-data


【解决方案1】:

执行此操作的最简单方法可能是对您的列 x4 进行一次热编码。

如果你有

df = pd.DataFrame({'x1': [1,2,3], 'x4': ['bob', 'cat' ,'cat']})
df

看起来像

   x1   x4
0   1  bob
1   2  cat
2   3  cat

然后

pd.get_dummies(df, 'x4')

给你

   x1  x4_bob  x4_cat
0   1       1       0
1   2       0       1
2   3       0       1

或者,

df['x4'] = pd.Categorical(df.x4).codes
df

会给你

   x1  x4
0   1   0
1   2   1
2   3   1

【讨论】:

  • 感谢您的解决方案。就我而言,我有大约 100 个不同的行业。除了为每个行业创建新列之外,您知道是否还有其他方法
  • 你能在你的问题中举一个你的数据例子吗?不知道我明白了,抱歉
  • @Pytno 我已经更新了我的答案——也许这就是你想要的?
  • (顺便说一句,如果您使用LightGBM 作为模型,那么您可以直接使用分类列而无需对其进行编码)
猜你喜欢
  • 2019-09-08
  • 2019-04-14
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
相关资源
最近更新 更多