我有一个数据框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*x
与x=df.index.values
匹配每列的滞后时间
某些列可能包含 NaN,并且希望在 a 中恢复不同的结果
pd.DataFrame({'column' : [],'slope' : [], 'stderr' : [] })
我可以单独提取 x
、y
数据并使用 numpy fitline()
拟合数据,但这在我看来很乏味。
有没有更好的方法使用 panda ols 来完成这项工作?
最佳答案
是否需要保留滞后时间作为索引?最简单的方法可能是将其作为数据框中的一列并使用 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'].params
和 modres['y1'].bse
。
如果您对对象进行内省(introspection),您会发现可以从每个结果对象中获取 AIC、t-stats 等。您还可以将它们传递给许多其他 statsmodels
函数以进行预测、回溯等。
关于pandas - 以 x 值作为索引的 pandas Dataframe 的线性回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21457314/