Python 中的面板回归

jer*_*eyz 7 python pandas statsmodels

我正在尝试对 Pandas Dataframes 运行面板回归:

目前我有两个数据框,每个数据框包含 52 行(日期)* 99 列(99 个股票):带有数据表示的 Markdown 文件

运行时:

est=sm.OLS(Stockslist,averages).fit()
est.summary()
Run Code Online (Sandbox Code Playgroud)

我得到 ValueError: 形状 (52,99) 和 (52,99) 未对齐:99 (dim 1) != 52 (dim 0)

有人可以指出我做错了什么吗?该模型只是 y(i,t)=x(i,t)+误差项,因此没有截距。但是我想在未来添加时间效果。

亲切的问候,杰伦

Ste*_*fan 6

尝试以下操作 - 我已从上述链接复制了股票数据并为该x列添加了随机数据。对于面板回归,您需要评论中提到的“MultiIndex”。

df = pd.DataFrame(df.set_index('dates').stack())
df.columns = ['y']
df['x'] = np.random.random(size=len(df.index))
df.info()

MultiIndex: 100 entries, (2015-04-03 00:00:00, AB INBEV) to (2015-05-01 00:00:00, ZC.PA)
Data columns (total 2 columns):
y    100 non-null float64
x    100 non-null float64
dtypes: float64(2)
memory usage: 2.3+ KB

regression = PanelOLS(y=df['y'], x=df[['x']])

regression

-------------------------Summary of Regression Analysis-------------------------

Formula: Y ~ <x> + <intercept>

Number of Observations:         100
Number of Degrees of Freedom:   2

R-squared:         0.0042
Adj R-squared:    -0.0060

Rmse:              0.2259

F-stat (1, 98):     0.4086, p-value:     0.5242

Degrees of Freedom: model 1, resid 98

-----------------------Summary of Estimated Coefficients------------------------
      Variable       Coef    Std Err     t-stat    p-value    CI 2.5%   CI 97.5%
--------------------------------------------------------------------------------
             x    -0.0507     0.0794      -0.64     0.5242    -0.2063     0.1048
     intercept     2.1952     0.0448      49.05     0.0000     2.1075     2.2829
---------------------------------End of Summary---------------------------------
Run Code Online (Sandbox Code Playgroud)


jer*_*eyz 3

正如您上面提到的,我按以下方式更改了代码:

  1. 我将堆栈转换为两个数据框
  2. 我将它们连接到一个多索引数据框中
  3. 运行回归并添加时间效应

    <class 'pandas.core.frame.DataFrame'>
    MultiIndex: 5096 entries, (2015-04-03 00:00:00, AB INBEV) to (25/03/16, ZC.PA)
    Data columns (total 2 columns):
    indvalues    5096 non-null float64
    avgvalues    5096 non-null float64
    dtypes: float64(2)
    memory usage: 119.4+ KB
    
    from pandas.stats.plm import PanelOLS
    regression=PanelOLS(y=df["indvalues"], x=df[["avgvalues"]], time_effects=True)
    
    Run Code Online (Sandbox Code Playgroud)

现在回归效果非常好!谢谢斯特凡·詹森