2

我有一个数据框df

[250 rows x 120 columns]
                    0         1         2         3         4         5   \
lag time [s]                                                               
0.041667      0.038638  0.193427  0.126253  0.058737  0.122129  0.117425   
0.083333      0.104397  0.323418  0.390540  0.194786  0.247005  0.242796   
0.125000      0.168620  0.577642  0.782489  0.389399  0.381930  0.325373   
0.166667      0.241057  0.912038  1.361542  0.560007  0.346316  0.343614   
0.208333      0.246506  0.636547  1.863711  0.767916  0.487872  0.203043   
...

我需要适应每列y = a*xx=df.index.values滞后时间

某些列可能包含 NaN,并希望在 pd.DataFrame({'column' : [],'slope' : [], 'stderr' : [] })

我可以单独提取数据并使用 numpy 拟合数据,x但这在我看来很乏味。yfitline()

有没有更好的方法来使用 panda ols 来完成这项工作?

4

1 回答 1

2

您是否需要保留延迟时间作为索引?最简单的方法可能是将其合并为数据框中的列并使用 statsmodels 的公式接口:

import statsmodels.formula.api as sm

df2 = df.reset_index()

modres = {}
for colname in df2.drop('index', axis=1).columns:
    mod = sm.ols(formula=colname+' ~ index', data=df2)
    modres[colname] = mod.fit()

您要求提供列表的数据框,但我认为从每个回归中保留整个结果对象而不是丢弃大部分信息更有意义。我的建议保存回归结果的字典。要访问y1 ~ x回归的系数和标准误差,您可以编写modres['y1'].paramsmodres['y1'].bse

如果您对对象进行内省,您会发现您可以从每个结果对象中获取 AIC、t-stats 等。您还可以将它们传递给许多其他statsmodels函数,用于预测、回溯等。

于 2014-01-30T14:17:21.663 回答